Hallo Ihr STM32 Experte,
Ich versuche den TIM2 Update Interrupt in betrieb zu nehmen. Ich habe
die TIM peripheral clock initialisiert, TIM konfiguriert mit Prescaler,
ARR usw. und beim Interrupt Enable, bei dieser Setting bleibt er hängen.
1
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
In dem ISR soll er ein Pin setzen, diese GPIO Clocks habe ich auch
initialisiert. (siehe Code)
Evalboard- STM32F411VETx
Libs: Standard peripheral/CMSIS
Sysclock ist 100MHz das habe ich schon getestet.ich habe weder Linker
noch Compiler fehler bekommen, Der binary ist in Flash schon drin, bloß
läuft nicht wie erwartet.
Im Anhang ist mein code. Wäre auf euer Feedback sehr dankbar.
Tim2_initstruct ist nicht definiert. Daher kompiliert dieser Code nicht.
Aus den fehlenden void's in den Funktionen folgere ich dass es C++ ist,
dann fehlt das extern "C" an der ISR.
Das __enable_irq () fehlt.
Dr. Sommer schrieb:> Tim2_initstruct ist nicht definiert. Daher kompiliert dieser Code nicht.> Aus den fehlenden void's in den Funktionen folgere ich dass es C++ ist,> dann fehlt das extern "C" an der ISR.> Das __enable_irq () fehlt.
ist definiert in main.h, das kompiliert schon
Aa B. schrieb:> ist definiert in main.h, das kompiliert schon
Warum zeigst du die dann nicht? Globale Variablen in Header Dateien zu
definieren resultiert in Linker Fehlern. Außerdem wird diese Variable
nur kurz beim Starten benötigt, warum global definieren und dauerhaft
Speicher dafür verschwenden?
Dr. Sommer schrieb:> Aa B. schrieb:>> ist definiert in main.h, das kompiliert schon>> Warum zeigst du die dann nicht? Globale Variablen in Header Dateien zu> definieren resultiert in Linker Fehlern. Außerdem wird diese Variable> nur kurz beim Starten benötigt, warum global definieren und dauerhaft> Speicher dafür verschwenden?
Um erstmal das Ding überhaupt im betrieb zu nehmen, dafür ist egal ob
das Globale oder lokale oder private variable sind oder, außerdem,
speicher ist genug vorhanden. Anbei main.h, Und ich habe weder Linker
noch Compiler fehler bekommen, Der binary ist in Flash schon drin, bloß
läuft nicht wie erwartet.
Hab mal den Code etwas in Ordnung gebracht. Ohne main.h ...
Er läuft auf meinem VE-Board, die IRQ Handler werden
angesprungen, ob jetzt die LEDs blinken oder nicht
hab ich jetzt nicht gecheckt (anderes Board).
Aa B. schrieb:> bleibt er hängen.>
Definiere "bleibt er hängen."
Wird der ISR überhaupt aufgerufen, oder gibt es schon vorher nach dem
Enablen einen fault? Wenn der ISR aufgerufen wird, was genau passiert?
Kommt er nicht mehr raus, oder wird der ISR nach dem Verlassen sofort
wieder aufgerufen (hiesse der ISR löscht die Interruptsource nicht)? Wo
steht der PC im Fehlerfall? Oder läuft Alles möglicherweise soweit, nur
der ISR wird nicht aufgerufen? Ist die IVT richtig aufgesetzt?
Vermutlich findest Du die Lösung selber, wenn Du Dir diese Fragen selber
stellst...
Ruediger A. schrieb:> Aa B. schrieb:>> bleibt er hängen.>>>> Definiere "bleibt er hängen.">> Wird der ISR überhaupt aufgerufen, oder gibt es schon vorher nach dem> Enablen einen fault?
Ja, Also wenn ich diese
1
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
setting weg lasse, und mein LED_DEBUG switch anschalte,kommt er in die
while loop rein und schaltet PD13 an, ansonsten kommt er nicht mal in
die while loop rein. das bedeutet gibt es schon vorher ein Fehler.
STM Apprentice schrieb:> Allerdings den SystTick mit 1 MHz laufen zu lassen könnte> problematisch werden da der Prozessor aus dem Interrupt> Handlen gar nicht mehr herauskommt.
meinst du der Prozessor ist so lahm dass er nicht schnell genug den
anderen ISR zu bedienen, aso.....
STM Apprentice schrieb:> Allerdings den SystTick mit 1 MHz laufen zu lassen könnte> problematisch werden da der Prozessor aus dem Interrupt> Handlen gar nicht mehr herauskommt.
hatte damit überhaupt nichts zu tun!!!!!!
Ruediger A. schrieb:> Aa B. schrieb:>> bleibt er hängen.>>>> Definiere "bleibt er hängen.">> Wird der ISR überhaupt aufgerufen, oder gibt es schon vorher nach dem> Enablen einen fault? Wenn der ISR aufgerufen wird, was genau passiert?> Kommt er nicht mehr raus, oder wird der ISR nach dem Verlassen sofort> wieder aufgerufen (hiesse der ISR löscht die Interruptsource nicht)? Wo> steht der PC im Fehlerfall? Oder läuft Alles möglicherweise soweit, nur> der ISR wird nicht aufgerufen? Ist die IVT richtig aufgesetzt?>> Vermutlich findest Du die Lösung selber, wenn Du Dir diese Fragen selber> stellst...
Vielen Dank für die Hinweise. :)
Aa B. schrieb:> hatte damit überhaupt nichts zu tun!!!!!!
Warum so viele Ausrufezeichen?
Klingt nach Bestrafung! Da brauch ich eigentlich nicht
weiter Tips geben oder Dinge austesten.
Dabei habe ich nur geschrieben
STM Apprentice schrieb:> Allerdings den SystTick mit 1 MHz laufen zu lassen *könnte*> problematisch werden
Was ich nicht (nicht!) geschrieben habe:
Das ist dein Fehler den du beheben musst.
STM Apprentice schrieb:>> Was ich nicht (nicht!) geschrieben habe:>> Das ist dein Fehler den du beheben musst.
Okay das war auch ein gute Hinweis, vielen dank dass Du das auf dein
Target ausgetestet hast! War gar nicht als Bestrafung oder sonst was
gemeint.
Es wundert mich dass bei Dir das geklappt hat, wahrscheinlich weil dein
startup.s hat schon diese IRQHandler drin!