发现问题:原以为 __HAL_TIM_SET_AUTORELOAD(&htim1, period); 直接更新便行。
结果是不可靠,有随机的可能性不能更新。这在驱动脉冲式电机驱动器上面,时而卡一下。
分析原因:没有配置自动重载,导致更新周期位置不正确。
解决方法:1.配置自动重载 2.选择定时实时更新 3.关定时器 重启定时器 并配置,
结论:当然是配置自动重载寄存器比较好了,周期到了影子寄存器自动更新。

相关代码:
1.
//TIM_AUTORELOAD_PRELOAD_ENABLE
__HAL_TIM_SET_AUTORELOAD(&htim1, period); //自动重载时 用影子寄存器更新
2.//TIM_AUTORELOAD_PRELOAD_DISABLE
TIM_Base_InitTypeDef TIM_Base;
TIM_Base.Prescaler = 16;
TIM_Base.CounterMode = TIM_COUNTERMODE_UP;
TIM_Base.Period = period;
TIM_Base.ClockDivision = TIM_CLOCKDIVISION_DIV1;
TIM_Base.RepetitionCounter = 0;
TIM_Base.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
TIM_Base_SetConfig(TIM1, &TIM_Base);
关键是 TIMx->EGR = TIM_EGR_UG; 需要写入 才更新