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

OP #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:
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.