【Micropython ESP32】定时器Timer

举报
人才程序员 发表于 2024/03/31 16:50:27 2024/03/31
【摘要】 @TOC 前言在MicroPython中,ESP32微控制器提供了丰富的功能,其中之一是定时器(Timer)。定时器允许您在预定义的时间间隔内执行特定的任务,这对于许多应用程序都是非常有用的。本文将介绍如何使用MicroPython中的ESP32定时器(Timer)功能。 一、分频系数 1.1 为什么需要分频系数首先我们需要知道怎么算一个时钟的周期,他有下面这个公式计算:在72MHz的CPU...

@TOC


前言

在MicroPython中,ESP32微控制器提供了丰富的功能,其中之一是定时器(Timer)。定时器允许您在预定义的时间间隔内执行特定的任务,这对于许多应用程序都是非常有用的。本文将介绍如何使用MicroPython中的ESP32定时器(Timer)功能。


一、分频系数

1.1 为什么需要分频系数

首先我们需要知道怎么算一个时钟的周期,他有下面这个公式计算:
在这里插入图片描述
在72MHz的CPU中,他每一个时钟周期的频率就是
在这里插入图片描述

预分频系数一般是用在计时器中的,在计时器中,他的原理就是计数,计数到指定产生一个中断而已,
计数器寄存器为16位寄存器,他可以存储最大0xFFFF个数据,当有一个时钟过来的时候,他的计数值+1,那么我们就可以计算他的中断产生一次多少us了。当从0计数到0xFFFF时,我们可以计算出他的时间为大约910us,那如果我们1ms或者1us产生中断怎么办,现在这样就不够用了啊,这样就出现了我们的分频系数,他的原理就是在计数寄存器前面在加一个计数的,这样达到分频的效果

1.2 分频系数怎么计算

如果我们设置分频系数为1时,他会从0计数到1,再到0,到0时他发出一个时钟周期,这样输入给计数器的时钟频率就只有36MHz了,再通过计数器的原理就可以发现他的中断时间延长了,比如说我的分频系数为10,那么我们可以进行计算他一次中断的时间:
分频系数为10的时候,计数器得到的时钟频率为7.2MHz,他的周期为
在这里插入图片描述
那么一个周期为1.3889us,如果计数器为0~0xFFFF,则我们可以算出一次中断的时间为:大约91,021.5615us一次中断

二、如何使用定时器

2.1 定时器构造函数

Timer构造函数如下:

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

参数id构造给定 id 的 Timer 对象

2.2 定时器初始化

使用下面这个函数对定时器进行初始化:

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

在这里插入图片描述

2.3 关闭定时器

我们可以使用下面这个函数来关闭定时器:

Timer.deinit()

三、定时器示例代码

import machine
import time

# 定义定时器回调函数
def timer_callback(timer):
    print("定时器触发!")

# 初始化定时器
timer = machine.Timer(1)

# 设置定时器间隔为1秒,并注册回调函数
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=timer_callback)

# 让程序持续运行,观察定时器是否触发
while True:
    time.sleep(1)

在这里插入图片描述


总结

ESP32的定时器(Timer)功能为MicroPython用户提供了一种方便的方式来执行周期性任务。通过使用定时器,您可以在指定的时间间隔内执行特定的操作,从而实现定时触发的功能。这对于许多应用程序,如数据采集、定时控制和任务调度等,都是非常有用的。希望本文介绍的ESP32定时器功能能够帮助您更好地利用MicroPython进行开发。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。