Hallo zusammen
Ich versuche folgendes zu erreichen:
Timer1 soll bei Zählerstand 0 einen Ausgang auf low schalten.
Dies generiert mir einen Interrupt. Innerhalb dieses Interrupts,
möchte ich den Ausgang beliebig ändern können.
Sobald der Timer1 wieder bei 0 angelangt ist, soll er diesen wieder auf
low schalten.
Dazu habe ich folgenden Code:
1 | void sys_InitTimer(void)
|
2 | {
|
3 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
4 | TIM_OCInitTypeDef TIM_OCInitStructure;
|
5 |
|
6 | //Time base configuration
|
7 | TIM_TimeBaseStructure.TIM_Period = 128-1;
|
8 | TIM_TimeBaseStructure.TIM_Prescaler = 0;
|
9 | TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
10 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
11 | TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
|
12 |
|
13 | /* Output Compare Timing Mode configuration: Channel1 */
|
14 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; //Bei Compare soll der Ausgang auf Low
|
15 | TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //Ausgang aktiviert
|
16 | TIM_OCInitStructure.TIM_Pulse = 0; //Direkt bei Zählerstand 0
|
17 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Unsicher, was dies bewirkt
|
18 | TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //Vermutlich bei deaktiviertem Timer auf "1"
|
19 | TIM_OC2Init(TIM1, &TIM_OCInitStructure);
|
20 |
|
21 | TIM_ITConfig(TIM1,TIM_IT_CC2, ENABLE);
|
22 |
|
23 | TIM_CtrlPWMOutputs(TIM1, ENABLE);
|
24 |
|
25 | //Externer CLK für den Timer
|
26 | TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x00);
|
27 |
|
28 | TIM_Cmd(TIM1, ENABLE);
|
29 | }
|
Im Timer interrupt habe ich folgendes versucht:
1 | void TIM1_CC_IRQHandler(void)
|
2 | {
|
3 | TIM1->SR = (uint16_t)~TIM_IT_CC2;
|
4 |
|
5 | HW_OUT_A(1);
|
6 | HW_OUT_A(0);
|
7 |
|
8 | TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_Active);
|
9 | }
|
Leider bleibt damit der Ausgang immer auf high. Wenn ich das Force
entferne, bleibt er immer auf low.
Wenn ich den OC in den Toggle mode schalte, wird immer schön
umgeschaltet.
Der Ausgang scheint also grundsätzlich zu funktionieren.
Hat jemand eine Idee?
Danke