Timer config Stm32

Gast #3408085
Lesenswert?
• ▲
▼
Hallo bin mir nicht sicher aber könnt ihr mir schreiben ob hier was 
falsch ist ?

Ich will einen 1 ms Timer haben, mein System_clk ist 72 Mhz aber 
irgendwie kommt nicht so das wie erwartet.



  TIM_TimeBaseStructure->TIM_Prescaler = 360 - 1; // 72 MHz / 360 = 200 
khz
  TIM_TimeBaseStructure->TIM_Period = 200 - 1;    // (1/200khz) * 200 = 
1 ms;

Kann man mit Hterm das erfassen ?
Gast #3408179
Lesenswert?
• ▲
▼
mhh interessant , wenn ich TIM2_Tick >= 1000 so lasse ,dann blinkt meine 
LED so schnell das ich sie nicht erfassen kann aber eigentlich 
1ms*1000=1s sollte sie ja jede Sekunde blinken .

Wenn ich TIM2_Tick >= 1000000 mache dann blinkt die LED in 34 Sek 30 
mal....irgendwas ist faul.....

1
void TIM2_IRQHandler(void)
2
{
3
  static int TIM2_Tick = 0;  
4

5
        TIM2_Tick++;
6
 
7
        if (TIM2_Tick >= 1000) // 1 Second
8
        {
9
          if(check == 0)
10
          {
11
            STM_EVAL_LEDOn(LED1);
12
            check=1;
13
          }
14
          else
15
          {
16
            STM_EVAL_LEDOff(LED1);
17
            check =0;
18
          }
19
          
20
          TIM2_Tick = 0;
21
        }
22
  
23
}
Gast #3409434
Lesenswert?
• ▲
▼
1
void Config_Timer(TIM_TimeBaseInitTypeDef *TIM_TimeBaseStructure, NVIC_InitTypeDef *NVIC_InitStructure)
2
{
3
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
4
    
5
 /* Enable the Timer2 Interrupt */
6
  NVIC_InitStructure->NVIC_IRQChannel = TIM2_IRQn;                          //  configure the Timer2 interrupts
7
  NVIC_InitStructure->NVIC_IRQChannelPreemptionPriority = 0;   //  sets the priority group of the TIMER2 interrupts
8
  NVIC_InitStructure->NVIC_IRQChannelSubPriority = 1;                    //  set the subpriority inside the group
9
  NVIC_InitStructure->NVIC_IRQChannelCmd = ENABLE;                            //  TIMER2 interrupts are globally enabled
10
  NVIC_Init(NVIC_InitStructure);        
11
    
12
    /* Configure Timer which is every 1 ms active*/
13
  TIM_DeInit(TIM2);
14
  TIM_TimeBaseStructInit(TIM_TimeBaseStructure);
15
 
16
  /* Time base configuration */
17
  TIM_TimeBaseStructure->TIM_Prescaler = 360 - 1; // 72 MHz / 360 = 200 khz
18
  TIM_TimeBaseStructure->TIM_Period = 200 - 1;    // (1/200khz) * 200 = 1 ms;
19
  TIM_TimeBaseStructure->TIM_ClockDivision = 0;
20
  TIM_TimeBaseStructure->TIM_CounterMode = TIM_CounterMode_Up;
21
  TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);
22
    
23
 
24
    
25
  /* Enable TIM2 Update Interrupt */
26
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
27
 
28
  /* Enable TIM2 */
29
  TIM_Cmd(TIM2,ENABLE);
30
         
31
}
32

33

34

35
void TIM2_IRQHandler(void)
36
{
37
    static int TIM2_Tick = 0; 
38
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
39
  
40
     TIM2_Tick++;
41

42
        if (TIM2_Tick >= 1000) // 1 Second
43
                {
44
                    if(check == 0)
45
                    {
46
                        STM_EVAL_LEDOn(LED1);
47
                        check=1;
48
                    }
49
                    else
50
                    {
51
                        STM_EVAL_LEDOff(LED1);
52
                        check =0;
53
                    }
54
                    
55
                    TIM2_Tick = 0;
56
        }
57
}

Hab gemerkt das ich den Interrupt zurücksetzen muss und habe noch meinen 
Handler mit TIM_ClearITPendingBit(TIM2, TIM_IT_Update); ergänzt aber 
dennoch bekomme ich 10 Ticks bei 19 Sekunden
#3409453
Lesenswert?
• ▲
▼
Da fehlt noch die Konfiguration deiner Clocks.
Es gibt von ST ein Excel Sheet mit dem man das sehr übersichtlich 
einstellen kann.
Der Timer2 Takt hängt vom APB1 Prescaler ab, und ich vermute mal, dein 
Timer läuft nicht mit 72MHz sondern mit 36MHz(falls der Controller 
selbst denn wirklich mit 72MHz läuft)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.