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