定时器中断学习
计时60s
#include <Arduino.h>
int interrupt_counter=0;
hw_timer_t *timer=NULL;
// put function declarations here:
// int myFunction(int, int);
void IRAM_ATTR TimerEvent()
{
Serial.println(interrupt_counter++);
if(interrupt_counter>59)
{interrupt_counter=0;}
}
void setup() {
// put your setup code here, to run once:
// //设置波特率
Serial.begin(115200);
// timerbegin有三个参数
// 1.定时器编号,esp32有4个定时器
// 2.基频80m,0~79有80个数,相当于1us
// 3.计数器向上计数
timer=timerBegin(0,79,true);
//用于绑定定时器的中断处理函数
//1. 指向已初始化定时器的指针timer
//2. 指向处理函数的地址
//3. 表示中断触发类型是边沿(true)还是电平(false)的标志
timerAttachInterrupt(timer,&TimerEvent,true);
//触发中断
//参数1:定时器初始化的指针timer
//参数2: 计数值1000000*1us=1s
//参数3: 完成一次计数归零 true
timerAlarmWrite(timer,1000000,true);
//定时器使能
timerAlarmEnable(timer);
}
void loop() {
delay(20);
}