最近在做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的值。
使能該功能後,該問題解決。