STM32 关闭pwm输出,并固定高/低电平

开发应用的时候需要用到这个功能,目前找到三种方法。记录分享一下

方法一:

        配置为通用IO口,再设置高低电平。具体看IO配置就行

方法二:

        直接修改占空比,将占空比设置成0xFFFF或者0,就可以得到,1或0的电平输出。

        注意:需要修改占空比,重新开启时需要改回去,如果有多种频率输出容易混乱

//以TIM1 通道1 为例子

//HAL库版本
//输出1
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0xFFFF);
//输出0
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);



//固件库版
//输出1
TIM_SetCompare1(TIM1, 0xFFFF);
//输出0
TIM_SetCompare1(TIM1, 0);

 方法三:

       不修改占空比,想让pwm输出或不输出时

        

//以TIM1 Channe1为例

//HAL库版
/* 暂停pwm输出*/
HAL_TIM_PWM_Stop_IT(&htim1, TIM_CHANNEL_1);
//强制拉低
TIM_CCxChannelCmd(TIM1, TIM_CHANNEL_1, TIM_CCx_DISABLE);
//强制拉高
TIM_CCxChannelCmd(TIM1, TIM_CHANNEL_1, TIM_CCx_ENABLE);
//恢复pwm输出
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);


//固件库版
//强制输出0
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_ForcedAction_InActive);
//强制输出1
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_ForcedAction_Active);
//失能capture比较通道
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);

//恢复原来的输出
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);

有什么不对的地方,或者有更好的办法欢迎指出,互相学习,一起成长。

作者:dounc

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 关闭pwm输出,并固定高/低电平

发表回复