Guten Morgen zusammen, ich mache gerade meine ersten Gehversuche mit einem STM32. Ich verwende dafür ein Demoboard von Futurlec. Die ersten LEDs blinken auch schon erfolgreich. Nun versuche ich seit 2 Tagen die interrupts hinzubekommen... Mittlerweile bin ich soweit, das er zwar in meine Interrupt-Routine reinspringt, alles ausführt was da drin steht, aber er springt nicht wieder in die Hauptschleife zurück. Das macht sich daran bemerkbar das mein Lauflicht stehen bleibt. Ich hab mal das erstellte Listing (via objdump) angehangen. Es geht um den handler EXTI0_Handler. Ich habe leider noch keine Möglichkeit fürs On-Chip debuggen und wäre für jede Hilfe sehr dankbar. Gruß Andre
> Ich hab mal das erstellte Listing (via objdump) angehangen.
Jetzt wäre der passende C-Code auch noch interessant...
Es wird nötig sein, das Pending Bit vom EXTI im Handler zurück zu setzen, sonst bleibt der Interrupt-Request stehen und er dreht permanent im Handler die Runde.
Zum Test kannst Du auch ein Ausgangs-Bit im Interrupt negieren. Dann kannst Du im Oszi sehen wie oft der im Interrupt rein springt.
Ich hatte bei den STM32 am anfang das Problem, das ich die "startup_stm32..." nicht mit in mein Projekt eingebunden hatte. Solange ich keine Interrupts benutzt habe funktionierte alles, mit Interrupts hat jedes mal der "HardFault_Handler" zugeschlagen. Das Problem war dann einfach, das Vektortabelle für die Interrupts nicht gefüllt war, und genau das macht das startup-file.
Ich habe mal noch die Hauptdatei, die startup datei und linker und makefile angehangen. Kompiliere alles mit codesourcery lite. In der Listing-Datei sieht man aber auch das die Interrupts an der richtigen stelle liegen.
Sachichdoch. Interrupt-Request bleibt stehen und der Handler läuft im Dauerfeuer, weil Pending-Bit im Handler nicht gelöscht. Die STM-Lib hat einen Vorteil: Man kann auch im Disassembly noch manches erkennen.
Ich hab grad nochmal in den Beispielen der FWlib geschaut. Wenn ich das richtig sehe fehlt mir ein:
1 | EXTI_ClearITPendingBit(0); |
im Interrupt.
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.