类 Timer -- 控制硬件定时器

硬件定时器处理周期和事件的时间。定时器可能是MCU和SoC中最灵活和异构的硬件类型,从一个模型到另一个模型的差别很大。 MicroPython的Timer类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基线操作,并允许特定的板定义更多的非标准行为(因此不能移植到其他板)。

请参阅有关Timer回调的 重要约束

注解

内存不能在irq处理程序(中断)中分配,因此处理程序中引发的异常不会提供太多信息。 了解 micropython.alloc_emergency_exception_buf() 如何解决此限制。

构建对象

class machine.Timer(id, ...)

构造给定id的新计时器对象。

  • id - 任意正整数

方法

Timer.init(*, mode=Timer.PERIODIC, period=-1, callback=None)
  • mode - 定时器模式,可以是以下之一:

    • Timer.ONE_SHOT - 计时器运行一次,直到配置完毕通道的期限到期。
    • Timer.PERIODIC - 定时器以通道的配置频率定期运行。
  • period - 定时器执行的周期,单位是ms, 隔period ms 执行一次。 period取值范围: 0 < period <= 3435973836

  • callback - 定时器的回调函数

初始化计时器,示例:

tim.init(period=100)                         # periodic with 100ms period
tim.init(mode=Timer.ONE_SHOT, period=1000)   # one shot firing after 1000ms
Timer.value()

获取并返回计时器当前计数值。

value = tim.value()
print(value)
Timer.deinit()

取消定时器的初始化。停止计时器,并禁用计时器外围设备。

常数

Timer.ONE_SHOT
Timer.PERIODIC
定时器控制LED闪烁
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# fork by http://www.1zlab.com/wiki/micropython-esp32/timer/

from machine import Timer, Pin
import utime


def toggle_led(led_pin):
    '''
    LED状态反转
    '''
    led_pin.value(not led_pin.value())


def led_blink_timed(timer, led_pin, freq=10):
    '''
    led 按照特定的频率进行闪烁
    LED闪烁周期 = 1000ms / 频率
    状态变换间隔(period) = LED闪烁周期/ 2 
    '''
    # 计算状态变换间隔时间 ms
    period = int(0.5 * 1000 / freq)
    # 初始化定时器
    # 这里回调是使用了lambada表达式,因为回调函数需要传入led_pin
    timer.init(period=period, mode=Timer.PERIODIC, callback=lambda t: toggle_led(led_pin))


# 声明引脚 D2 作为LED的引脚
led_pin = Pin(2, Pin.OUT)
timer = Timer(1)  # 创建定时器对象
led_blink_timed(timer, led_pin, freq=20)