20 Star 82 Fork 22

黑胡桃实验室 BlackWalnut Labs. / Waffle NanoV1 Python API Doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.50 KB
一键复制 编辑 原始数据 按行查看 历史
HerculesHu 提交于 2021-07-21 01:40 . !38修改若干错误

定时器

概要

   本节介绍了定时器与回调函数的概念,以及如何在MicroPython中使用定时器。

什么是定时器?

  定时器可以理解为一个闹钟,设定特定时间之后执行某件事情,也可以周期的执行某件事情。

  定时器与utime模块中的sleep延时函数最大区别在于,延时函数期间,CPU就如同进入了睡眠,之后的事情只有等睡醒之后再做,这种情况我们称之为阻塞, 睡觉阻塞了cpu去完成其他的任务,必须等待CPU睡醒;而定时器是非阻塞的,在未到达定时器定时周期结束之前,CPU可以去做别的事情,等到定时器计时完毕,便会去通知CPU,CPU再去执行回调函数 (在你设定闹钟之前,你决定要在闹钟响了之后去做的事情)。

  定时器每个周期都会产生一次中断,然后调用特定的 回调函数callback, 定时器中断属于内部中断.

中断

CPU的中断分为很多种,不同的中断拥有不同的优先级别。当多个中断同时发生时,计算机按照优先级来以此处理

machine.Timer API详解

  使用import Timer导入定时器Timer模块

  再使用TAB 按键来查看Timer中所包含的内容:

>>> from machine import Timer
>>> Timer.
__del__         ONCE            PERIODIC        deinit
init            isrunning

宏定义

  下面的宏定义用于配置network,设置对应网络模式。

宏定义 含义
Timer.ONCE 计时器运行一次,直到通道的配置时间到期为止
Timer.PERIODIC 计时器以通道的已配置频率定期运行

  class Time(id)

  id:任意正整数作为ID

构造定时器

  用Timer对象的构造器函数

  示例:

>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器

函数

  在接下来的示例中, 构造id=1Timer对象来列举Timer对象的函数。

>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器

初始化

  timer.init(ticks=, type=, callback=)

  函数说明:初始化定时器Timer

  • ticks 定时器执行的周期,单位是10ms, 隔period ms 执行一次。 period取值范围: 0 < period <= 3435973836
  • type 定时器的执行模式,可以是Timer.PERIODICTimer.ONCE
  • callback: 定时器的回调函数,传入的一个参数是timer
    • 在callback函数里面传入其他参数,可以采用Lambda表达式 的方法。
    • 注意,不要在定时器回调函数里面创建变量,可以使用 全局变量 global,因为定时器每次都创建变量比较消耗内存。

  示例:

>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=200, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行

释放资源

  timer.deinit()

  函数说明:释放定时器Timer资源

  定时器使用完了记得要释放定时器资源,键盘中断并不会销毁定时器,定时器会一直产生回调函数。

>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=2000, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行
>>> timer.deinit()#释放资源

查看状态

  timer.isrunning()

  函数说明:查看定时器Timer是否在运行,返回运行状态,True正在运行,False不在运行。

  有时定时器调用回调函数时间可能比较长,或者没有回调函数,不方便判断现在定时器是否还在运行,可以采用该函数查看。

>>> from machine import Timer
>>> timer = Timer(1)#创建一个定时器
>>> timer.init(period=2000, mode=Timer.PERIODIC , callback=lambda t:print("callback"))#初始化定时器,隔2s执行回调函数打印callback,一直执行
>>> timer.isrunning()#查看定时器运行状态
True

示例

  定时打印文字

from machine import Timer
def test(args):
    print("Test")
t = Timer(0)
t.init(type=Timer.PERIODIC, callback=test, ticks=3000)
t.deinit()

  第一行导入machine模块的定时类Timer

  第二、三行创建回调函数,打印Test

  第四创建定时器0

  第五行初始化定时器

  • ticks=3000:定时器运行周期3s

  • type=Timer.PERIODIC:定时器以通道的已配置频率3s定期运行

  • callback=test:回调函数是创建的函数test

  第六行释放定时器0资源。

Python
1
https://gitee.com/blackwalnutlabs/waffle_nano_v1_python_api_document.git
git@gitee.com:blackwalnutlabs/waffle_nano_v1_python_api_document.git
blackwalnutlabs
waffle_nano_v1_python_api_document
Waffle NanoV1 Python API Doc
master

搜索帮助