Grüß euch
Ich bräuchte Hilfe mit dem SPI Modul des STM32L476. Ich vermute mal es
hat sich zu den F4-Controllern kaum etwas geändert, also eventuell kann
jemand trotz der kurzen Verfügbarkeit dieser Chips was dazu sagen...
Problem ist folgendes. Ich möchte mit sehr alter Hardware kommunizieren,
die ein SPI-ähnliches Protokoll nutzt. Die Peripherie meines Controllers
ist bereits erfolgreich als Slave initialisiert und ich bekomme auch
sinnvolle Daten am Eingang...
Und zwar genauso lang, wie sich der Master dazu entscheidet die 8-bit
Breite beizubehalten. Dummerweise kommen aber ab und zu auch mal
zusätzliche Bits an, die ich aber schlichtweg nicht benötige. Leider
werden diese Bits aber ohne mein zutun trotzdem ins Shift Register des
SPI Moduls geschrieben, solang ich die Schnittstelle nicht abdreh.
Das wär nicht weiter problematisch, könnt ich das Shift Register
irgendwie flushn. Leider hab ich bis jetzt keine Möglichkeit gefunden
das zu tun und auch das Datenblatt ist da nicht besonders hilfreich.
Dieses schlägt folgendes Prozedere (S.1285) vor um die SPI im "Receive
Only" Modus abzudrehn:
1 | /* Reset SPI */
|
2 | SPI2->CR1 &= ~SPI_CR1_SPE;
|
3 |
|
4 | while((SPI2->SR & SPI_SR_BSY))
|
5 | while((SPI2->SR & SPI_SR_FRLVL))
|
6 | dummy = *(__IO uint8_t *)&SPI2->DR;
|
7 | SPI2->CR1 |= SPI_CR1_SPE;
|
Und das bringt 0. Sobald neue Bits vom Master daherkommen werden sie von
den bereits unnötig empfangenen verschoben...
Irgendwer eine Idee?
Achja, als Slave senden funktioniert natürlich auch nicht, weil ja der
Master den Clock vorgibt und selbst wenn ich was ins Datenregister
schreib, dieses nicht rausgeshiftet wird... :/