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

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.