简 介
本文主要介绍如何对运行在ESP32之上的MicroPython进行定时器中断的配置。有关ESP32定时器硬件的更多详情,请看这篇帖子:ESP32 Arduino:定时器中断 的第二部分。
测试是使用集成在FireBeetle ESP32开发板中的DFRobot的ESP-WROOM-32模块上进行的。使用软件是MicroPython IDE uPyCraft。
代 码
首先需要导入machine模块,以使用与定时器中断配置和处理相关的函数。
[AppleScript] 纯文本查看 复制代码import machine
接下来,声明一个计数器,定时器中断函数将使用这个计数器告知主代码中断已发生。之所以采取这种方式,主要是因为中断运行速度非常快,不应在中断内进行函数调用(比如print)。
当中断发生时,中断处理函数只是简单地让计数器递增,我们在中断函数外边使用循环对计数器的数值进行检查,并做出相应的操作。
[AppleScript] 纯文本查看 复制代码interruptCounter = 0
[AppleScript] 纯文本查看 复制代码totalInterruptsCounter = 0
接着,新建一个Timer类的对象,这个类位于machine模块中。我们将使用这个对象对定时器中断进行配置。
该类的构造函数可接收一个数值参数(0到3),表示所要使用的定时器硬件(ESP32共有4种定时器硬件)。本例将使用定时器0。
[AppleScript] 纯文本查看 复制代码timer = machine.Timer(0)
然后,声明一个叫做handleInterrupt的中断处理函数。该函数的输入参数是当中断被触发时的一个Timer类对象