STM32中TIM定时器的使用

每个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 ++;
        
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值