Mục lục:

Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx): 5 bước
Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx): 5 bước

Video: Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx): 5 bước

Video: Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx): 5 bước
Video: STM32F4 Programming in C 5- Accelerometer coding in Keil using STM32CubeMx 2024, Tháng mười một
Anonim
Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx)
Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx)
Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx)
Bảng khám phá STM32F4 và Giao tiếp USART Python (STM32CubeMx)

Chào! Trong hướng dẫn này, chúng tôi sẽ cố gắng thiết lập giao tiếp USART giữa STM32F4 ARM MCU và Python (nó có thể được thay thế bằng bất kỳ ngôn ngữ nào khác). Vậy hãy bắt đầu:)

Bước 1: Yêu cầu phần mềm và phần cứng

Về phần cứng bạn cần:

  • Bảng khám phá STM32F4 (hoặc bất kỳ bảng STM32 nào khác)
  • Bộ chuyển đổi USB sang TTL

Về phần mềm:

  • STM32CubeMX
  • Keil uVision5
  • Python với thư viện nối tiếp được cài đặt

Bước 2: Cấu hình STM32CubeMX

Trước tiên, hãy hiểu những gì chúng ta muốn làm. Chúng tôi muốn truyền dữ liệu tới bảng từ Python qua USART và kiểm tra xem chúng tôi có dữ liệu chính xác hay không và chuyển đổi đèn led. Vì vậy, chúng ta cần bật USART và Led.

  • Bật USART2 từ tab Kết nối.

    • Thay đổi chế độ thành Không đồng bộ
    • Tốc độ truyền tới 9600 Bits / s
    • Độ dài từ đến 8 bit không tính chẵn lẻ
    • Không có bit chẵn lẻ
    • Từ cài đặt DMA, thêm USART2_RX ở chế độ thấu kính
    • Từ Cài đặt NVIC cho phép ngắt toàn cầu USART2
  • Bật đèn LED bằng cách nhấp vào PD12

Sau đó tạo mã:)

Bước 3: Phát triển phần mềm Keil

#bao gồm

#bao gồm

Các thư viện này sẽ cần thiết trong các hoạt động chuỗi và để xác định biến boolean.

/ * MÃ NGƯỜI DÙNG BEGIN 2 * / HAL_UART_Receive_DMA (& huart2, (uint8_t *) data_buffer, 1); / * MÃ NGƯỜI DÙNG KẾT THÚC 2 * /

Tại đây, quá trình nhận UART với DMA đã bắt đầu.

/ * MÃ NGƯỜI DÙNG BẮT ĐẦU 4 * / void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart) {/ * Ngăn cảnh báo biên dịch (các) đối số không sử dụng * / UNUSED (huart); / * LƯU Ý: Không nên sửa đổi chức năng này, khi cần gọi lại, HAL_UART_RxCpltCallback có thể được triển khai trong tệp người dùng * / if (data_buffer [0]! = '\ N') {data_full [index_] = data_buffer [0]; chỉ số _ ++; } else {index_ = 0; xong = 1; } // HAL_UART_Transmit (& huart2, data_buffer, 1, 10); } / * MÃ NGƯỜI DÙNG KẾT THÚC 4 * /

Đây là ISR được kích hoạt khi chúng ta nhận được một byte ký tự. Vì thế. chúng tôi lấy byte đó và ghi nó vào data_full chứa toàn bộ dữ liệu đã nhận cho đến khi chúng tôi nhận được '\ n'. Khi chúng ta nhận được '\ n', chúng ta tạo cờ 1 và trong vòng lặp while:

while (1) {/ * USER CODE END WHILE * / if (finish) {if (strcmp (data_full, cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } memset (data_full, '\ 0', strlen (data_full)); xong = 0; } else {_NOP (); } / * MÃ NGƯỜI DÙNG BẮT ĐẦU 3 * /}

Nếu cờ hoàn thành là CAO, chúng tôi so sánh nội dung của dữ liệu đã nhận đầy đủ và dữ liệu mà chúng tôi mong muốn và nếu chúng bằng nhau, chúng tôi sẽ chuyển sang dẫn. Sau đó, chúng ta xóa cờ đã hoàn thành và đợi dữ liệu mới và cũng xóa mảng data_full để không ghi đè lên mảng.

Bước 4: Phát triển phần mềm Python

Vì vậy, ở đây chúng tôi muốn gửi số của chúng tôi với '/ n' ở cuối, vì phần mềm Keil sẽ cần phải xem nó để biết kết thúc.

nhập nối tiếp

ser = serial. Serial ('COM17') # kiểm tra cổng đó trên thiết bị của bạn từ Trình quản lý thiết bị

ser.write (b'24 / n ')

Bạn sẽ thấy đèn LED đó bật tắt mỗi khi bạn gửi '24 / n '. Nếu bạn gửi bất cứ thứ gì khác, nó sẽ không ảnh hưởng đến nó.

Bước 5: Kết luận

Chúng tôi đã đến phần cuối của hướng dẫn. nếu bạn có bất kỳ vấn đề hoặc câu hỏi xin vui lòng hỏi. Tôi sẽ cố gắng giúp đỡ nhiều nhất có thể. Cám ơn rất nhiều:)

Đề xuất: