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?
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.
Nachtrag: Der IRQ-Handler heißt SPI2_IRQHandler(), nicht SPIx_IRQHANDLER(). Jetzt geht es.
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.
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 */
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.