SMT32 - Uart Receive will nicht

Gast #5559337
Lesenswert?

Hallo,

ich habe ein kleines Problem mit dem Empfang von Daten auf der UART 
zwischen einem STM32F4 Controller und einem Sensor-Modul.

Das Modul sendet ohne Hardware-Flow-Control.

Mit dem STM32F4 kann ich nach Initialisierung mittels HAL-Routinen nur 
senden, aber auf der RX-Leitung kann ich keinerlei Daten entgegen 
nehmen.

Die Initialisierung ist mittels Cube-MX durchgeführt. Keien einzige von 
den verschiedenen UART-Receive-Funktionen scheint zu funktionieren...
Senden kann ich Mittels Uart_Transmit_IT, aber im Empfang bleibt einfach 
alles tot...

Hat jemand damit Erfahrungen?
#5559465
Lesenswert?

STM schrieb:
> Mit dem STM32F4 kann ich nach Initialisierung mittels HAL-Routinen nur
> senden, aber auf der RX-Leitung kann ich keinerlei Daten entgegen
> nehmen.

Gibt es dazu auch Code?

STM schrieb:
> Die Initialisierung ist mittels Cube-MX durchgeführt. Keien einzige von
> den verschiedenen UART-Receive-Funktionen scheint zu funktionieren...
> Senden kann ich Mittels Uart_Transmit_IT, aber im Empfang bleibt einfach
> alles tot...

Meine Glaskugel sagt mir, dass du die Interrupt-API benutzt und sofort 
nach der Funktion HAL_UART_Transmit_IT den Receive-Buffer ausliest. Das 
funktioniert so nicht, weil Interrupt- und DMA-API asynchron arbeiten. 
Außerdem sagt mir meine Glaskugel, dass du das HAL-User-Manual für 
deinen Controller nicht gelesen hast.

Als Lösungsvorschlag empfehle ich UM1725, insbesondere 67.2.1 "UART 
Firmware driver API description - How to use this driver"
Gast #5559734
Lesenswert?

Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man 
asynchron Senden und Empfangen will, oder muss man so etwas zwingend 
über DMA angehen?

Ich frage das, weil das USART_DR Register ja anscheinend sowohl für 
Senden und Empfangen genutzt wird.
Gast #5559772
Lesenswert?

STM schrieb:
> Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man
> asynchron Senden und Empfangen will, oder muss man so etwas zwingend
> über DMA angehen?
>
> Ich frage das, weil das USART_DR Register ja anscheinend sowohl für
> Senden und Empfangen genutzt wird.

Vielleicht werden beim Lesen und Schreiben des Registers 
unterschiedliche Adressen angesprochen?
Read the manual!
#5559785
Lesenswert?

STM schrieb:
> Ist es denn überhaupt möglich, den IT-Betrieb zu nutzen, wenn man
> asynchron Senden und Empfangen will

Natürlich ist es das und es ist auch nur asynchron möglich bzw. so 
gedacht. Sonst kann man auch gleich die blocking-API nehmen.

STM schrieb:
> Ich frage das, weil das USART_DR Register ja anscheinend sowohl für
> Senden und Empfangen genutzt wird.

So wie du diese Frage stellst, scheinst du dich noch nie mit der 
Hardware von irgendeinem uC auf Registerebene auseinandergesetzt zu 
haben. Das würde ich unbedingt mal empfehlen bevor du dir mit CubeMX 
irgendwas zusammenklickst. Wenn dir das zu kompliziert ist, nimm lieber 
Arduino oder mbed.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren