Hallo, ich sitze hier seit geraumer Zeit an einem Problem, bei dem ich
einfach nicht weiterkomme. Also, ich möchte über UART von einem STM32
mit einem anderen Modul kommunizieren. Dafür habe ich eine
Statemaschine, die die empfangenen Daten verarbeitet. Nach jedem Byte
wird dieses in einen Ringbuffer geschrieben:
1 | void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
2 | {
|
3 | if (huart == &uart3)
|
4 | {
|
5 | fFifoIn( &RX_BUFFER, RX_UART4_Buffer[0]);
|
6 | HAL_UART_Receive_IT( &huart4, RX_UART4_Buffer, RX_BUFFER_SIZE);
|
7 | }
|
8 | }
|
Damit der Interrupt dann wieder ausgelöst wird, aktiviere ich ihn
wieder, so wie hier beschrieben:
https://riptutorial.com/de/stm32/example/29940/echoanwendung---hal-bibliothek)
Das Senden geschieht über
.
Häufig funktioniert das auch, aber manchmal passiert augenscheinlich gar
nichts. Mit dem Debugger konnte ich feststellen, dass er in diesen
Fällen in der Funktion
1 | UART_WaitOnFlagUntilTimeout
|
für immer feststeckt. MIt dem Scope habe ich gesehen, dass der STM32
aber korrekt die Daten rausschickt, und das Modul auch korrekt
antwortet. Diese Antwort wird allerdings nichts verarbeitet. Hat da
jemand von Euch eine Idee?
Vielen Dank im Voraus,
Ozzy