Forum: Mikrocontroller und Digitale Elektronik STM32 Interrupts funktionieren nicht!


von obamoa (Gast)


Lesenswert?

Hallo Experten!

Auf das Problem bin ich folgendermaßen gestoßen:
[[Beitrag "STM32 externer Interrupt funktioniert nicht immer!"]]

Dabei bin ich darauf gekommen, dass auch der Systick Interrupt nicht 
funktioniert!

Mittlerweile habe ich mir die die STM32F10x_StdPeriph_Lib_V3.5.0 besorgt 
und das Beispiel mit dem Systick compaliert (0 Fehler 0 Warnings). Ich 
habe das im Bsp. Hinterlegte IAR-Projekt verwendet. In IAR habe ich die 
das Projekt STM3210E-EVAL eingestellt damit wird der Startup 
startup_stm32f10x_hd.s verwendet.

Der Systick läuft, aber es wird nicht in die ISR gesprungen!

Ich verwende das STM32-LCD Board von Olimex (STM32-F103ZE) zum debuggen
verwende ich den ARM-USB-OCD mit OpenOCD (Debugger Einstellungen im 
IAR-Projet angepasst: GBD-Server, localhost,3333). Als 
Entwicklungsumbebung ist
das IAR - Kickstart V 6.0 im Einsatz.


Ich bin dankbar für jede Hilfe!

von obamoa (Gast)


Lesenswert?

Hat keiner einer Idee was da faul sein könnte? Falsche Einstellungen 
oder irgend eine blöde Kleinigkeit oder so.

Bin nämlich schön langsam am verzeifeln!

von Matthias K. (matthiask)


Lesenswert?

Wir wissen nicht was Du alles verstellt hast. Deinstallieren und noch 
mal von vorn anfangen. Und dann nimm als Start ein IAR-Beispiel als 
Projekt-Vorlage.

Oder flash das Programm mal mit einen anderen Tool, vielleicht hat der 
Debugger ne Macke.

von obamoa (Gast)


Lesenswert?

Danke für den Tipp! Werd es Mal versuchen. Meld mich dann wieder.

Was mir noch eingefallen ist: kann man die Interrupts beim STM32 
irgendwo global aktivieren/deaktivieren und wenn ja welsches 
Register/welcher Befehl?

PS: schönes Wochenende!

von Jan (Gast)


Lesenswert?

Global aktivieren nein.

