目录
本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。
先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获
我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!
一、前言
一日不见如隔三秋,距离发布上篇博客
又是一种新的外设之ADC模数转换,现在我们可以采集模拟量数据了
已然过去了半个月,最近事情比较多,没有时间写博客,今天抽出一点时间写一篇有关Air720SL定时器的使用方法
- 那么什么是定时器呢?
定时器通俗的讲就相当于一个闹钟。
我们的手机里面都有闹钟,每天早上负责叫醒我们上班不要迟到。我们只要在手机里面设置好时间,然后可以按需选择每天都响,或者选择只响一次。作用是打断正在做的事(睡觉)。
在单片机系统中也是有定时器的。
而 定时器又分为两种,分别是硬件定时器和软件定时器
不管是51系列、stm32系列、avr系列、亦或是其他的单片机,它们在裸机编程上都是拥有硬件定时器的,一般硬件定时器数量有几个到十几个不等,占用的是硬件资源,
- 硬件定时器:一般硬件定时器集成在CPU的内部,有的可以使用外置的硬件定时器芯片,其使用的时基是系统内部的高速时钟源经过分频得到的,高速时钟源又是由外部晶振倍频得到,精度非常高,但是依赖硬件,能使用的数量有限
如果涉及到了操作系统编程,软件定时器那就必不可少。
- 软件定时器:一般软件定时器都是利用的是操作系统的延时阻塞性,在定时器启动和触发时记录下当前的系统时间,每隔一个时间片去查询下有没有到指定的定时时间,有的话就触发软件回调,精度相对硬件定时器要差得多,理论上是没有使用数量限制的,内存有多大,定时器就可以有多少
我翻过Air720SL的硬件手册和API手册好像是没有看到有关硬件定时器的说明。
我没看到不代表没有,只是我不知道
,这里我就不多说了,本片博客主要是讲Air720SL模组Luat二次开发的软件定时器怎么使用
二、了解软件API
Luat官方给出的定时器相关API是包含在sys驱动库文件下的。也就是说想要使用软件定时器那就必须要先
require "sys"
。
在4G模块上只能选择LuaTask框架
但是在2G模块上,有另外一个选择,官方推荐的是使用LuaTask。如果用户使用的是第一版旧版本驱动库,是不能使用本篇博客所说的软件定时器的
接下来我会依次对Luat的软件定时器库做相应的讲解
-
sys.timerStart(timer0_Task, 15000)
–开启一个定时器,这个定时器只会触发一次,分别传入定时回调函数和定时时间,就可以启用定时器 time1 = sys.timerLoopStart(timer_Loop_Task, 2000)
–开启一个循环定时器,开启成功会返回定时器句柄,可用于关闭定时器sys.timerStop(time1)
–使用time1的ID关闭time1,关闭某一个定时器sys.timerStopAll(timer_Loop_Task)
–timerStopAll关闭回调函数绑定的所有定时器
三、编写测试程序
我这里就直接在main函数里面创建一个单次定时器,再创建四个循环定时器共用一个回调函数
1 | local function user_main() |
最后在定时器循环回调函数中,使用timerStop和 timerStopAll 进行分批关闭定时器
1 | function timer_Loop_Task(time_num) |
四、下载完整的代码到Air720Sl开发板
这里我们直接贴出全部代码
1 | --必须在这个位置定义PROJECT和VERSION变量 |
下载程序后,打开Trace监视
1 | [2020-03-05 13:47:05.074]: [I]-[timer_Loop_Task当前的时间戳是:] 1 1388505608 |
- 发现timer0
[2020-03-05 13:47:13.805]: [I]-[timer0_Task当前的时间戳是:] 1388505617
仅出现了一次,和程序里面写的一样,单次运行
- 在此处出现关闭id为1的定时器提示,ID1便停止输出,验证了
timerStop
正常执行
- 在最后出现关闭所有定时器的提示
[2020-03-05 13:47:30.956]: [I]-[timerStopAll closes all timers bound to the callback function]
,后面便停止输出,验证了timerStopAll
执行正确
不会下载的点击这里,进去查看我的第二篇博文
2、Air720SL模块Luat开发:第一个Luat的Hello World
里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束