问题:在使用定时器输出PWM时,假如此时关闭PWM的输出,其IO口会出现高低电平交替出现的情况!1.代码设置:TIM2->CCER2寄存器设置的是输出使能和输出有效电平为低电平;
8 `$ C: c }, e& P' p
2 _8 w% e: f6 J# p) E7 z* r& k/ ], r- /* Disable the Channel 1: Reset the CCE Bit, Set the Output State, the Output Polarity(low) */
3 |/ v; j, z J) j8 C7 _ K - TIM2->CCER2 &= (uint8_t)(~( TIM2_CCER2_CC3E | TIM2_CCER2_CC3P));
' ], n8 t9 i' z6 }" [5 ~ S - /* Set the Output State & Set the Output Polarity */ D) U) O$ o3 y% y, i) U7 {! ]9 d! z! g
- TIM2->CCER2 |= (uint8_t)((uint8_t)(0x11 & TIM2_CCER2_CC3E) | (uint8_t)(0x02 & TIM2_CCER2_CC3P));
$ z' \$ N$ a# [; R( `+ ~ - /* Reset the Output Compare Bits & Set the Output Compare Mode(PWM1) */! e9 r) w: L% _4 t
- TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) |<font color="#ff0000"> (uint8_t)0x60</font>);
复制代码 2.停止输出PWN:先使能定时器,然后强制输出为有效电平;
' T" p* `( E% s: c; J5 b4 ]9 J c7 W# H+ [/ u
- /* Disable timer2 */, |" V1 Q* ?5 T* {
- TIM2->CR1 &= (uint8_t)(~TIM2_CR1_CEN);
) Z: f2 S$ p8 X( `4 O' B8 ~$ U - /* Reset the OCM Bits & Configure the Forced output Mode */
! `+ {/ Q& b0 \ - TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) | <font color="#ff0000">(uint8_t)0x50</font>);
复制代码 3.重新启动定时器输出PWM:重新配置位输出PWM1模式,启动定时器( Z% N" |. K- `. a& x
- /* Reset the OCM Bits & Configure the Forced output Mode */
/ |8 \+ i1 B9 k1 i - TIM2->CCMR3 = (uint8_t)((uint8_t)(TIM2->CCMR3 & (uint8_t)(~TIM2_CCMR_OCM)) | <font color="#ff0000">(uint8_t)0x60</font>);
+ u2 H# X2 i7 s - TIM2->CR1 |= (uint8_t)TIM2_CR1_CEN; //产生pwm
复制代码 4.至于上面红色的设置关键字:' @$ s6 X+ }/ X' _4 K: F
来自于stm8s参考手册TIMx_CCMR17 X) L8 O2 ?& x' M2 u
|