Moin!
Ich versuche gerade, den Timer 7 beim ST32F100 (auf dem
STM32Discoveryboard) zum laufen zu bekommen, so dass er beim
Update-Event einen Interrupt auslöst.
So sehen meine Versuche bis jetzt aus:
1 | void TIM7_IRQHandler(void)
|
2 | {
|
3 | GPIOC->ODR += 1;
|
4 | TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
|
5 | }
|
6 |
|
7 | void main(void)
|
8 | {
|
9 | // TIM7 initialisieren
|
10 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
11 | TIM_TimeBaseStructure.TIM_Period = 0xffff;
|
12 | TIM_TimeBaseStructure.TIM_Prescaler = 0xffff;
|
13 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
14 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
15 | TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;
|
16 | TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);
|
17 |
|
18 | // Interrupt für TIM7 initialisieren
|
19 | NVIC_InitTypeDef NVIC_InitStructure;
|
20 | NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQChannel;
|
21 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
22 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
23 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
24 | NVIC_Init(&NVIC_InitStructure);
|
25 |
|
26 | // low speed peripheral clock für TIM7 (sollte 32.768kHz sein)
|
27 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
|
28 |
|
29 | // interrupt enablen - nur update-events für die Basic Timer
|
30 | TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
|
31 |
|
32 | // TIM7 enable
|
33 | TIM_Cmd(TIM7, ENABLE);
|
34 |
|
35 | while(1);
|
36 | }
|
Das Problem ist folgendes: Das Update Event findet immer im gleichen
Abstand statt, egal was in TimeBaseInit steht. Der Prescaler hat auch
keinen Einfluss.
Kann ich über den Prescaler den Abstand zwischen zwei Update-Events
beeinflussen und wenn ja, was mache ich falsch dabei?
Vielen Dank für die Hilfe
Christian