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); }
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
danke, aber die Periode und Prescaler sind ja zwei unbekannte, wie muss ich diese wählen? HCLK ist 72MHz und der APB1 Vorteiler ist größer 1
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.