Forum: Mikrocontroller und Digitale Elektronik STM32G474RE UART


von Marcel Vogel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo alle miteinander,

ich versuche de UART eines STN32G474RE zum laufen zu bekommen. Da bei 
meiner Anwendung die Receive-Size im Allgemeinen nicht bekannt ist 
wollte ich von der HAL_RECEIVE Funktion weg kommen und versuche darum, 
das UART komplett ohne HAL zu implementieren. Leider funktioniert dies 
nicht. Mit HAL habe ich die Hardware bereits getestet. Senden und 
empfangen ist ohne Probleme möglich.
Die UART Konfiguration habe ich mir aus der Anleitung im Reference 
Manual und den Registereinträgen der MX_UART4_Init Funktion 
zusammengesucht.
Ich weiß, ich übersehe etwas. Allerdings weiß ich nicht was.
Könnt Ihr mir da helfen? Source Code und Reference Manual findet Ihr im 
Anhang. Ich verwende ein NUCLEOG474RE.

Vielen Dank.

Grüße
Marcel

von Harry L. (mysth)


Lesenswert?

Marcel Vogel schrieb:
> Da bei
> meiner Anwendung die Receive-Size im Allgemeinen nicht bekannt ist
> wollte ich von der HAL_RECEIVE Funktion weg kommen

Das ist unnötig, wenn du HAL_UART_Receive so aufrufst, daß immer nur ein 
einzelnes Zeichen empfangen wird.
Darauf kann mann dann geeignet reagieren.

von ... (Gast)


Lesenswert?

Brilliante Idee das Referenzmanual anzuhaengen.
Bei Problemen mit Windows 10 wird der naechste bestimmt
die Windows 10-ISO anhaengen.

Probleme mit den asynchronen Schnittstellen der STM32
hatte ich bisher nur im IRDA-Modus. Da hatte ich die
Registerbeschreibung aber eben nicht bis zum Ende gelesen.

von Jim M. (turboj)


Lesenswert?

In der Sendeschleife ist keine Verzögerung drin.
So sendet er IIRC überhaupt nix.

Auch bei dem DMA Krempel müsste man vorher wissen wieviele Bytes 
empfangen werden sollen. Bei einzelnen Bytes nimmt man den UART 
Interrupt, das ist einfacher.

von Stefan (Gast)


Lesenswert?

Kurz:

DMA im CIRCULAR Modus betreiben und den Speicherblock als Ringpuffer 
betrachten. DMA schreibt am Ende und eine Lesefunktion nimmt Daten von 
vorne ab. Dank des IDLE Interrupts bekommt man das Ende einer Nachricht 
mit.

Ausführlich:

https://stm32f4-discovery.net/2017/07/stm32-tutorial-efficiently-receive-uart-data-using-dma/

https://community.st.com/s/feed/0D50X00009XkW2nSAF (Link zu .html Datei 
ganz oben).

von Marcel Vogel (Gast)


Lesenswert?

Cool,
vielen Dank für die Antworten! Hat wirklich geholfen! Und sorry wegen 
dem Reference Manual...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.