สารบัญ:

STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): 5 ขั้นตอน
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): 5 ขั้นตอน

วีดีโอ: STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): 5 ขั้นตอน

วีดีโอ: STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): 5 ขั้นตอน
วีดีโอ: STM32F4 Discovery board - Keil 5 IDE with CubeMX: Tutorial 8 UART - Updated Dec 2017 2024, กรกฎาคม
Anonim
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx)

สวัสดี! ในบทช่วยสอนนี้ เราจะพยายามสร้างการสื่อสาร 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: บทสรุป

เรามาถึงจุดสิ้นสุดของบทช่วยสอนแล้ว หากคุณมีปัญหาหรือคำถามใด ๆ โปรดอย่าลังเลที่จะถาม ฉันจะพยายามช่วยเท่าที่ฉันจะทำได้ ขอบคุณมาก:)

แนะนำ: