Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:03
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:
Komunikacja bezprzewodowa LoRa 3Km do 8Km z tanim urządzeniem E32 (sx1278/sx1276) dla Arduino, Esp8266 lub Esp32: 15 kroków
LoRa 3Km do 8Km Bezprzewodowa komunikacja z niskokosztowym urządzeniem E32 (sx1278/sx1276) dla Arduino, Esp8266 lub Esp32: Tworzę bibliotekę do zarządzania EBYTE E32 opartą na urządzeniu LoRa serii Semtech, bardzo wydajne, proste i tanie urządzenie. Wersja 3Km tutaj, wersja 8Km tutaj Mogą pracować na dystansie od 3000m do 8000m i mają wiele funkcji i
Żyroskop MPU 6050, komunikacja z akcelerometrem z Arduino (Atmega328p): 5 kroków
MPU 6050 Żyroskop, komunikacja z akcelerometrem z Arduino (Atmega328p): IMU MPU6050 posiada zarówno 3-osiowy akcelerometr, jak i 3-osiowy żyroskop zintegrowane w jednym układzie. Oś X, Y i Z. Wyjścia żyroskopu ar
Komunikacja szeregowa PIC MCU i Python: 5 kroków
Komunikacja szeregowa PIC MCU i Python: Witam, chłopaki! W tym projekcie postaram się wyjaśnić moje eksperymenty dotyczące komunikacji szeregowej PIC MCU i Pythona. W Internecie dostępnych jest wiele samouczków i filmów wideo na temat komunikacji z PIC MCU przez wirtualny terminal, co jest bardzo przydatne. Jednak
Komunikacja szeregowa Arduino i Python - wyświetlanie klawiatury: 4 kroki
Komunikacja szeregowa Arduino i Python - wyświetlacz klawiatury: ten projekt jest przeznaczony dla użytkowników komputerów Mac, ale można go również zaimplementować w systemach Linux i Windows, jedynym krokiem, który powinien być inny, jest instalacja
Komunikacja ESP8266 i Python dla Noobs: 6 kroków
ESP8266 i komunikacja Python dla Noobs: Ten przewodnik pozwala uzyskać dowolne dane z ESP8266 i kontrolować je przez Pythona bez poleceń AT.Dla początkujących większość przewodników na temat korzystania z ESP8266 jest trudna, ponieważ chcą, abyś flashował „POLECENIA AT” na chip, czyli: Niepotrzebne marnotrawstwo