STM32工作笔记0084---UCOSIII软件定时器

技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152

STM32工作笔记0084---UCOSIII软件定时器_第1张图片

STM32工作笔记0084---UCOSIII软件定时器_第2张图片

STM32工作笔记0084---UCOSIII软件定时器_第3张图片

STM32工作笔记0084---UCOSIII软件定时器_第4张图片

这里定时器就是倒数,倒数完以后,执行一个回调函数

然后这里有时间分辨率的概念

比如这里我们定义了这个定时器从10开始,那么时钟频率是100ms,那么这里的100就好像是步长,

那么10*100 这里就是 1s=1000ms

这里默认设置为100hz,就是10ms

STM32工作笔记0084---UCOSIII软件定时器_第5张图片

这里还要注意,这个时钟节拍如果是5的话,那么时钟分辨率一定要设置是

5的整数倍.

去代码看看这个宏:

STM32工作笔记0084---UCOSIII软件定时器_第6张图片

要使用软件定时器,还需要

STM32工作笔记0084---UCOSIII软件定时器_第7张图片

把这个宏设置为1,进行使能.  

一些注意的

STM32工作笔记0084---UCOSIII软件定时器_第8张图片

STM32工作笔记0084---UCOSIII软件定时器_第9张图片

STM32工作笔记0084---UCOSIII软件定时器_第10张图片

代码在下面这个文件中.

STM32工作笔记0084---UCOSIII软件定时器_第11张图片

STM32工作笔记0084---UCOSIII软件定时器_第12张图片

可以看到这些函数都有对应的参数,说明和错误说明.

然后先看创建定时器:

STM32工作笔记0084---UCOSIII软件定时器_第13张图片

STM32工作笔记0084---UCOSIII软件定时器_第14张图片

STM32工作笔记0084---UCOSIII软件定时器_第15张图片

先去看这个OSTmrCreate()

的第一个参数OS_TMR,进去看看

STM32工作笔记0084---UCOSIII软件定时器_第16张图片

这个是定时器的一些参数.

接下来注意,使用定时器的时候

STM32工作笔记0084---UCOSIII软件定时器_第17张图片

首先定义一下

然后 ,创建的时候,作为参数传入.

STM32工作笔记0084---UCOSIII软件定时器_第18张图片

然后再去看看:

STM32工作笔记0084---UCOSIII软件定时器_第19张图片

这里CPU_CHAR 这个是定时器的名称.

然后OS_TICK DLY这是第一次延时的时候需要花的时间

然后PERIOD这个,以后每次这个时间分辨率,也就是以后每次所需要的时间.

倒计数一次需要的时间.

然后再看这个OS_OPT这个选项.

STM32工作笔记0084---UCOSIII软件定时器_第20张图片

这个选项有两个

OS_OPT_TMR_ONE_SHOT是 单次定时器.

OS_OPT_TMR_PERIODIC这个是周期定时器.

STM32工作笔记0084---UCOSIII软件定时器_第21张图片

这个OS_TMR_CALLBACK_PTR这个是回调函数.

STM32工作笔记0084---UCOSIII软件定时器_第22张图片

STM32工作笔记0084---UCOSIII软件定时器_第23张图片

这里,这个p_callback_arg是回调函数的参数,然后

p_err这个是 OS_ERR这个是 错误信息

STM32工作笔记0084---UCOSIII软件定时器_第24张图片

然后就是这个开启定时器的函数,这个p_tmr这个是

开启定时器,然后

p_err这个是错误码

STM32工作笔记0084---UCOSIII软件定时器_第25张图片

然后这个是停止定时器的函数.

第一个参数是定时器

第二个是选项.

STM32工作笔记0084---UCOSIII软件定时器_第26张图片

可以看看上面,这个选项有三个参数

第一个 OS_OPT_TMR_NONE 这个是 也就是停止定时器的时候,什么都不做

然后第二个:

OS_OPT_TMR_CALLBACK 这个就是去调用回调函数,

也就是比如正常情况下,我们从100倒计时到0的时候,才会去回调函数,但是,比如我们

定时器执行到50的时候,我们就调用这个方法,强制进行停止定时器了,那么这个时候

如果这里我们选项设置了,OS_OPT_TMR_CALLBACK 虽然没有定时到0,他也会去

调用一次回调函数.

STM32工作笔记0084---UCOSIII软件定时器_第27张图片

然后这里,p_callback_arg是调用这个回调函数的时候,同时传入一个参数.

这个一般很少用.

然后

最后一个是错误码

STM32工作笔记0084---UCOSIII软件定时器_第28张图片

咱们说可以通过这里OS_OPT设置,定时器的定时模式

这里如果设置为单次定时器的话. 

STM32工作笔记0084---UCOSIII软件定时器_第29张图片

可以看到从OSTmrCreate()开始创建,定时器,然后直到OSTmrStart(),

这函数调用的时候,就开始,进行定时倒数dly个节拍数,然后

一直到定时结束的时候,调用回调函数

这样就执行一次就完了.

STM32工作笔记0084---UCOSIII软件定时器_第30张图片

虽然单次定时器,这里

调用回调函数的时候只调用一次就结束了,但是咱们可以多次调用这个单次定时器,这样就可以实现

多次调用回调函数.

STM32工作笔记0084---UCOSIII软件定时器_第31张图片

然后:

周期定时器,其实可以这样,

就是说,当OSTmrCreate(),这个函数调用,创建定时器,然后

OSTmrStart调用的时候,开始倒计数,这里不用倒计数到0,再去调用回调函数,这里

可以让他倒计数到某个值以后,就可以去调用回调函数.

这样可以周期的执行多次回调函数.

再去看看周期模式定时器:

STM32工作笔记0084---UCOSIII软件定时器_第32张图片

周期模式有两种定时器,第一种,就是没有初始延迟的.

也就是dly是0,这个时候,每个周期是period,都是倒数到0,去回调函数,不停的这样执行.

STM32工作笔记0084---UCOSIII软件定时器_第33张图片

这里看一下代码,

这里要知道OS_TICK DLY这个是,设置的第一个周期,倒数的时钟节拍数

OS_TICK period这个是,第二个周期以及以后倒数用到的时钟节拍数

如果这里第一次dly,这个周期设置为0,那么这个就是无初始延迟周期定时器,那么

每一次都会倒数period个时钟节拍,然后调用回调函数.

 

如果有初始延迟的话,就是第一个dly参数设置比如100,第二个period设置50

那么第一次倒数100到0 的时候会调用回调函数 

然后从第二次开始从50倒数到0的时候,会调用回调函数.

STM32工作笔记0084---UCOSIII软件定时器_第34张图片

知道了这些基础知识以后来做个试验:

STM32工作笔记0084---UCOSIII软件定时器_第35张图片

首先把OS_CFG_TMR_EN设置为1,使能开启定时器.

STM32工作笔记0084---UCOSIII软件定时器_第36张图片

然后这里

STM32工作笔记0084---UCOSIII软件定时器_第37张图片

再去定义两个任务.

STM32工作笔记0084---UCOSIII软件定时器_第38张图片

然后再去定义两个定时器,那么

再去定义两个定时器的回调函数,然后可以看到

p_tmr,p_arg这两个参数,一个是定时器,一个是回调函数的参数.

STM32工作笔记0084---UCOSIII软件定时器_第39张图片

然后再去看main.c这个main函数,可以看到

做一些初始化,然后用LCD去画

STM32工作笔记0084---UCOSIII软件定时器_第40张图片

一个屏幕,上面两个框,用LCD画的,

左边的用定时器1来控制,右边的用定时器2来控制.

STM32工作笔记0084---UCOSIII软件定时器_第41张图片

然后下面再去创建这开始任务,start_task

然后去看看这开始任务

STM32工作笔记0084---UCOSIII软件定时器_第42张图片

首先这任务创建了两个定时器,

可以看到定时器1是周期模式,然后dly是20,period是100,也就是第一次倒数20就调用回调函数,

第二次倒数100再去调用回调函数

第二个定时器可以看到,dly是200,这里period是0,这个是个单次定时器,

倒数200以后,执行回调函数,然后就完了.

STM32工作笔记0084---UCOSIII软件定时器_第43张图片

然后定义了任务一,这个时候

去task1_task去看看

STM32工作笔记0084---UCOSIII软件定时器_第44张图片

然后看看,定时器的回调函数

可以看到定时器1,不停的显示执行的次数,然后同时,变换颜色

然后定时器2,只执行一次,也是显示次数和填充颜色.

下载到开发版去看看

STM32工作笔记0084---UCOSIII软件定时器_第45张图片

刚启动是嘿嘿,画了两个区域定时器1,定时器2.

然后

STM32工作笔记0084---UCOSIII软件定时器_第46张图片

按下WKUP的时候,打开定时器以,可以看到左侧的定时器1开始有颜色变化

然后按下key0的时候,在任务1里开启了定时器2

然后可以看到,定时器2控制的区域也亮了.

STM32工作笔记0084---UCOSIII软件定时器_第47张图片

STM32工作笔记0084---UCOSIII软件定时器_第48张图片

可以看到,定时器2运行一次就不运行了.如果想要运行,需要按多次,然后

按下key1,就都停止了

然后再去看一下串口.

STM32工作笔记0084---UCOSIII软件定时器_第49张图片

可以看到效果.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(硬件嵌入式)