Hallo!
Mich ärgert mal wieder mein stm32f103rbt6...
Ich möchte Timer 4 so konfigurieren, dass er an Channel 1 eine PWM
ausgibt.
1 | void TIM4_Configuration(void)
|
2 | {
|
3 | /* Compute the prescaler value */
|
4 | PrescalerValue = (uint16_t) (SystemCoreClock / 8000000) - 1;
|
5 | /* Time base configuration */
|
6 | TIM_TimeBaseStructure.TIM_Period = 1024;
|
7 | TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
|
8 | TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
9 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
10 | |
11 | TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
|
12 | |
13 | /* PWM1 Mode configuration: Channel2 */
|
14 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
15 | TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
16 | TIM_OCInitStructure.TIM_Pulse = timepulse;
|
17 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
18 | //TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
19 | |
20 | TIM_OC1Init(TIM4, &TIM_OCInitStructure);
|
21 | |
22 | TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
|
23 | |
24 | TIM_ARRPreloadConfig(TIM4, ENABLE);
|
25 | |
26 | /* TIM3 enable counter */
|
27 | TIM_Cmd(TIM4, ENABLE);
|
28 | }
|
Timer läuft auch super, jetzt möchte ich aber den Duty Cycle im Programm
anpassen. Dazu wird timepulse verändert und ein Update Event generiert.
1 | TIM_GenerateEvent(TIM4,TIM_EventSource_Update);
|
Leider findet aber keine Refresh des Wertes statt. Man sieht deutlich,
dass der Timer neu initialisiert wird (flackern auf dem Oszi) aber eben
der Duty Cycle ändert sich nicht. Hat jemand eine Idee? Ist das
vielleicht der falsche Befehl?
Gruß und Dank fürs Lesen
vaid