สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
สวัสดี! ในบทช่วยสอนนี้ เราจะพยายามสร้างการสื่อสาร USART ระหว่าง STM32F4 ARM MCU และ Python (สามารถแทนที่ด้วยภาษาอื่นได้) เอาล่ะ มาเริ่มกันเลย:)
ขั้นตอนที่ 1: ข้อกำหนดซอฟต์แวร์และฮาร์ดแวร์
ในแง่ของฮาร์ดแวร์ที่คุณต้องการ:
- STM32F4 Discovery Board (หรือบอร์ด STM32 อื่นๆ)
- ตัวแปลง USB เป็น TTL
ในแง่ของซอฟต์แวร์:
- STM32CubeMX
- Keil uVision5
- Python พร้อมติดตั้งไลบรารี่ซีเรียล
ขั้นตอนที่ 2: การกำหนดค่า STM32CubeMX
อันดับแรก มาทำความเข้าใจสิ่งที่เราต้องการทำก่อน เราต้องการส่งข้อมูลไปยังบอร์ดจาก Python ผ่าน USART และตรวจสอบว่าเรามีข้อมูลที่ถูกต้องและไฟ LED สลับหรือไม่ ดังนั้น เราต้องเปิดใช้งาน USART และ Led
-
เปิดใช้งาน USART2 จากแท็บการเชื่อมต่อ
- เปลี่ยนโหมดเป็นอะซิงโครนัส
- อัตราบอดถึง 9600 Bits/s
- ความยาวของคำถึง 8 บิตโดยไม่มีความเท่าเทียมกัน
- ไม่มีพาริตี้บิต
- จากการตั้งค่า DMA เพิ่ม USART2_RX ในโหมด cicular
- จากการตั้งค่า NVIC เปิดใช้งาน USART2 global interrupt
- เปิดใช้งาน LED โดยคลิกที่ PD12
จากนั้นสร้างรหัส:)
ขั้นตอนที่ 3: การพัฒนาซอฟต์แวร์ Keil
#รวม
#รวม
ไลบรารีเหล่านี้จะจำเป็นในการดำเนินการสตริงและเพื่อกำหนดตัวแปรบูลีน
/* รหัสผู้ใช้ BEGIN 2 */ HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1); /* รหัสผู้ใช้ สิ้นสุด 2 */
ที่นี่ UART ได้รับเมื่อเริ่มต้น DMA
/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* ป้องกันการคอมไพล์อาร์กิวเมนต์ที่ไม่ได้ใช้ */ UNUSED(huart); /* หมายเหตุ: ฟังก์ชันนี้ไม่ควรแก้ไข เมื่อต้องการเรียกกลับ HAL_UART_RxCpltCallback สามารถนำไปใช้ในไฟล์ผู้ใช้ */ if(data_buffer[0] != '\n'){ data_full[index_] = data_buffer[0]; ดัชนี_++; }อื่น{ index_ = 0; เสร็จแล้ว = 1; } //HAL_UART_Transmit(&huart2, data_buffer, 1, 10); } /* รหัสผู้ใช้ สิ้นสุด 4 */
นี่คือ ISR ซึ่งเปิดใช้งานเมื่อเราได้รับอักขระหนึ่งไบต์ ดังนั้น. เราได้รับไบต์นั้นและเขียนลงใน data_full ซึ่งมีข้อมูลที่ได้รับทั้งหมดจนกว่าเราจะได้รับ '\n' เมื่อเราได้รับ '\ n' เราจะสร้างแฟล็ก 1 และในขณะที่วนซ้ำ:
ในขณะที่ (1) { /* USER CODE END WHILE */ if(เสร็จสิ้น){ if(strcmp(data_full, cmp_) == 0){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); } memset(data_full, '\0', strlen(data_full)); เสร็จสิ้น = 0; }อื่น{ _NOP (); } /* รหัสผู้ใช้เริ่มต้น 3 */ }
หากค่าสถานะที่เสร็จสิ้นเป็น HIGH เราจะเปรียบเทียบเนื้อหาของข้อมูลที่ได้รับเต็มรูปแบบและข้อมูลที่เราต้องการ และหากเท่ากันเราจะสลับเป็น LED หลังจากนั้นเราล้างการตั้งค่าสถานะเสร็จแล้วและรอข้อมูลใหม่และล้าง data_full array เพื่อไม่ให้เขียนทับไปยังอาร์เรย์
ขั้นตอนที่ 4: การพัฒนาซอฟต์แวร์ Python
ดังนั้น เราต้องการส่งหมายเลขของเราด้วย '/ n' ต่อท้าย เนื่องจากซอฟต์แวร์ Keil จะต้องเห็นหมายเลขจึงจะทราบจุดสิ้นสุด
นำเข้าซีเรียล
ser = serial. Serial('COM17') #check ที่พอร์ตบนอุปกรณ์ของคุณจาก Device Manager
ser.write(b'24\n')
คุณจะเห็น LED สลับทุกครั้งที่คุณส่ง '24\n' หากคุณส่งอย่างอื่นก็ไม่ควรส่งผลกระทบต่อมัน
ขั้นตอนที่ 5: บทสรุป
เรามาถึงจุดสิ้นสุดของบทช่วยสอนแล้ว หากคุณมีปัญหาหรือคำถามใด ๆ โปรดอย่าลังเลที่จะถาม ฉันจะพยายามช่วยเท่าที่ฉันจะทำได้ ขอบคุณมาก:)
แนะนำ:
ติดตาม: ศูนย์สื่อขั้นสูงพร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): 3 ขั้นตอน
ติดตาม: Advanced Media Center พร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): บทความนี้เป็นบทความต่อจากบทความก่อนหน้าของฉันที่ประสบความสำเร็จค่อนข้างมากเกี่ยวกับการสร้างศูนย์สื่ออเนกประสงค์ โดยอ้างอิงจาก Raspberry PI ที่ได้รับความนิยมมากในตอนแรก แต่ ในภายหลัง เนื่องจากไม่มีเอาต์พุตที่สอดคล้องกับ HEVC, H.265 และ HDMI 2.2 จึงมีสวิตช์
STM32L100 ไฟ LED กะพริบโดยใช้ Atollic TrueSTUDIO และ STM32CubeMX: 5 ขั้นตอน
STM32L100 ไฟ LED กะพริบโดยใช้ Atollic TrueSTUDIO และ STM32CubeMX: ในโครงการนี้ ฉันจะบอกคุณเกี่ยวกับวิธีการกะพริบ LED โดยใช้ 32L100discovery ดังนั้นฉันจะบอกคุณเกี่ยวกับหลักการทำงานสำหรับบทช่วยสอนแบบใช้ไฟกระพริบนี้ รวมถึงซอฟต์แวร์และฮาร์ดแวร์ประเภทใดที่คุณต้องการ
Arduino และ Python Serial Communication - จอแสดงผลปุ่มกด: 4 ขั้นตอน
Arduino และ Python Serial Communication - การแสดงปุ่มกด: โครงการนี้สร้างขึ้นสำหรับผู้ใช้ Mac แต่สามารถใช้งานได้กับ Linux และ Windows ขั้นตอนเดียวที่ควรแตกต่างคือการติดตั้ง
Servodriver-Board พร้อม Python-GUI และ Arduino: 5 ขั้นตอน
Servodriver-Board ด้วย Python-GUI และ Arduino: เมื่อทำการสร้างต้นแบบหรือสร้างเครื่องบินจำลอง คุณมักจะพบปัญหาที่คุณต้องตรวจสอบการเดินทางของเซอร์โวหรือตั้งค่าเซอร์โวไว้ที่ตำแหน่งตรงกลาง ในกรณีที่คุณไม่ได้สร้างขึ้นมา ระบบ RC ทั้งหมดของคุณหรือทดสอบว่าคุณสามารถผลักดัน
DIY ECG โดยใช้ Analog Discovery 2 และ LabVIEW: 8 ขั้นตอน
DIY ECG โดยใช้ Analog Discovery 2 และ LabVIEW: ในคำแนะนำนี้ ฉันจะแสดงวิธีทำคลื่นไฟฟ้าหัวใจแบบโฮมเมด (ECG) เป้าหมายของเครื่องนี้คือการขยาย วัด และบันทึกศักย์ไฟฟ้าตามธรรมชาติที่สร้างขึ้นโดยหัวใจ ECG สามารถเปิดเผยข้อมูลมากมายเกี่ยวกับ