Forum: Mikrocontroller und Digitale Elektronik Timer 32 Mhz oder 72 Mhz ?


von Sam (Gast)


Lesenswert?

Hallo,

Ich versuche meinen Timer 2 (TIM2) zu konfigurieren. Ich möchte gerne 
das dieser einen Interrupt nach 1ms genieriert.
Ich nutze das SM3210E-Eval Board.

Ich bin mir aber nicht so sicher ob ich hiermit richtig liege....


Auf Seite 13. sind die Taktsignale dargestellt.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00253742.pdf

Laut Dokument läuft die APB1 mit 32 MHZ aber mich stört dieser Teil:

If (APB1 prescaler =1) x1
else  x2

habe ich hier nun 32Mhz oder 72Mhz ?

unten ist mein Code wo ich von 72 Mhz ausgehe

1
  // enable TIMER TIM2 system clock
2
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
3
  
4
  
5
 /* Enable the Timer2 Interrupt */
6
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
7
  
8
  NVIC_InitStructure->NVIC_IRQChannel = TIM2_IRQn;             //  configure the Timer2 interrupts
9
  NVIC_InitStructure->NVIC_IRQChannelPreemptionPriority = 3;   //  sets the priority group of the TIMER2 interrupts
10
  NVIC_InitStructure->NVIC_IRQChannelSubPriority = 0;           //  set the subpriority inside the group
11
  NVIC_InitStructure->NVIC_IRQChannelCmd = ENABLE;             //  TIMER2 interrupts are globally enabled
12
  NVIC_Init(NVIC_InitStructure);    
13
  
14
  /* Configure Timer which is every 1  ms active*/
15
  TIM_DeInit(TIM2);
16
  TIM_TimeBaseStructInit(TIM_TimeBaseStructure);
17
 
18
  /* Time base configuration */
19
  TIM_TimeBaseStructure->TIM_Prescaler = 360 - 1; // 72 MHz / 360 = 200 khz
20
  TIM_TimeBaseStructure->TIM_Period = 200 - 1;    // (1/200khz) * 200 = 1 ms;
21
  TIM_TimeBaseStructure->TIM_ClockDivision = TIM_CKD_DIV1;
22
  TIM_TimeBaseStructure->TIM_CounterMode = TIM_CounterMode_Up;
23
  TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);
24
  
25
  //TIM_PrescalerConfig(TIM2, 360-1 , TIM_PSCReloadMode_Immediate);
26
  
27
  /* Enable TIM2 Update Interrupt */
28
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
29
 
30
  /* Enable TIM2 */
31
  TIM_Cmd(TIM2,ENABLE);

von Detlef K. (adenin)


Lesenswert?

Die Aussage bedeutet, wenn Du einen Teilerwert von 2,4,8 oder 16 
benutzt, dann ist der Timertakt doppelt zu groß wie APB1. Bei einem 
Teiler von 1, ist der APB1 gleich HCLK und der Timertakt ich dann auch 
gleich APB1.

Du hast einen Teiler von 2?
Dein HCLK ist 72MHz?
Dann ist dein Timertakt 2x32MHz=72MHz.

Wenn Du allerdings nicht selbst feststellen kannst ob dein Interrupt 
aller 1ms kommt, dann kann dir sowieso keiner helfen.

von Sam (Gast)


Lesenswert?

Detlef Kunz schrieb:
> Du hast einen Teiler von 2?
> Dein HCLK ist 72MHz?

wo wird der ABP1 geteilt bzw. wozu teilt man das ?

von Detlef K. (adenin)


Lesenswert?


: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.