Hallo,
ich habe ein komisches Problem: Ich nutze einen STM32 um mittels SPI ein
Display anzusteuern. Das funktionierte soweit ohne Probleme. Als ich
aber an einem (ganz) anderen Codeteil arbeitete funktionierte das
Display plötzlich nicht mehr.
Ich konnte das Problem beheben, indem ich vier NOPs eingefügt habe. Füge
ich sie im Code an beliebiger Stelle (allerdings vor die "Grenzzeile")
funktioniert es. Füge ich sie im Code nach der Grenzzeile ein,
funktioniert es nicht.
Dabei ist die Stelle komplett beliebig wählbar, ich habe es anhand des
Listings ausprobiert.
1 | void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
|
2 | {
|
3 | /* Check the parameters */
|
4 | assert_param(IS_SPI_ALL_PERIPH(SPIx));
|
5 |
|
6 | /* Write in the DR register the data to be sent */
|
7 | SPIx->DR = Data; // <= Dies ist die magische Grenzzeile
|
8 | }
|
Jetzt nutze ich das SPI einfach direkt, ohne den Zwischenaufruf der
Funktion. Der Fehler verwundert mich aber dennoch und ich würde die
Ursache gerne kennen.
Viele Grüße
Lasse