Hallo
Ich habe ein Problem mit dem STM32F3 Discovery und zwar funktioniert der
Timer interrupt nicht. Sobald der Interrupt aktiviert ist und ich mit
dem Debugger zum nächsten Befehl weiter gehe, dann hängt der Debugger in
einer Endlosschleife. Jemand eine Idee?
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //geht nicht
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); //geht, aber der uC hängt dann
trotzdem wenn ich TIM_Cmd(TIM2, ENABLE); ausführe
Code:
Ich sehe aber in deiner main() den Aufruf von timerInit() gar nicht?
Bert S. schrieb:> TIM2Init.TIM_RepetitionCounter = 1;
Wenn der Timer kontinuierlich laufen soll, stell das mal auf 0.
Matthias S. schrieb:> Ich sehe aber in deiner main() den Aufruf von timerInit() gar nicht?>> Bert S. schrieb:>> TIM2Init.TIM_RepetitionCounter = 1;>> Wenn der Timer kontinuierlich laufen soll, stell das mal auf 0.
Ups ja, habe ich beim löschen eines Kommentars mitgelöscht.
Matthias S. schrieb:> Wenn der Timer kontinuierlich laufen soll, stell das mal auf 0.
Habe ich gemacht, aber trotzdem hängt sich der uC nach
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE) auf.
Edit: Ich habe noch ein TIM_ClearITPendingBit(TIM2, TIM_IT_Update); vor
IM_ITConfig(TIM2, TIM_IT_Update, ENABLE) gesetzt, jetzt hängt sich der
uC erst nach TIM_Cmd(TIM2, ENABLE); auf. Die Interrupt Routine wird aber
nie aufgerufen.
Bert S. schrieb:> for(int i=0;i<100000;i++);
Ich kann mir zwar nicht vorstellen, das das was hiermit zu tun hat, aber
int kann alles mögliche sein, und wenn es ein 16 bit int ist, dann
passen 100000 da nicht rein. Benutze lieber solche Dinge wie 'uint32_t',
dann weisst du immer, wie lang die Variable wirklich ist.
Ansonsten rate ich dir, nochmal mit den Prioritäten beim NVIC
rumzuspielen, also z.B. mal beide
Bert S. schrieb:> NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;> NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
z.B. auf null zu stellen. Das ist dann zwar die höchste Priorität, aber
probieren schadet nicht.