Hallo Leute, Ich brauche für dem STM32F2 eine Funktion mit der ich den
Timer einstellen kann also von der Form :
void setTimer(int Value) , je nach Value läuft der Timer entsprechend
schneller oder langsamer. Ich könnte jedes mal den Timer neu
initallisieren um das gewünschte Ergebnis zu erhalten aber ich glaube
das wäre ziemlich Aufwändig da die Funktion oft aufgerufen wird.
Ich wollte nun mit OutputCompare arbeiten und den Compare-Wert
dementsprechend in der Funktion setTimer() anpassen.
1 | void initTimer3(void)
|
2 | {
|
3 | unsigned int t1=8000;
|
4 |
|
5 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
6 | NVIC_InitTypeDef NVIC_InitStructure;
|
7 | TIM_OCInitTypeDef TIM_OCInitStructure;
|
8 |
|
9 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
10 |
|
11 | NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
|
12 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
13 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
14 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
15 | NVIC_Init(&NVIC_InitStructure);
|
16 |
|
17 |
|
18 | TIM_TimeBaseStructure.TIM_Prescaler = 5000;
|
19 | TIM_TimeBaseStructure.TIM_Period = 10000;
|
20 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
21 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
22 | TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
|
23 | TIM_Cmd(TIM3, ENABLE);
|
24 |
|
25 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
|
26 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
27 | TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
28 | TIM_OCInitStructure.TIM_Pulse = 1000;
|
29 | TIM_OC1Init(TIM3, &TIM_OCInitStructure);
|
30 | TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
|
31 |
|
32 | TIM_ITConfig(TIM3,TIM_IT_CC1, ENABLE);
|
33 |
|
34 |
|
35 | TIM_SetCompare1(TIM3, t1);
|
36 | //Oder : TIM3->CCR1 = 8000;
|
37 |
|
38 |
|
39 | }
|
Das Problem ist, egal wie ich TIM_SetCompare1 einstelle, der Interrupt
wird alle 500 µs ausgelöst. Ich hoffe ihr könnt mir sagen was daran
falsch ist.