【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口继续输出。

 

posted on 2023-11-02 16:39  凡仕  阅读(120)  评论(0编辑  收藏  举报