Hallo zusammen,
ich möchte eine SPI Verbindung (Vollduplex) zwischen zwei STM32F0
aufbauen. Der Slave soll standardmäßig empfangen und nur, wenn er auf
einen Befehl antworten muss, senden.
Der Slave erkennt anhand der Tx-Callback Routine (ich verwende HAL),
dass er mit seinem Senden fertig ist und schaltet dann um:
1 | void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
|
2 | {
|
3 | HAL_SPI_Receive_IT(&hspi1, pRecBuf_Dat, RecBuf_Len);
|
4 | return;
|
5 | }
|
Das Problem: sobald der obige Callback beendet wurde, erkennt er, dass
vermeintlich Rx Daten vorliegen. Er springt dann sofort in die
Empfangs-ISR. Tatsächlich hat der Master aber nie Daten gesendet!
Wenn ich mir das Ganze im Debugger anschaue, sehe ich, dass das "RXNE"
Flag gesetzt ist. Steppe ich dann im Einzelschritt weiter, verschwindet
es auf (für mich) magische Weise von selbst, noch bevor die Empfangs-ISR
erreicht wird.
Kann jemand mit diesem Phänomen etwas anfangen? Warum wird das "RXNE"
Flag gesetzt, obwohl der Master nichts gesendet hat? Und warum
verschwindet es im Debugger, nicht jedoch beim Release Build? Hat jemand
eine Idee?
Grüße
Steffen?