定时器使用的API
- 定时器开始函数 初始化
hw_timer_t * timerBegin(uint8_t num, uint16_t divider, bool countUp);
此函数用来配置定时器 成功设置后 定时器将自动启动
- num 定时器编号 (0到3 对应4个硬件定时器)
- divider 预分频器数值(ESP32定时器基频是80M,80分频时单位是微秒)
- countUp 为true向上计数 false向下计数
返回值 是一个指向 hw_timer_t 结构类型的指针 如果为NULL则表明初始化失败
- 定时器结束函数
void timerEnd(hw_timer_t *timer);
此函数用来结束定时器
- timer 已初始化的定时器指针
- 定时器中断函数
void timerAttachInterrupt(hw_timer_t *timer, void (*fn)(void), bool edge);
此函数用来给定时器加上中断
- timer 已初始化的定时器指针
- (*fn)(void) 中断服务函数的函数指针
- edge 为true边沿触发 false电平触发
- 定时器关闭中断函数
void timerDetachInterrupt(hw_timer_t *timer);
该函数用来关闭定时器上的中断
- timer 已初始化的定时器指针
- 配置定时器报警值 和 是否重新加载
void timerAlarmWrite(hw_timer_t *timer, uint64_t alarm_value, bool autoreload);
- timer 已初始化的定时器指针
- alarm_value 计数器报警值
- autoreload true 重新加载 false 不加载
- 使能定时器报警
void timerAlarmEnable(hw_timer_t *timer);
- timer 已初始化的定时器指针
- 关闭定时器报警
void timerAlarmDisable(hw_timer_t *timer);
- timer 已初始化的定时器指针
定时器使用
一般在使用定时器时 只需要配置4个函数就可以使用
#include <Arduino.h>
// 声明一个定时器变量
hw_timer_t *timer = NULL;
int interruptCount;
// 定时器中断回调函数
void IRAM_ATTR timer_event()
{
Serial.println(interruptCount++);
}
void setup()
{
Serial.begin(115200); // 配置串口
timer = timerBegin(0,80,true); // 配置定时器 这里使用的是定时器0(一共四个0123)
// 80是这个定时器的分频系数 由于定时器基频是80Mhz
// 这里设置80 就是1Mhz 就能保证定时器1us记录一次
// true表面该定时器向上计数
timerAttachInterrupt(timer,&timer_event,true); // 配置定时器的中断函数 true表示边沿触发
timerAlarmWrite(timer,1000000,true); // 设置定时器的报警值 当计时器计数值达到1000000时触发中断 // true表示重加载
timerAlarmEnable(timer); // 使能定时器报警
}
void loop() {}
在这里插入代码片