STM32 UART DMA - RX Error führt zu unendlich, sehr schnellen Interrupts

#7099253
Lesenswert?

Hi,

Ich kommuniziere über UART zwischen einem STM32 und einem ESP32 uC, 
wobei der STM32 den DMA sowie den End of Line Interrupt verwendet. Wenn 
nun beim Starten ein Fehlerframe kommt (TX des ESP32 geht von Low auf 
High), dann wird mir die HAL_UART_ErrorCallback(); getriggert und von da 
an wird nur noch die UART Interrupt Routine aufgerufen.

Das ganze kann ich unterbinden, wenn ich wie im Anhang den "DMA on RX 
Error" deaktiviere. Nun möchte ich aber den Fehler catchen und den 
Fehler zurücksetzen, jedoch weiss ich nicht wie. Was für ein Flag muss 
ich dafür zurücksetzen?
Angehängte Dateien:
#7099389
Lesenswert?

Ok, ich glaube ich konnte es fixen. Im Endeffekt kam es zu einer 
Situation, wo das __HAL_UART_CLEAR_IDLEFLAG zu früh zurückgesetzt wurde.

Nun was mich aber interessiert ist, warum ich überhaupt Framing Fehler 
bekomme bzw. wie ich diese beim Start vermeiden kann. Ist es zu 
empfehlen, RX und TX des UARTs mit einem Pull-Up hochzuziehen? Wenn ich 
nämlich mit dem Computer kommuniziere, bekomme ich nie einen Framing 
Error, mit dem ESP32 beim Flashen immer.
Gast #7099523
Lesenswert?

Bert S. schrieb:
> Ist es zu
> empfehlen, RX und TX des UARTs mit einem Pull-Up hochzuziehen?

Irgendwann hatte ich mal wo gelesen, man würde bei "UART"-Schittstellen 
von MARK und SPACE reden.

So ist Z.B. der "idle"-Zustand einer RS232-Schnittstelle gekennzeichnet 
durch eine "größere Anzahl" von MARKs. Das folgende SPACE kennzeichnet 
dann die 'start'-Condition.

Spannend wird es, wenn man mit BREAKs arbeitet, z.B. um den Beginn eines 
Datenblocks anzuzeigen. Ein BREAK wird signalisiert, wenn die 
Datenleitung für "längere Zeit" auf SPACE hängt. Das folgende MARK 
kennzeichnet dann den Start eines Packets (MAB = "Mark After Break").

Also, RX und TX eines UARTs  (UART - Universal Asynchronous Receiver 
Transmitter) unreflektiert "irgendwo hinzuziehen" ist vielleicht nicht 
so prickelnd...

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