Ich habe lange dran rumgefummelt den richtigen EXTI_Kanal zu finden. 
Schau ins Errata sheet.
Eventuell auch noch der Klassiker ? Alle Header eingebunden ( misc.h für 
Systick) ? Alles notwendige mit Takt versorgt? Richter µc eingebunden ? 
(#defines )

mfg Jan

von Jan (Gast)


Lesenswert?

Jan schrieb:
> Richter µc eingebunden ?

Richtiger solls natürlich heißen^^

von obamoa (Gast)


Lesenswert?

Hab IAR EW und OpenOCD deinstalliert und wieder installiert. Danach habe 
ich mit IAR EW ein Projekt für den STM32F103ZE (es gibt von IAR ein 
eval-Board) geöffnet. Habe dann die Files aus dem ST Bsp in das Projekt 
eingefügt. Compalieren 0 Fehler 0 Warnings. Funktionierte leider wieder 
nicht!

> Oder flash das Programm mal mit einen anderen Tool, vielleicht hat der
Debugger ne Macke.

Ich habe leider nur das Eine. Aber die Variablen und der Programm ablauf 
werden ja richtig angezeit. Ist es dann möglich das der Programmablauf 
in keine ISR springt? Ich besorge mir aber vielleich noch ein neus Tool.


@Jan:
Der Kanal war schon der richtige, es hat ja ab und zu funtioniert. Die 
header müssten alle vorhanden sein. Versorgung mit Takt ist eingestellt, 
ich verwende das Bsp von ST, da müssten doch alle Takte richtig 
eingestellt sein.


Ich finde nur seltsam das der Programmablauf nicht in die ISR Springt 
obwohl der MC den Interrupt erkennt und das passende Bit im 
Pend-Register setzt.

Kann mir einer vielleicht ein Bsp mit SysTick oder externen Interrupt 
für IAR EW zukommen lassen, das schon mal funktioniert hat. Das könnte 
ich dann bei mir test.

von Matthias K. (matthiask)


Lesenswert?

>Hab IAR EW und OpenOCD

Du hast aber auch eine seltsame Konfiguration. Man sollte einen Debugger 
nehmen, der auch von IAR unterstützt wird. Empfehle Dir den ST-Link, 
kostet ca. 25 Euro und ist optimal auf die STM32 (und nur diese!) 
abgestimmt. Dann kannst Du auch zB. das kostenlose Atollic TrueStudio 
Lite nehmen, was keine Kode- bzw. Debugeinschränkungen hat.

von obamoa (Gast)


Lesenswert?

> Empfehle Dir den ST-Link, kostet ca. 25 Euro und ist optimal auf die
> STM32 (und nur diese!) abgestimmt.

Danke für den Tipp! Habe ihn soeben bestellt!

> Du hast aber auch eine seltsame Konfiguration.

Ich verwende den ARM-USB-OCD Debugger on Olimex. Treiber und 
Beschreibung habe ich von der Homepage heruntergeladen. Es war auch eine 
Anleitung dabei wie ich das Tool in IAR EW nutzen kann. Es hat auch 
alles gleich geklappt, bis auf das mit den Interrupts.

Na ja, ich hoffe das es mit dem ST-Link funktioniert.

PS: Ich habe den ST-Link/V2 bestellt der müsste ja auch passen oder?

von Matthias K. (matthiask)


Lesenswert?

obamoa schrieb:
> ST-Link/V2

Denke schon.

Ist Neu, kenne ich nocht nicht.

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Hab auch eimal das Problem gehabt. Es lag an den unterschiedlichen 
Schreibweisen von "SysTick_Handler"(z.B.SysTickHandler) Schau in deinem 
Startup file nach,was da genau steht.
Weiters sind beim STMF32 die peripheren Einheiten mit Clock zu versorgen 
bevor man auch nur irgendwas in dessen Register schreibt.

Grüße Gebhard

von Marcus P. (spell)


Lesenswert?

Und gab es Probleme mit der V2 ?

von Turbo J (Gast)


Lesenswert?

Du verwendest OpenOCD? Dann kannst Du doch alle Interrupts abfangen.

Verbinde Dich während des debuggens mit der Telnet-Konsole:
1
telnet 4444
.. und gib dort folgendes ein:
1
cortex_m3 vector_catch all
Damit hält er automagisch an, wann immer ein Intterupt oder Fault 
auftritt. Eventuell sieht mann dann auch im Assembler-code, ob er in den 
korrekte Intterupt-Handler springt.

von obamoa (Gast)


Angehängte Dateien:

Lesenswert?

Sorry ich hab mich in letzter Zeit mit anderen Dingen beschäfigen müssen 
und hatte noch nicht viel Zeit weiter an dem Problem zu arbeiten.

@Gebhard Raich:
Die ISR Namen stimmen.


>Und gab es Probleme mit der V2 ?

Ja also, die Verwendung von V2 hat mit meiner Version von IAR nicht 
funktioniert, darum habe ich mir die neuste Version geholt. Damit habe 
ich auch das SysTick Bsp. zum laufen bekommen (funktioniert alles 
einwandfrei, auch die Interrupts). Nur wenn ich den Code erweitere ich 
also zum Bsp. ein printf für Debugausgaben oder andere größere 
Funktionen einfüge wird der Code zwar fehlerfrei compaliert, aber beim 
laden auf den Controller hängt sich der IAR dann immer auf! Wenn ich nur 
ein paar Codezeilen einfüge ist dies allerdinges kein Problem.
Mit OpenOCD habe ich dieses Problem nicht, allerdings besteht hier 
weiter das Problem mit den Interrupts!


@Turbo J:
Danke für den Tipp. Ich kann es aber leider erst mitte nächster Woche 
ausprobieren. Ich meld mich aber dann sofort mit Ergebnissen.

@alle:
Hat jemand eine Idee was mit dem ST-Link/V2 schief laufen könnte?
Die Version 2 muss doch eigentlich funktionieren oder kann es sein, dass 
irgendwelche Kompatibilitätsprobleme mit IAR EWA bestehen?

Hier nochmal die Eckdaten:
- ST-Link/V2
- Treiber von ST-Homepage heruntergeladen (für V2)
- IAR EWA Verson 6.2
- Einstellungen ST-Link siehe Anhang
  Habe auch andere Einstellungen (Reset Pin und Connect during
  reset)versucht, ohne Erfolg.
- STM32-LCD Board von Olimex mit STM32-F103ZE


Für weitere Tipp und Anmerkungen wäre ich dankbar!

von Jens A. (nepi)


Lesenswert?

Versuch doch mal die Systick-Intervallzeit zu vergrößern. Vielleicht ist 
er mit der Funktion noch nicht durch, wenn er wieder auslöst.

Es kann auch ein Problem mit dem Stack sein, wenn z.B. ein struct nicht 
auf einer Adresse anfängt, die eine vielfache von 4 ist. z.B. 8 bit 
variable auf 32 bit Controller. So richtig habe ich das Problem an der 
Stelle noch nicht gefunden, aber solche Probleme tauchten in meinem 
Projekt momentan öfter auf. Ich habe nun z.B. alle Stringlängen in 
vielfachen von 4 und keine Probleme mehr. Programmiere allerdings mit 
gcc.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Turbo J schrieb:
> cortex_m3 vector_catch all
>
> Damit hält er automagisch an, wann immer ein Intterupt oder Fault
> auftritt.

Im Gegensatz zu anderen ARM Prozessoren kann man damit bei Cortex-M 
Prozessoren keinen Interrupt abfangen. Da musst Du schon einen 
Breakpoint auf die ISR setzen.

--
Marcus

von ZiZi (Gast)


Lesenswert?

hallo Marcus,

Marcus Harnisch schrieb:

> Im Gegensatz zu anderen ARM Prozessoren kann man damit bei Cortex-M
> Prozessoren keinen Interrupt abfangen.

Weisst Du auch, warum das so ist?


Danke!

ZiZi

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

ZiZi schrieb:
>> Im Gegensatz zu anderen ARM Prozessoren kann man damit bei Cortex-M
>> Prozessoren keinen Interrupt abfangen.
>
> Weisst Du auch, warum das so ist?

Bei einem, bzw zwei Interrupts war das noch zu rechtfertigen, aber bei 
bis zu 496? Da ist es auch keine Lösung, bei beliebigem Interrupt in den 
Debug state zu gehen. Außerdem hat man zumindest in den üblichen 
Cortex-M3 Implementierungen acht BP plus WP. Da kann man ja ruhig mal 
einen auf die ISR setzen.

--
Marcus

von obamoa (Gast)


Lesenswert?

>Versuch doch mal die Systick-Intervallzeit zu vergrößern. Vielleicht ist
>er mit der Funktion noch nicht durch, wenn er wieder auslöst.

Ich hab den Systick so eingestellt das jede ms ein Interrupt kommen 
sollte (ist die Standardeinstellung im ST Bsp.). Das sollte doch auf 
keinen Fall zu schnell sein oder?

Das mit den vielfachen von 4 kann ich nicht beurteilen, werde es mir mal 
anschauen.

Ich finde nur komisch, das die Interrupts mit dem ST-Link funktionieren 
aber dieser bei größeren Code immer einen Absturtz des IAR EWA 
verursacht (beim laden des Codes auf den Controller). Sehr sehr seltsam.

von obamoa (Gast)


Lesenswert?

So jetzt ist es so weit, es funktioniert!

Also woran das Problem im Detail lag weis ich nicht. Auf jeden Fall habe 
ich mir den ST-LINK (V1) besorgt und mit IAR EW 6.1 zum laufen bekommen.

Hier nochmal die Varianten die nicht funktionierten:

Debug-Tool              IAR EW Version     Problem
------------------------------------------------------------------------ 
----
Olimex ARM-USB-OCD      6.1                Interrupts funktionierten 
nicht
ST-LINK/V2              6.1                IAR EW erkannte ST-Link/V2 
nicht
ST-LINK/V2              6.2                IAR EW hängte sich beim 
flashen
                                           immer auf
ST-LINK                 6.2                -"-
ST-LINK                 6.1                alles funktioniert 
wunderbar!!


Wenn sich einer einen Reim daraus machen kann, kann er es gerne posten.


Ich werden jetzt mit dieser Konfiguration weiter arbeiten.
Danke an alle für ihre hilfreichen Posts!!

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.