Ich versuche, mit der UART-Peripherie per DMA sowohl für RX als auch für TX zu kommunizieren. Ich verwende die HAL-Bibliothek, die von ST (generiert mit STCubeMX) geliefert wird.STM32F4 Behandlung von Peripheriefehler während der DMA-Übertragung (RX)
Ich handle mit einem UART-Kanal mit 1,5MBaud - um also keine Daten zu verlieren, habe ich den DMA im direkten Modus mit Ringpuffer konfiguriert und die Halbtransfers Interrupts behandelt, um die Daten zu kümmern und halten Sie den DMA online, um weitere Daten zu erhalten.
Das Problem ist, dass ich manchmal im Status-Register des UART sehen kann, dass das Frame-Fehler-Bit eingeschaltet ist, und manchmal das Überlauffehler-Flag auch eingeschaltet ist.
Ich kann mit verlorenen Bytes umgehen (mit Crc auf den strukturierten Paketen), aber das Problem ist, dass das Peripheriegerät keine Daten mehr empfängt - aber der DMA löst keinen Fehler aus oder stoppt die Übertragung.
Also wenn ich versuche, Daten zu empfangen, und die Flagge ist auf dem System hängt.
Ich sah, dass die HAL bietet eine __weak-Funktion, die UART_Error behandeln sollte, aber es wird nie aufgerufen - und der Status in der HAL-Handle bleibt normal. nur ein Blick auf das Register kann sagen, dass ein Problem vorliegt.
Wie soll ich diese Art von Fehlern erkennen/behandeln?
Dank