本文的目的是解释如何使用Arduino内核在ESP32上配置计时器中断。
测试是在DFRobot的ESP-WROOM-32设备上进行的,该设备集成在ESP32 FireBeetle板上。
引言
本文主要解释在使用Arduino内核的ESP32
本教程将会介绍如何对定时器进行配置以周期性地产生中断,以及如何对中断进行处理。
有关外部中断的教程:ESP32 Arduino教程:外部中断 中已经见过这种计数器的用法,因为ISR应该尽可能快地运行,所以不应执行过长的操作(比如向串口写入数据)。因此,在实现中断处理代码时,最好让ISR仅对中断进行响应,然后把实际的处理(可能包含时间较长的操作)交给主循环来做。
[mw_shl_code=applescript,true]]portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;[/mw_shl_code]
设置函数
在设置函数中,首先需要打开一个串行连接,以便后面将程序结果输出到Arduino IDE串口监测器。
[mw_shl_code=applescript,true]
Serial.begin(115200);[/mw_shl_code]
然后,调用timerBegin函数以对定时器进行初始化,这个函数会返回一个指向hw_timer_t结构类型的指针,这个指针正是我们在上一节声明的定时器全局变量之一。
该函数有三个输入参数,分别是我们要使用的定时器编号(0到3,对应全部4个硬件定时器)、预分频器数值以及一个用于表示计数器向上(真)或向下(假)计数的标志。
在本例中,我们将使用第一个定时器,最后一个参数设