Inhaltsverzeichnis:

STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx) - Gunook
STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx) - Gunook

Video: STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx) - Gunook

Video: STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx) - Gunook
Video: How to program a HEX file to the STM32F4 Discovery Board 2024, November
Anonim
STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx)
STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx)
STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx)
STM32F4 Discovery Board und Python USART-Kommunikation (STM32CubeMx)

Hi! In diesem Tutorial werden wir versuchen, die USART-Kommunikation zwischen STM32F4 ARM MCU und Python herzustellen (sie kann durch jede andere Sprache ersetzt werden). Also lasst uns anfangen:)

Schritt 1: Software- und Hardwareanforderungen

In Bezug auf die Hardware benötigen Sie:

  • STM32F4 Discovery Board (oder jedes andere STM32 Board)
  • USB-zu-TTL-Konverter

Was die Software angeht:

  • STM32CubeMX
  • Keil uVision5
  • Python mit installierter serieller Bibliothek

Schritt 2: STM32CubeMX-Konfiguration

Lassen Sie uns zuerst verstehen, was wir tun wollen. Wir möchten Daten von Python über USART an das Board übertragen und prüfen, ob wir die richtigen Daten und Toggle-LEDs haben. Also müssen wir USART und Led aktivieren.

  • Aktivieren Sie USART2 auf der Registerkarte Konnektivität.

    • Ändern Sie den Modus zu Asynchron
    • Baudrate bis 9600 Bit/s
    • Wortlänge bis 8 Bit ohne Parität
    • Kein Paritätsbit
    • Fügen Sie in den DMA-Einstellungen USART2_RX im Cicular-Modus hinzu
    • Aktivieren Sie in den NVIC-Einstellungen den globalen USART2-Interrupt
  • Aktivieren Sie die LED durch Klicken auf PD12

Dann Code generieren:)

Schritt 3: Keil Softwareentwicklung

#enthalten

#enthalten

Diese Bibliotheken werden in String-Operationen und zum Definieren von booleschen Variablen benötigt.

/* BENUTZERCODE BEGIN 2 */ HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1); /* BENUTZERCODE ENDE 2 */

Hier wird der UART-Empfang mit gestartetem DMA ausgeführt.

/* BENUTZERCODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Kompilierungswarnung für nicht verwendete Argumente verhindern */ UNUSED(huart); /* HINWEIS: Diese Funktion sollte nicht geändert werden, wenn der Callback benötigt wird, könnte der HAL_UART_RxCpltCallback in der Benutzerdatei implementiert werden */ if(data_buffer[0] != '\n'){ data_full[index_] = data_buffer[0]; index_++; }sonst{ index_ = 0; fertig = 1; } //HAL_UART_Transmit(&huart2, data_buffer, 1, 10); } /* BENUTZERCODE ENDE 4 */

Dies ist ISR, das aktiviert wird, wenn wir ein Zeichenbyte erhalten. So. wir erhalten dieses Byte und schreiben es in data_full, das die vollständigen empfangenen Daten enthält, bis wir '\n' erhalten. Wenn wir '\n' erhalten, machen wir das fertige Flag 1 und in die while-Schleife:

while (1) { /* BENUTZERCODE END WHILE */ if (fertig) { if (strcmp (data_full, cmp_) == 0) { HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } memset(data_full, '\0', strlen(data_full)); fertig = 0; }sonst{ _NOP (); } /* BENUTZERCODE BEGIN 3 */ }

Wenn das Fertig-Flag HIGH ist, vergleichen wir den Inhalt der vollständigen empfangenen Daten und der Daten, die wir wünschen, und wenn sie gleich sind, schalten wir LED um. Danach löschen wir das Fertig-Flag und warten auf neue Daten und löschen auch das data_full-Array, um das Array nicht zu überschreiben.

Schritt 4: Python-Softwareentwicklung

Hier möchten wir also unsere Nummer mit '/n' am Ende senden, da die Keil-Software sie sehen muss, um das Ende zu kennen.

Seriennummer importieren

ser = serial. Serial('COM17') #überprüfe diesen Port auf deinem Gerät im Geräte-Manager

ser.write(b'24\n')

Sie sollten sehen, dass die LED jedes Mal umschaltet, wenn Sie '24\n' senden. Wenn Sie etwas anderes senden, sollte dies keinen Einfluss darauf haben.

Schritt 5: Fazit

Wir sind am Ende des Tutorials angelangt. Wenn Sie ein Problem oder eine Frage haben, zögern Sie bitte nicht zu fragen. Ich werde versuchen, so gut ich kann zu helfen. Vielen Dank:)

Empfohlen: