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... :/