Hallo,
ich programmiere auf einem NUCLEO-L412KBxx und möchte einen 10MHz-Takt
mittels Timer generieren. Für den ersten Test habe ich den Timer16
(Clock = PLL mit 80MHz) wie folgt initialisiert:
1 | htim16.Instance = TIM16;
|
2 | htim16.Init.Prescaler = 0;
|
3 | htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
|
4 | htim16.Init.Period = 32768;
|
5 | htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
6 | htim16.Init.RepetitionCounter = 0;
|
7 | htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
Damit erhalte ich einen Takt von 1,09kHz was bereits seltsam ist denn
lt. Berechnung sollte ich auf 2441Hz kommen.
frequency = TIM_CLK/(TIM_PSC+1)/(TIM_ARP + 1)
Der Timer generiert einen Interrupt und toggelt eine LED...
1 | void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
2 | {
|
3 | if(htim->Instance == TIM16)
|
4 | {
|
5 | HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
|
6 | }
|
7 | }
|
Wenn ich den Wert der Periode von 32768 auf z.B. 1 herabsetze, erreiche
ich eine Taktfrequenz von 270kHz.