Timer auf Null setzen

Gast #4939223
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren