本节课我们将学习ESP32定时器的使用,教会大家如何使用 ESP32 的定时器实现定时功能。
本节课目标:
开启 ESP32 的定时器,并在定时器的回调函数中,翻转LED 灯的状态。
本节课内容:
- ESP32定时器简介
- machine.Timer类
- 硬件设计
- 软件设计
- 下载验证
一、ESP32定时器简介
ESP32 配备了多种定时器功能,其中包括通用定时器、系统定时器和看门狗定时器。在本文中,我们的焦点将集中于通用定时器的解析与介绍。
具体而言,ESP32 设计了两个硬件定时器组,分别是定时器组 0 和定时器组 1。这两个组各自包含了两个硬件通用定时器,因此,整个 ESP32 平台总共提供了四个硬件通用定时器资源。
二、machine.Timer类
machine.Timer
类,作为 machine
模块下的一个核心硬件类,专门用于配置与控制 Timer 设备。此类封装了一系列操作方法,旨在实现对 Timer 设备的高效管理和操作。Timer 设备,即硬件定时器,是一种专门设计用于处理周期性及定时性任务的装置。它通过内部集成的计数器模块,对输入的脉冲信号进行精确计数,进而实现周期性的设备控制功能。
machine.Timer
类支持用户自定义超时时间以及超时后的回调函数,这一特性极大地增强了其在时间管理方面的灵活性和实用性。此外,该类还提供了两种基本的定时器工作模式:ONE_SHOT
和 PERIOD
。ONE_SHOT
模式允许定时器执行一次定时任务后即自动停止,而 PERIOD
模式则使得定时器能够循环不断地执行定时任务,直至被显式停止。
通过打印 machine.Timer
类的实例对象,用户可以方便地查看并验证当前 Timer 设备的配置信息,从而确保系统的稳定与可靠运行。
下面是MicroPython库的machine.Timer类链接。
class Timer – 控制硬件定时器 — MicroPython latest 文档
1. machine.Timer类的构造对象
构造对象方法如下:
class machine.Timer(id, /, ...)
使用示例:tim = machine.Timer(0)
构造函数的参数描述如下:
参数 | 描述 |
id |
|
返回值:Timer
类对象
2. machine.Timer类的方法
(1)对象初始化
方法原型如下:
Timer.init(*, mode=Timer.PERIODIC, freq=-1, period=-1, callback=None)
方法的参数描述如下:
参数 | 描述 |
mode |
|
freq |
|
period |
|
callback |
|
(2)关闭Timer设备
方法原型如下:
Timer.deinit()
取消初始化计时器。停止计时器,并禁用计时器外围设备。
三、硬件设计
1. 例程功能
在程序启动后,将定时器的定时时间设定为1秒。当定时器达到该设定时间时,触发中断服务函数,执行翻转LED状态的操作。
2. 硬件资源
- LED 灯:GPIO2 --> LED 【高电平:亮; 低电平:灭】
- 定时器:Timer 1
3. 原理图
四、软件设计
1. 程序流程图
2. 程序
from machine import Pin
from machine import Timer
# 实例化 LED
led = Pin(2, Pin.OUT)
# Timer 实例化,定时器1
timer = Timer(1)
def BTMR_TIMEX_INT_IRQHandler(timer):
"""
定时器回调函数,用于控制 LED灯 的翻转
:param timer: 定时器 1
"""
led.value(not led.value())
# 初始化 timer
# 配置定时器 1:循环模式; 1000ms 中断; 中断回调函数 BTMR_TIMEX_INT_IRQHandler
timer.init(mode=Timer.PERIODIC, period=1000, callback=BTMR_TIMEX_INT_IRQHandler)
while True:
# 程序在此循环运行
pass
五、下载验证
开发板载的LED灯每 1 秒翻转一次。