在STM32中我们对定时器的周期任务有一定的需求,但在使用过程中,需要将一些任务写到中断中,中断函数会看上去比较复杂,并且会有好多标志位。以流水灯为例,周期为1s。介绍一下我自己的一种方法。
首先创建下面这个TimCycleTaskTypedef结构体,里面的参数有Cycle,time,Achieve_Flag,void (*Task)(void),他们分别Cycle是定时器周期次数,time为现在中断跳入的次数,Achieve_Flag为一个周期完成标志位,void (*Task)(void)为任务指针函数。
然后,我们需要创建void TIMTask(TimCycleTaskTypedef *timcycletasktypedef)函数,该函数用于定时器任务的调用,主要用于计数,函数如下
基本需要的函数已经建立,现在我们需要编写的就是流水灯任务结构体创建和流水灯的任务函数创建,具体如下
最后就是实现了,定时器初始化函数在这个不在编写
定时器中断函数如下:
然后,我们需要初始化Sys_Led.Clyce这个参数,这个参数的计算方式是需要完成发任务周期时间除以定时器周期,我这个开的定时器周期为10ms,流水灯任务的周期为1s,故Sys_Led.Cycle=100,这个值的初始化,我们放在主循环之前,然后我们在主循环中调用Sys_Led.Task();就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)