Mundarija:

STM32F4 Discovery Board va Python USART Communication (STM32CubeMx): 5 qadam
STM32F4 Discovery Board va Python USART Communication (STM32CubeMx): 5 qadam

Video: STM32F4 Discovery Board va Python USART Communication (STM32CubeMx): 5 qadam

Video: STM32F4 Discovery Board va Python USART Communication (STM32CubeMx): 5 qadam
Video: STM32F4 Discovery board - Keil 5 IDE with CubeMX: Tutorial 8 UART - Updated Dec 2017 2024, Iyul
Anonim
STM32F4 Discovery Board va Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board va Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board va Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board va Python USART Communication (STM32CubeMx)

Salom! Ushbu qo'llanmada biz STM32F4 ARM MCU va Python o'rtasida USART aloqasini o'rnatishga harakat qilamiz (uni boshqa til bilan almashtirish mumkin). Shunday qilib, boshlaylik:)

1 -qadam: Dasturiy ta'minot va apparat talablari

Uskuna jihatidan sizga kerak:

  • STM32F4 kashfiyot kartasi (yoki boshqa STM32 platasi)
  • USB - TTL konvertori

Dasturiy ta'minot nuqtai nazaridan:

  • STM32CubeMX
  • Keil uVision 5
  • Python, ketma -ket kutubxona o'rnatilgan

2 -qadam: STM32CubeMX konfiguratsiyasi

Avval nima qilmoqchi ekanligimizni tushunib olaylik. Biz USART orqali Python -dan ma'lumotlarni taxtaga o'tkazmoqchimiz va bizda to'g'ri ma'lumot bor -yo'qligini tekshirmoqchimiz. Shunday qilib, bizga USART va Led -ni yoqish kerak.

  • USART2 -ni ulanish yorlig'idan yoqing.

    • Rejimni asinxron holatga o'tkazing
    • Baud tezligi 9600 bit/s gacha
    • Paritasiz 8 bitli so'z uzunligi
    • Parite yo'q
    • DMA sozlamalarida USART2_RX ni kikulyar rejimga qo'shing
    • NVIC sozlamalarida USART2 global uzilishini yoqing
  • PD12 tugmachasini bosib LEDni yoqing

Keyin kod yarating:)

3 -qadam: Keil dasturiy ta'minotini ishlab chiqish

#qo'shing

#qo'shing

Bu kutubxonalar satr operatsiyalarida va boolean o'zgaruvchini aniqlashda kerak bo'ladi.

/ *USER CODE BEGIN 2 */ HAL_UART_Receive_DMA (& huart2, (uint8_t *) data_buffer, 1); / * FOYDALANISH KODI 2 *

Bu erda UMA DMA bilan qabul qilishni boshladi.

/ *USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback (UART_HandleTypeDef *huart) {/ *Ishlatilmagan argument (lar) ni kompilyatsiya qilish haqida ogohlantirishni oldini olish */QO'LSIZ (huart); / * ESLATMA: Bu funksiya o'zgartirilmasligi kerak, qayta qo'ng'iroq qilish zarur bo'lganda, HAL_UART_RxCpltCallback */ if (data_buffer [0]! = '\ N') {data_full [index_] = data_buffer [0] foydalanuvchi faylida qo'llanilishi mumkin.]; indeks _ ++; } boshqa {index_ = 0; tugagan = 1; } // HAL_UART_Transmit (& huart2, data_buffer, 1, 10); } / * FOYDALANISH KODI 4 -DAVR tugaydi * /

Bu bir bayt belgini olganimizda faollashtirilgan ISR. Shunday qilib biz bu baytni olamiz va "\ n" ni olmagunimizcha uni to'liq olingan ma'lumotlarni o'z ichiga olgan data_full ga yozamiz. Biz "\ n" ni olganimizda, tugallangan bayroqni 1 va while loopida qilamiz:

while (1) { / * USER CODE END WHILE * / if (tugagan) {if (strcmp (data_full, cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } xotira to'plami (data_full, '\ 0', strlen (data_full)); tugadi = 0; } boshqa {_NOP (); } / * FOYDALANISH KODI 3 * /} BOSHLADI

Agar tugallangan bayroq YUQORI bo'lsa, biz qabul qilingan ma'lumotlar va biz xohlagan ma'lumotlarning tarkibini solishtiramiz va agar ular teng bo'lsa, biz rahbarlikni o'zgartiramiz. Shundan so'ng, biz tugallangan bayroqni tozalaymiz va yangi ma'lumotlarni kutamiz, shuningdek, qatorga yozib yubormaslik uchun data_full qatorini tozalaymiz.

4 -qadam: Python dasturiy ta'minotini ishlab chiqish

Shunday qilib, biz o'z raqamimizni oxirida '/n' bilan yubormoqchimiz, chunki Keil dasturini oxirini bilish uchun uni ko'rish kerak bo'ladi.

serialni import qilish

ser = serial. Serial ('COM17') #Qurilma menejeridan qurilmangizdagi ushbu portni tekshiring

ser.write (b'24 / n ')

Siz har safar '24 / n 'yuborganingizda LED yonib turishini ko'rishingiz kerak. Agar siz boshqa narsani yuborsangiz, bu unga ta'sir qilmasligi kerak.

5 -qadam: Xulosa

Biz dars oxirigacha etib keldik. agar sizda biron bir muammo yoki savol bo'lsa, ikkilanmasdan so'rang. Qo'ldan kelgancha yordam berishga harakat qilaman. Sizga katta rahmat:)

Tavsiya: