www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 Interrupt Rücksprung ins Nirvana


Autor: Andre R. (ryan87)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hab mal das erstellte Listing (via objdump) angehangen.
Jetzt wäre der passende C-Code auch noch interessant...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Test kannst Du auch ein Ausgangs-Bit im Interrupt negieren. Dann 
kannst Du im Oszi sehen wie oft der im Interrupt rein springt.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andre R. (ryan87)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab grad nochmal in den Beispielen der FWlib geschaut. Wenn ich das 
richtig sehe fehlt mir ein:
EXTI_ClearITPendingBit(0);
im Interrupt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.