Gast
#6640968
Hallo zusammen! ich benutze einen STM32G484 und möchte einen SPI Slave ansteuern. Folgender Code soll n-Bytes vom Slave lesen, hierbei muss ich als erstes die Adresse senden und anschließend den RX Buffer auslesen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Das ganze funktioniert bis zu einer Datenmenge von 4 Bytes, sobald ich 5 oder mehr verwende, bleibt die Funktion hängen. Mit dem Logicanalyser und einigen Pin-Toggles hab ich nun rausgefunden, dass die Funktion beim befüllen des Sendebuffers hängt. Der STM32G4 hat eine TX-Fifo mit 32 Bit, TXE sollte gelöscht werden, wenn 2 Byte im Sendebuffer stehen. Ich prüfe also in Codezeile 10 ob TXE gesetzt, also der Buffer bereit ist, weiter Daten anzunehmen. Wenn ja, und ich noch nicht alle Daten in den Buffer geschrieben habe, schreibe ich das nächste Wort rein. Mein Problem ist jetzt, dass TXE nie 0 wurde, somit wurden alle Daten reingeschriebe, und auch gesendet und ich bekomme einen Overflow im RXFIFO. Sollte das TXE Flag nicht rückgesetzt werden, wenn die FIFO ein bestimmtes Level erreicht? Ich glaube die Initialisierung des SPI/RCC ansich sollte passen, da bei weniger Daten alles einwandfrei funktioniert (Weils in die FIFO passt natürlich). Ist der Schreibzugriff auf SPI->DR blocking? Vielen Dank für eure Hilfe!