auto-reload precload:

参考链接:https://blog.csdn.net/qq_35629563/article/details/118675981

  1. auto-reload precload=Disable:自动重装载寄存器写入新值后,计数器立即产生计数溢出,然后开始新的计数周期
  2. auto-reload precload=Enable:自动重装载寄存器写入新值后,计数器完成当前旧的计数后,再开始新的计数周期

ouput compare preload:

参考链接:https://blog.csdn.net/qq_16069457/article/details/103684525

如果enable,任何写入TIMx_CCRx事件到来,都不会打断当前计数周期,只能等到计完数了(更新事件),才把TIMx_CCRx传送至当前计数寄存器。

如果disable,任何写入TIMx_CCRx事件到来,都会打断当前计数周期,TIMx_CCRx的值传送至当前计数寄存器。

所以想要实时修改,就设置为disable,前提是auto-reload precload要设置为disable

__HAL_TIM_SET_COUNTER(&TIM2_Handler,arr)

这条语句用来修改ARR就是自动重装在值,就是counter period的值。

__HAL_TIM_SET_PRESCALER(&TIM2_Handler,psc)

这条用来修改psc,就是预分频值

HAL_TIM_SET_AUTORELOAD(__HANDLE, AUTORELOAD)

运行过程中调用该函数修改ARR,就是period的值,无需调用init函数

调频率方法:

void Set_Period(TIM_TypeDef* TIMx, uint32_t Period)
void Set_Period(uint8_t timex, uint32_t Period)
{
	if(timex == 2)
	{
		TIM2->ARR = Period ;
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,Period / 2);//修改pwm 占空比
	}
	else
	if(timex == 4)
	{
		TIM4->ARR = Period ;
		__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,Period / 2);//修改pwm 占空比
	}
}