STM32 通用定时器的一些概念解析

41 篇文章 15 订阅

STM32一共有8个定时器,其中定TIM1和TIM8为高级控制定时器,除了具有通用定时器的功能外,还兼具控制功能,不仅能够输出PWM还可以采集编码器,驱动各种电机的功能。而基本定时器TIM6和TIM7一般不用作普通定时器,一般会给别的定时器提供基准时钟信号。

对于通用定时器TIM2~TIM5,基本的功能就不描述了,主要是看这些通用定时器如何使用:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

       
      TIM_DeInit(TIM2);                                           //重新将Timer设置为缺省值
       
      TIM_InternalClockConfig(TIM2);                              //采用内部时钟给TIM2提供时钟源      
      TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;            //预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2kHz       
      TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //设置时钟分割      
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式       
      TIM_TimeBaseStructure.TIM_Period = 2000 - 1;           //设置计数溢出大小,每计2000个数就产生一个更新事件
      TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);         //将配置应用到TIM2中
      TIM_ClearFlag(TIM2, TIM_FLAG_Update);                  //清除溢出中断标志  
       
      TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);                //开启TIM2的中断

  这里要分析一下几个概念,也是理解定时器的功能的核心概念,通用定时器有些类似于操作系统的定时器节拍,可以在定时器采用的时钟源的基础上再进行分频,然后再设定溢出大小,进而实现定时的功能,当然自动重载功能更不再话下。

预分频的功能是使定时器在APB时钟的基础上再一次分频,使其独立的运行。就像上述代码中举例,预分频系数设定为36000-1,则表示该定时器的 时钟频率就变成了72MHz/36000 = 2KHz,而“计数溢出大小”可以理解为自动装载数值,表示每隔x个计数溢出一次,可以产生1次中断,当然这个频率是经过预分频后的频率。

所以从上述的分析可知,定时器的定时时间计算为:

                           Tout = (TIM_Period+1)*(TIM_Prescaler+1)/72000000

在本程序案例中:Tout= 2000*36000/72000000=1s

需要注意的是,公式中的72000000的使用,是因为该定时器采用的时钟源为72MHz,如果配置成别的时钟源,则相应公式也应该改变。

另外TIM_ClockDivision为时钟分割,这个简单的讲,就是定时器的数字滤波功能,设置成默认即可。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值