最近在做PWM的电机控制,需要通过修改PWM的频率来控制电机的速度。
使用如下的函数:
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload);
该函数可修改定时器的ARR值,使得定时器的周期改变。
在使用时,总是会随机的出现PWM输出消失的情况,通过排查,在调用TIM_SetAutoreload()函数时,需要初始化使能定时器的Preload功能,调用如下函数:
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
TIM_ARRPreloadConfig(TIM2,ENABLE);
该功能使能是,ARR的值先暂存在影子寄存器,带ARR溢出后再更新ARR的值。
使能该功能后,该问题解决。
版权声明:本文为d4l6c8原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。