stm32f103 Timer Interrupt

Gast #3163489
Lesenswert?

Hallo,

für meinen stm32f10x benötige ich einen Timer Interrupt der jede ms 
auslöst. ich weis aber nicht wie ich die werte Period und Prescaler 
wählen muss. ich benutze hierbei die std Library. mene initialisierung 
sieht wie folgt aus:

void timerInterrupt_Init(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBase_InitStructure.TIM_Period = 1;
  TIM_TimeBase_InitStructure.TIM_Prescaler = 3999;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBase_InitStructure);

  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

  nvic_initialisierung(TIM2_IRQn);  // Interrupt einschalten

  TIM_Cmd(TIM2, ENABLE);
}
#3163589
Lesenswert?

Hi,

der Timer2 hängt am APB1-Clock
also müsstest du zuerst wissen
wie hoch dein HCLK ist und welcher Vorteiler
für APB1 eingestellt ist

dann berechnet sich die Timer-Frq mit :

[falls APB1_Vorteiler = 1]

TIM_CLK = APB1_CLK/(Period+1)/(Prescaler+1)


[falls APB1_Vorteiler > 1]

TIM_CLK = (APB1_CLK*2)/(Period+1)/(Prescaler+1)

Gruss Uwe
#3163752
Lesenswert?

>aber die Periode und Prescaler sind ja zwei unbekannte

ja, dann mach halt aus einer eine "Bekannte" :-)


nimm z.B. als Prescaler die Zahl 1 (warum siehst du später)
(und ich nehme mal an bei dir ist der APB1 Vorteiler = 2)

dann hast du ein ABP1_Clk von 36MHz

also :

TIM_CLK = (APB1_CLK*2)/(Period+1)/(Prescaler+1)

du wills einen 1ms Takt ... also f=1kHz


1kHz = (36MHz*2)/(x+1)/(1+1)

umgestellt auf x

(x+1) = (36MHz*2)/(1+1)/1kHz

x+1 = 72MHz/2/1kHz

x+1 =  36000

x = 35999

1
TIM_TimeBase_InitStructure.TIM_Prescaler = 1;
2
TIM_TimeBase_InitStructure.TIM_Period = 35999;

das müsste passen
(falls ich keinen Fehler drinn hab)

P.S. ein prescaler von 0 würde nicht funktionieren,
weil dann die Wert für die Periode > 16bit wäre

Gruss Uwe

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