每个1秒,进一次定时器中断:
TIM_TimeBaseStructure.TIM_Period = 7200-1;
TIM_TimeBaseStructure.TIM_Prescaler =10000-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
这个解释清晰易懂:STM32定时器的预装载值和预分频系数怎么理解_stm32预分频系数-CSDN博客
“根据定时器时钟的频率,比如时钟的频率是72MHZ,可以理解为一秒钟STM32会自己数72M次,预分频系数就是将频率分割,比如分频系数是72,则该时钟的频率会变成72MHZ/72=1MHZ,但是在设置的时候要注意,数值应该是72-1。假定分频系数是72-1,那么频率变成1MHZ,也就意味着STM32在一秒钟会数1M次,即1us数一次。
接下来就是确定预装载值,比如需要定时1ms,由于1ms=1us*1000,那么预装载值就是1000-1;如此类推,在预分频系数确定的情况下,定时的时长就由预装载值确定了。
至于要把值减一的原因,估计是计数是从0开始,所以要减一。“
时钟分割,不明白,STM32 时钟分割TIM_ClockDivision配置及使用详细说明-CSDN博客
1.外部触发输入:这个实际用得少,就不说了
2.输入捕获:一般是测量一个信号的频率、占空比、脉宽等
3.死区时间设定:这个以BLDC中高级定时器3路互补通道输出PWM为例
然后,定时器中断要注意清除;先清除,再使能;
如果不清除,上电复位后初始化会进入一次中断;
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig( TIM2, TIM_IT_Update|TIM_IT_Trigger,ENABLE );
再接着,
TIM_Cmd(TIM2,ENABLE);
TIM_Cmd(TIM2,DISABLE);
ENABLE,计时就会慢慢加,DISABLE就会停止加,但不是清空计时,再次使能就会接着上次的计数继续加
再接着,注意在中断函数里清空定时器中断,要不然会while(1)疯狂循环几百次,芯片卡死;
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_count ++;
}
}