04 - Timer实验

本节课我们将学习ESP32定时器的使用,教会大家如何使用 ESP32 的定时器实现定时功能。

本节课目标:

        开启 ESP32 的定时器,并在定时器的回调函数中,翻转LED 灯的状态。

本节课内容:

  1. ESP32定时器简介
  2. machine.Timer类
  3. 硬件设计
  4. 软件设计
  5. 下载验证

一、ESP32定时器简介

ESP32 配备了多种定时器功能,其中包括通用定时器、系统定时器和看门狗定时器。在本文中,我们的焦点将集中于通用定时器的解析与介绍。

具体而言,ESP32 设计了两个硬件定时器组,分别是定时器组 0 和定时器组 1。这两个组各自包含了两个硬件通用定时器,因此,整个 ESP32 平台总共提供了四个硬件通用定时器资源。

二、machine.Timer类

machine.Timer 类,作为 machine 模块下的一个核心硬件类,专门用于配置与控制 Timer 设备。此类封装了一系列操作方法,旨在实现对 Timer 设备的高效管理和操作。Timer 设备,即硬件定时器,是一种专门设计用于处理周期性及定时性任务的装置。它通过内部集成的计数器模块,对输入的脉冲信号进行精确计数,进而实现周期性的设备控制功能。

machine.Timer 类支持用户自定义超时时间以及超时后的回调函数,这一特性极大地增强了其在时间管理方面的灵活性和实用性。此外,该类还提供了两种基本的定时器工作模式:ONE_SHOTPERIODONE_SHOT 模式允许定时器执行一次定时任务后即自动停止,而 PERIOD 模式则使得定时器能够循环不断地执行定时任务,直至被显式停止。

通过打印 machine.Timer 类的实例对象,用户可以方便地查看并验证当前 Timer 设备的配置信息,从而确保系统的稳定与可靠运行。

下面是MicroPython库的machine.Timer类链接。

class Timer – 控制硬件定时器 — MicroPython latest 文档

1. machine.Timer类的构造对象

构造对象方法如下:

class machine.Timer(id, /, ...)

使用示例:tim = machine.Timer(0)

构造函数的参数描述如下:

参数

描述

id

id是构造给定ID的Timer对象。

返回值:Timer类对象

2. machine.Timer类的方法

(1)对象初始化

方法原型如下:

Timer.init(*, mode=Timer.PERIODIC, freq=-1, period=-1, callback=None)

方法的参数描述如下:

参数

描述

mode

mode可以是以下之一:

  • Timer.ONE_SHOT- 计时器运行一次,直到配置的 period 的 period 过期。
  • Timer.PERIODIC- 计时器在配置的 频道的 frequency 进行设置。

freq

freq- 定时器频率,以 Hz 为单位。的上限 频率取决于端口。当同时给出 and 参数时,具有更高的优先级并被忽略。freqperiodfreqperiod

period

period- 计时器周期(以毫秒为单位)

callback

callback- 计时器周期到期时调用的可调用对象。 回调必须采用一个参数,该参数将传递给 Timer 对象。 应指定参数。否则为异常 将在计时器到期时发生:callbackTypeError: 'NoneType' object isn't callable

(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 秒翻转一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值