【WCH蓝牙系列芯片】-基于CH32V208开发板—PWM暂停输出,保持电平问题
-------------------------------------------------------------------------------------------------------------------------------------
在进行定时器的PWM输出时,有时候需要暂停对PWM的输出,此时对应的IO口输出电平是不确定的状态,这样会影响信号的调制问题。
针对这个问题,采用CH32V208的EVT例程中的PWM_Output程序进行修改。
int main(void) { USART_Printf_Init(115200); Delay_Init(); printf("SystemClk:%d\r\n",SystemCoreClock); TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); //开启定时器3通道2 TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); //开启定时器1 TIM_CCxCmd(TIM4, TIM_Channel_3, TIM_CCx_Enable); TIM1_PWMOut_Init( 100-1, 96000-1, 50 ); TIM3_PWMOut_Init( 100-1, 96000-1, 50 ); TIM4_PWMOut_Init( 100-1, 96000-1, 50 ); Delay_Ms(7000);
TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Disable); //关闭定时器3通道2 TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable); //关闭定时器1 TIM_CCxCmd(TIM4, TIM_Channel_3, TIM_CCx_Disable); Delay_Ms(10000); TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); //开启定时器3通道2 TIM3_PWMOut_Init( 100-1, 96000-1, 50 ); Delay_Ms(5000); TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Disable); //关闭定时器3通道2
TIM_SelectOCxM(TIM3, TIM_Channel_2, TIM_OCMode_Inactive); //设置定时器3通道2GPIO强制输出为低电平 TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); //开启定时器3通道2 TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_Active); //设置定时器1通道1GPIO强制输出为高电平 TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); //开启定时器1通道1 TIM_SelectOCxM(TIM4, TIM_Channel_3, TIM_OCMode_PWM2); //回复定时器4的通道3口占空比输出 TIM_CCxCmd(TIM4, TIM_Channel_3, TIM_CCx_Enable); //开启定时器4的通道3 while(1); }
在主函数中,
通过函数TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); //开启定时器3通道2;通过配置某个定时器的某个通道,进行使能。
然后进行PWM的正常输出,
再通过TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Disable); //关闭定时器3通道2;通过配置某个定时器的某个通道,进行关闭
在延时10秒后,再开启定时器3的通道2,进行PWM的正常输出。
最后,当暂停PWM的输出后,
采用void TIM_SelectOCxM(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)这个函数,
TIMx 是一个指向指定的TIM定时器(如 TIM1、TIM2 )的指针。
TIM_Channel 是指定的定时器通道,可以是 TIM_Channel_1、TIM_Channel_2、TIM_Channel_3 或 TIM_Channel_4。
TIM_OCMode 是指定的输出比较模式:
TIM_OCMode_Timing:定时模式
TIM_OCMode_Active:高电平模式
TIM_OCMode_Toggle:翻转模式
TIM_OCMode_PWM1:PWM模式1
TIM_OCMode_PWM2:PWM模式2
TIM_ForcedAction_Active:强制输出高电平
TIM_ForcedAction_InActive:强制输出低电平
所以在程序中,
设置定时器3通道2口的IO强制为低电平;
设置定时器1通道1口的IO强制为高电平;
设置定时器4通道3口的恢复PWM口继续输出;
通过逻辑分析仪三个IO口的电平状态:
可以看到逻辑分析仪输出结果;
定时器3通道2口的IO口最后关闭PWM输出,强制为低电平;
定时器1通道1口的IO口最后关闭PWM输出,强制为高电平;
定时器4通道3口关闭PWM输出,一段延时时间后,又恢复PWM口继续输出。