Hallo,
ich verwende den STM32F303 und habe ein kleines Problem mit dem Timer.
Ich starte Timer2 mittels der Funktion void start_timer(). Der Timer
selber funktioniert grundsätzlich.
Sobald ein bestimmtes Ereignis auftritt schalte ich den Timer mittels
der Funktion void stop_timer() aus. Funktioniert auch noch...
Aber: wenn ich ein weiteres Mal den Timer starte, habe ich mittels Oszi
festgestellt, dass der Timer2 scheinbar wieder da anfängt, wo er beim
unterbrechen aufgehört hat. Offensichtlich muss ich den Wert wieder
reseten (was beim Ausschalten des Timers scheinbar nicht automatisch
passiert).
Aber meine Frage ist: Wie mache ich das? Wie lautet der fehlende Code
dafür?
Danke für eure Hilfe!
1 | void Timer2_Configuration(void)
|
2 | {
|
3 | TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
|
4 |
|
5 | TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // CKD - Clock division: TDTS = Tck_tim
|
6 | TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
7 | TIM_TimeBase_InitStructure.TIM_Period = 279; // Theoretisch: 281250Hz / 281 = ~1KHz -> 1ms; besser TIM_Period=279 (mit Oszi gemessen)
|
8 | TIM_TimeBase_InitStructure.TIM_Prescaler = 256; // 72MHz / 256 = 281250Hz
|
9 | TIM_TimeBaseInit(TIM2, &TIM_TimeBase_InitStructure);
|
10 |
|
11 | TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
|
12 | NVIC_EnableIRQ(TIM2_IRQn);
|
13 | TIM_Cmd(TIM2, DISABLE);
|
14 |
|
15 |
|
16 | } // Timer2_Configuration
|
17 |
|
18 |
|
19 | void TIM2_IRQHandler(void)
|
20 | {
|
21 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
22 | Timeout = 0;
|
23 | } // void TIM2_IRQHandler
|
24 |
|
25 |
|
26 |
|
27 | void start_timer(void)
|
28 | {
|
29 | Timeout = 1;
|
30 | TIM_Cmd(TIM2, ENABLE); // Timer starten
|
31 | }
|
32 |
|
33 |
|
34 |
|
35 | void stop_timer(void)
|
36 | {
|
37 | Timeout = 1;
|
38 | TIM_Cmd(TIM2, DISABLE); // Timer stoppen
|
39 | }
|