文章目录
- 前言
- 一、分频系数
- 1.1 为什么需要分频系数
- 1.2 分频系数怎么计算
- 二、如何使用定时器
- 2.1 定时器构造函数
- 2.2 定时器初始化
- 2.3 关闭定时器
- 三、定时器示例代码
- 总结
前言
在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进行开发。