欢迎光临散文网 会员登陆 & 注册

《二》canfestival系列教程之软件定时器分析(2)

2021-09-10 13:11 作者:GXTon_阿通  | 我要投稿


以stm32单片机为例,精讲一下代码:

上文说到,软件定时器对canfestival很重要.canfestival中大部分时间都是靠软件定时器触发的.

这里的所有软件定时器,都是依靠一个硬件定时器模拟出来的.

就以stm32单片机的timer14定时器为例,

首先要配置timer14定时器,配置成向上计数,每1us计数一次,并且开启中断.

对于硬件定时器的配置,最主要的是弄明白计数1次,消耗多少时间.也就是分配参数.

上面的例子是每1us,计数一次,它就是canfestival的最小时间单位了.

定时器的中断优先级nvic配置

中断发生后的处理函数:

在里面会调用TimeDispatch( )这里是canfestival的接口函数

TimeDispatch( )放入到中断函数里面后,它就会不断改变timer14定时器的周期,来模拟出多个软件定时.也就是每个软件定时器溢出,都会触发timer14定时器的中断.

(可以把图片保存下来看,或者全屏看:-)

TimeDispatch( )函数中,调用的两个函数是需要我们根据开发环境编写的.

这里用的是stm32的开发环境.setTimer( )getElapsedTime()

canfestival中有两个时间单位一个是us,另一个是ms.

在timerscfg.h中需要配置三个参数:

TIMEVAL_MAX  是硬件定时器最大的周期,因为我们timer14设置的是5000,所以这个参数不要超过5000.

MS_TO_TIMEVAL 是ms的计数.timer14中配置的是每1us计数一次.所以这个ms要配置成1000.系数要配置成1000.

US_TO_TIMEVAL 是us,硬件定时器timer14本身就是1us计数一次,所以这里系数是1.

TimeDispatch( )会遍历timers中的所有软件定时器,这里面timers实质上是一个数组,这个数组的上限个数为MAX_NB_TIMER.


《二》canfestival系列教程之软件定时器分析(2)的评论 (共 条)

分享到微博请遵守国家法律