问题:在使用定时器输出PWM时,假如此时关闭PWM的输出,其IO口会出现高低电平交替出现的情况!1.代码设置:TIM2->CCER2寄存器设置的是输出使能和输出有效电平为低电平;
/ k8 j, v' s" ?9 E- ]7 ]! R. T% @& J5 T/ K. p5 [9 r( W! x
- /* Disable the Channel 1: Reset the CCE Bit, Set the Output State, the Output Polarity(low) */3 \9 _) s7 c1 L& ]$ j
- TIM2->CCER2 &= (uint8_t)(~( TIM2_CCER2_CC3E | TIM2_CCER2_CC3P));
( ~8 U/ q2 h4 e! H - /* Set the Output State & Set the Output Polarity */6 P2 E, O3 N$ w+ ]2 T, ? H
- TIM2->CCER2 |= (uint8_t)((uint8_t)(0x11 & TIM2_CCER2_CC3E) | (uint8_t)(0x02 & TIM2_CCER2_CC3P));
1 c, q4 L, E, y$ O# x6 z) G - /* Reset the Output Compare Bits & Set the Output Compare Mode(PWM1) */
$ m& r8 E1 |' d, Z - TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) |<font color="#ff0000"> (uint8_t)0x60</font>);
复制代码 2.停止输出PWN:先使能定时器,然后强制输出为有效电平;
4 z# R% a& ]# c. [. @
* @" d8 @8 h9 c- Z- /* Disable timer2 */
( q+ t6 J! F( n - TIM2->CR1 &= (uint8_t)(~TIM2_CR1_CEN); 5 j8 p$ ^" U1 ~2 J& m
- /* Reset the OCM Bits & Configure the Forced output Mode */
& A/ L1 N4 k3 B A - TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) | <font color="#ff0000">(uint8_t)0x50</font>);
复制代码 3.重新启动定时器输出PWM:重新配置位输出PWM1模式,启动定时器
9 y+ e) v c6 E% G- /* Reset the OCM Bits & Configure the Forced output Mode */
$ I) m5 ~) L3 ? - TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) | <font color="#ff0000">(uint8_t)0x60</font>);# |$ ]- h2 V) t: Z* q
- TIM2->CR1 |= (uint8_t)TIM2_CR1_CEN; //产生pwm
复制代码 4.至于上面红色的设置关键字:
* q. B' X4 h0 X! k3 N% o- I" Y来自于stm8s参考手册TIMx_CCMR1
5 a3 }6 W" W3 h+ k5 H: R2 i |