Hallo,
ich versuche gerade den TIM2 des STM32f103 als Timebase laufen zu
lassen. (Der Systick geht ohne Probleme es wird jedoch eine 2.
unabhängige Timebase benötigt).
Ich verwende die STD-Lib von ST
Zu erst wird RCC auf 24Mhz initialisiert (SysCLK HCLK und PCLK2)
und auch für TIM2 Enabled.
Diese Werte kann ich auch per RCC_GetClocksFreq() bestätigen.
als nächstes initialisiere ich den Timer:
1 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
2 | TIM_TimeBaseStructInit(TIM_TimeBaseStructInit);
|
3 | TIM_TimeBaseStructure.TIM_Period = 50;
|
4 | TIM_TimeBaseStructure.TIM_Prescaler = 8;
|
5 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
6 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
7 | TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
|
8 |
|
9 | /* TIM IT enable */
|
10 | TIM_ITConfig(TIM2, TIM_IT_CC1 , ENABLE);
|
11 |
|
12 | /* TIM2 enable counter */
|
13 | TIM_Cmd(TIM2, ENABLE);
|
14 |
|
15 |
|
16 |
|
17 | NVIC_InitTypeDef NVIC_InitStructure;
|
18 |
|
19 | /* Enable the TIM2 gloabal Interrupt */
|
20 | NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
|
21 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
22 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
23 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
24 |
|
25 | NVIC_Init(&NVIC_InitStructure);
|
Im TIM2_IRQHandler lass ich nun nen Pin Toggeln.
Das Problem ist, das zwar der Interrupt angesprungen wird, jedoch:
1. Die Frequenz nicht passt und auch komische Werte annimmt wenn man an
Prescaler und Period dreht (Periode um Faktor 10 größer erzeugte
Frequenz nur Faktor 4 größer)
2. Es keine Auswirkungen zeigt wenn ich an der ClockDivision dreh
Ich hoffe ihr könnt mir weiterhelfen
Mfg
TSE