Spisu treści:

STM32F4 Discovery Board i komunikacja Python USART (STM32CubeMx): 5 kroków
STM32F4 Discovery Board i komunikacja Python USART (STM32CubeMx): 5 kroków

Wideo: STM32F4 Discovery Board i komunikacja Python USART (STM32CubeMx): 5 kroków

Wideo: STM32F4 Discovery Board i komunikacja Python USART (STM32CubeMx): 5 kroków
Wideo: Kurs STM32 #16 Wyświetlacz LCD 2024, Lipiec
Anonim
Płytka wykrywania STM32F4 i komunikacja Python USART (STM32CubeMx)
Płytka wykrywania STM32F4 i komunikacja Python USART (STM32CubeMx)
Płytka wykrywania STM32F4 i komunikacja Python USART (STM32CubeMx)
Płytka wykrywania STM32F4 i komunikacja Python USART (STM32CubeMx)

Cześć! W tym samouczku postaramy się nawiązać komunikację USART między MCU STM32F4 ARM a Pythonem (można go zastąpić dowolnym innym językiem). Więc zacznijmy:)

Krok 1: Wymagania dotyczące oprogramowania i sprzętu

Jeśli chodzi o sprzęt, potrzebujesz:

  • Płyta Discovery STM32F4 (lub dowolna inna płyta STM32)
  • Konwerter USB na TTL

W zakresie oprogramowania:

  • STM32CubeMX
  • Keil uVision5
  • Python z zainstalowaną biblioteką szeregową

Krok 2: Konfiguracja STM32CubeMX

Najpierw zrozummy, co chcemy zrobić. Chcemy przesłać dane na płytkę z Pythona przez USART i sprawdzić, czy mamy poprawne dane i włączyć diodę LED. Potrzebujemy więc włączyć USART i Led.

  • Włącz USART2 z zakładki Łączność.

    • Zmień tryb na asynchroniczny
    • Szybkość transmisji do 9600 bitów/s
    • Długość słowa do 8 bitów bez parzystości
    • Brak bitu parzystości
    • Z ustawień DMA dodaj USART2_RX w trybie cyklicznym
    • W ustawieniach NVIC włącz globalne przerwanie USART2
  • Włącz diodę LED, klikając PD12

Następnie wygeneruj kod:)

Krok 3: Rozwój oprogramowania Keil

#włączać

#włączać

Biblioteki te będą potrzebne w operacjach na ciągach znaków oraz do definiowania zmiennych binarnych.

/* KOD UŻYTKOWNIKA POCZĄTEK 2 */ HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1); /* KOD UŻYTKOWNIKA KONIEC 2 */

Tutaj rozpoczął się odbiór UART z DMA.

/* KOD UŻYTKOWNIKA POCZĄTEK 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Zapobiegaj ostrzeżeniu o kompilacji nieużywanych argumentów */ UNUSED(huart); /* UWAGA: Ta funkcja nie powinna być modyfikowana, gdy potrzebne jest wywołanie zwrotne, HAL_UART_RxCpltCallback można zaimplementować w pliku użytkownika */ if(data_buffer[0] != '\n'){ data_full[index_] = data_buffer[0]; indeks_++; }inny{ indeks_ = 0; ukończone = 1; } //HAL_UART_Transmit(&huart2, data_buffer, 1, 10); } /* KOD UŻYTKOWNIKA KONIEC 4 */

Jest to ISR, który aktywuje się, gdy otrzymamy jeden bajt znaku. Więc. otrzymujemy ten bajt i zapisujemy go w data_full, które zawiera pełne odebrane dane, aż otrzymamy '\n'. Gdy otrzymamy '\n' tworzymy gotową flagę 1 i pętlę while:

while (1) { /* KOD UŻYTKOWNIKA KONIEC PODCZAS */ if(finished){ if(strcmp(data_full, cmp_) == 0){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); } memset(data_full, '\0', strlen(data_full)); ukończone = 0; }inny{ _NOP (); } /* KOD UŻYTKOWNIKA POCZĄTEK 3 */ }

Jeżeli flaga zakończenia jest WYSOKA, porównujemy zawartość pełnych odebranych danych z danymi, których potrzebujemy i jeśli są równe przełączamy diodę LED. Następnie czyścimy flagę finish i czekamy na nowe dane, a także czyścimy tablicę data_full, aby nie nadpisywać do tablicy.

Krok 4: Rozwój oprogramowania w Pythonie

Więc tutaj chcemy wysłać nasz numer z '/n' na końcu, ponieważ oprogramowanie Keil będzie musiało go zobaczyć, aby poznać koniec.

importuj serial

ser = serial. Serial('COM17') #sprawdź ten port na swoim urządzeniu w Menedżerze urządzeń

ser.write(b'24\n')

Powinieneś zobaczyć, że dioda LED przełącza się za każdym razem, gdy wysyłasz „24\n”. Jeśli wyślesz coś innego, nie powinno to mieć na to wpływu.

Krok 5: Wniosek

Dotarliśmy do końca samouczka. jeśli masz jakiś problem lub pytanie, nie wahaj się zapytać. Postaram się pomóc, jak tylko będę mógł. Dziękuję Ci bardzo:)

Zalecana: