admin管理员组

文章数量:1595879

发现问题:原以为 __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; 需要写入 才更新

本文标签: 周期频率PWMPeriod