Forum: Mikrocontroller und Digitale Elektronik STM32F4XX SPI Slave


von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich versuche gerade, an einem STM32F446 einen SPI-Slave ans Laufen zu 
bekommen. Am Pin PB13 liegt ein Rechtecksignal an, aber die ISR wird nie 
gestartet.

Im Anhang befindet sich der derzeitige Stand meiner Bemühungen. Was mir 
auffällt, dass ich die Definition von SPI_Direction_1Line_Rx (in 
stm32f4xx_spi.h in Zeile 141 definiert) nicht mit dem Angaben im 
Reference Manual RM0390 (S.850f.) in Einklang bringen kann, wonach nach 
meinem Verständnis SPIx->CR1.RXonly = 1 gesetzt werden müßte. 
Stattdessen wird BIDIMODE gesetzt, was nach meinem Verständnis 
irrelevant sein dürfte.

Setze ich     SPI_InitStructure.SPI_Direction = 0x0400;, wird die ISR 
auch nicht aufgerufen, sprich: Das allein kann es auch nicht sein.

Sprich: Ich bin gerade verwirrt. Wer kann mir auf die Sprünge helfen?

von Walter T. (nicolas)


Lesenswert?

Was ich gefunden habe: Solange ein Takt an SPI2 anliegt, wird ständig 
das "Overrun"-Flag gesetzt. Der SPI reagiert also schon einmal auf Takte 
von außen.

Allerdings scheint er lieber überzulaufen, als die ISR aufzurufen, in 
der DR ausgelesen wird.

von Walter T. (nicolas)


Lesenswert?

Nachtrag: Der IRQ-Handler heißt SPI2_IRQHandler(), nicht 
SPIx_IRQHANDLER(). Jetzt geht es.

von Rath Loser (Gast)


Lesenswert?

Walter T. schrieb:
> Nachtrag: Der IRQ-Handler heißt void SPI2_IRQHandler(), nicht
> SPIx_IRQHANDLER()

Demnach hättest du ja mit dem fehlerhaften Code in einen
Error Handler wegen Nichtüberschreibens des erforderlichen
richtigen Handlers laufen müssen.

Davon hast du aber nicht berichtet.

von Walter T. (nicolas)


Lesenswert?

In der startup_stm32F4xx_md.S eine längliche Konstruktion, die 
Default-Handler bereitstellt:

/*    Macro to define default handlers. Default handler
 *    will be weak symbol and just dead loops. They can be
 *    overwritten by other handlers */

von Rath Loser (Gast)


Lesenswert?

Walter T. schrieb:
> eine längliche Konstruktion, die
> Default-Handler bereitstellt:

... und darin hättest du mit deinem Programm festhängen müssen.

Du brauchst mir nicht erklären wo die IRQ-Handler stehen.
Aber offensichtlich hast du es nicht kapiert was ich meine.

von Walter T. (nicolas)


Lesenswert?

Rath Loser schrieb:
> ... und darin hättest du mit deinem Programm festhängen müssen.

Schau mal, welche Priorität die SPI-ISR hat und was in der Hauptschleife 
passiert. Beim Anhalten zeigt der Call-Stack erst einmal nichts 
Unerwartetes an.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.