stm32 通用定时器的一些概念解析-皇冠最新app版本

×
单片机 > 单片机程序设计 > 详情

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

发布时间:2024-07-29 发布时间:
|

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为时钟分割,这个简单的讲,就是定时器的数字滤波功能,设置成默认即可。


关键字:stm32  通用定时器 

『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32问题记录:这回keil编译器背锅
网站地图