İçindekiler:

STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx): 5 Adım
STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx): 5 Adım

Video: STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx): 5 Adım

Video: STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx): 5 Adım
Video: STM32 Programlama - Seri Haberleşme - 5 - UART Kesmeleri 2024, Kasım
Anonim
STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx)
STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx)
STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx)
STM32F4 Discovery Board ve Python USART İletişimi (STM32CubeMx)

Selam! Bu derste STM32F4 ARM MCU ve Python arasında USART iletişimi kurmaya çalışacağız (herhangi bir başka dil ile değiştirilebilir). O halde başlayalım:)

Adım 1: Yazılım ve Donanım Gereksinimleri

İhtiyacınız olan donanım açısından:

  • STM32F4 Keşif Kartı (veya başka bir STM32 kartı)
  • USB'den TTL'ye dönüştürücü

Yazılım açısından:

  • STM32CubeMX
  • Keil uVision5
  • Seri kitaplık yüklü Python

Adım 2: STM32CubeMX Yapılandırması

Önce ne yapmak istediğimizi anlayalım. USART üzerinden Python'dan board'a veri iletmek ve doğru veriye ve toggle led'e sahip olup olmadığımızı kontrol etmek istiyoruz. Bu yüzden USART ve Led'i etkinleştirmemiz gerekiyor.

  • USART2'yi Bağlantı sekmesinden etkinleştirin.

    • Modu Eşzamansız olarak değiştir
    • Baud hızı 9600 Bit/sn'ye
    • Parite olmadan 8 Bit'e kadar kelime uzunluğu
    • parite biti yok
    • DMA ayarlarından dairesel modda USART2_RX ekleyin
    • NVIC Ayarlarından USART2 global kesmesini etkinleştirin
  • PD12'ye tıklayarak LED'i etkinleştirin

Sonra kod oluşturun:)

Adım 3: Keil Yazılım Geliştirme

#Dahil etmek

#Dahil etmek

Bu kitaplıklara dize işlemlerinde ve boolean değişkeni tanımlamak için ihtiyaç duyulacaktır.

/* KULLANICI KODU BEGIN 2 */ HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1); /* KULLANICI KODU SON 2 */

Burada DMA ile UART alımı başladı.

/* KULLANICI KODU BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Kullanılmayan argüman(lar) derlemesini engelle uyarı */ UNUSED(huart); /* NOT: Bu fonksiyon değiştirilmemelidir, geri çağırma gerektiğinde, HAL_UART_RxCpltCallback kullanıcı dosyasında uygulanabilir */ if(data_buffer[0] != '\n'){ data_full[index_] = data_buffer[0]; dizin_++; }else{ index_ = 0; bitmiş = 1; } //HAL_UART_Transmit(&huart2, data_buffer, 1, 10); } /* KULLANICI KODU SON 4 */

Bu, bir bayt karakter aldığımızda etkinleştirilen ISR'dir. Yani. bu baytı alırız ve '\n' elde edene kadar alınan tüm verileri içeren data_full'a yazarız. '\n' aldığımızda, bitmiş bayrak 1'i ve while döngüsünde yaparız:

while (1) { /* KULLANICI KODU END WHILE */ if(finished){ if(strcmp(data_full, cmp_) == 0){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); } memset(veri_dolu, '\0', strlen(veri_dolu)); tamamlandı = 0; }else{ _NOP(); } /* KULLANICI KODU BAŞLANGIÇ 3 */ }

Bitmiş bayrak YÜKSEK ise, alınan tam veri ve istediğimiz verinin içeriğini karşılaştırır ve eşitlerse led'i değiştiririz. Bundan sonra bitmiş bayrağı temizliyoruz ve yeni verileri bekliyoruz ve ayrıca dizinin üzerine yazmamak için data_full dizisini temizliyoruz.

Adım 4: Python Yazılım Geliştirme

Bu yüzden burada numaramızı sonunda '/n' ile göndermek istiyoruz, çünkü Keil yazılımının sonunu bilmesi için onu görmesi gerekecek.

seriyi içe aktar

ser = serial. Serial('COM17') #Aygıt Yöneticisi'nden aygıtınızdaki o bağlantı noktasını kontrol edin

ser.write(b'24\n')

Her '24\n' gönderdiğinizde LED'in değiştiğini görmelisiniz. Başka bir şey gönderirseniz, onu etkilememelidir.

Adım 5: Sonuç

Eğitimin sonuna geldik. herhangi bir sorun veya sorunuz varsa lütfen sormaktan çekinmeyin. Elimden geldiğince yardımcı olmaya çalışacağım. Çok teşekkürler:)

Önerilen: