"); //-->
今天我们来玩儿硬件定时器。
硬件定时器概述ESP32内置4个64-bit的通用定时器,每个定时器包含一个 16-bit 预分频器和一个 64-bit 可自动重新加载向上/向下计数器,定时器是分为两组的,每组两个。
定时器有以下特性:
16-bit 时钟预分频器,分频系数为 2-65536
64-bit 时基计数器
可配置的向上/向下时基计数器:增加或减少
暂停和恢复时基计数器
报警时自动重新加载
当报警值溢出/低于保护值时报警
软件控制的即时重新加载
电平触发中断和边沿触发中断
每个定时器以APB_CLK(80MHz)作为基础时钟,通过预分频器(16-bit)进行分频后,产生最终的时钟信号,每过一个周期,计数器会向上加一或者向下减一,计数器支持自动重新加载和软件即时重新加载,计数器达到软件设定值时会触发报警事件。
使用定时器,可以按照一定的频率自动的重复执行我们需要的任务,本示例我们简单演示一个LED灯在定时器的控制下闪烁的案例。
硬件SDA硬件连接很简单,这里接到IO4

初始化定时器
定时器使用前需要初始化,第一个参数为使用哪个定时器,这里有4个定时器,所以参数可为0,1,2,3;第二个参数为预分频数,定时器时钟为80MHz,如果我们这里设置为80,那么每个计数周期就是1us;第三个参数为是否向上计数,true为向上,反之亦然。
hw_timer_t * timerBegin(uint8_t timer, uint16_t divider, bool countUp);
设置定时器中断回调函数
第一个参数为使用哪个定时器;第二个参数为定时器超时,中断的回调函数;第三个参数,如果为true,则报警产生边缘类型中断。
void timerAttachInterrupt(hw_timer_t *timer, void (*fn)(void), bool edge);
设置定时器的定时值
第一个参数为使用哪个定时器;第二个参数为定时器的定时值,如果为1000000,每个计数周期为1us,定时时间就是1秒;第三个参数为是否自动重载,选择true,在定时时间到达后会重复计时。
void timerAlarmWrite(hw_timer_t *timer, uint64_t interruptAt, bool autoreload);
启动定时器
启动定时器后,将开始计时。
bool timerAlarmEnabled(hw_timer_t *timer);
定时器还有其它函数,都在库文件中,大家可以在下面两个文件中找到相关源码。
esp32-hal-timer.h
esp32-hal-timer.c
完整程序
这里我们用一个例子来演示一下,定时器计时周期设置为1秒,在中断函数中控制指示灯以1秒为周期闪烁。
#define LED_GPIO 4/* 创建硬件定时器 */hw_timer_t * timer = NULL;/* LED 状态 */byte led_state = LOW;
void IRAM_ATTR Timer0_Interrupt(){
led_state = !led_state;
digitalWrite(LED_GPIO, led_state);
}
void setup() {
Serial.begin(115200);
pinMode(LED_GPIO, OUTPUT);
/* 使用定时器0,1/(80MHZ/80) = 1us ,周期为1us */
timer = timerBegin(0, 80, true);
/* 中断回调函数为Timer0_Interrupt */
timerAttachInterrupt(timer, &Timer0_Interrupt, true);
/* 计数Count为1000000,也就是1秒中断一次,重复计数 */
timerAlarmWrite(timer, 1000000, true);
/* 启动定时器*/
timerAlarmEnable(timer);
Serial.println("timer0 start");
}
void loop() {
}实验效果:
示波器观察:

定时器使用比较简单,当然,在一些不是特别精准的场合,使用一个硬件定时器,我们也可以创建软件定时器,这样就可以定义很多个不同的定时任务了,这个后面遇到案例了我们再展开讨论。
感谢大家,关于ESP32的学习,希望大家Enjoy!
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
相关推荐
2025年最新无线物联网开发套件
美国对运往中国的英伟达H200 AI芯片征收25%的关税
ICM7212AM 4位并行显示/译码/驱动器(硬件译码)构成的8位静态LED显示器电路
硬件为什么总背锅
MP3硬件电路原理图01
据报道,OpenAI将首笔AI硬件订单从中国的Luxshare转移给富士康
OpenAI发力机器人与AI设备,被爆寻找美国供应商
单片机硬件软件及其应用讲座
用C/C++语言开发大规模FPGA
硬件工程師手冊
TI的硬件和软件芯片集解决方案
新思科技:硬件再度成为行业核心
LED流动显示电子钟硬件电路
嵌入式设计仍然令人恼火吗?(gulf转)
Fuji PLC MICREX-SX SPB用户手册(硬件篇)1
充电器硬件框罔
构建节能AI加速器的硬件策略有哪些?
库克被爆出存在健康问题,硬件出身技术大佬或将成为苹果接班人
使用SST89C58控制单片电子硬盘的硬件电路
想要避免发生灾难,就用MPLAB® SiC电源仿真器!
设计和开发实时系统
人工智能模型的增长超过了硬件的改进
Gartner:信息技术硬件方面投资应慎重
消息称飞书将推出首款硬件,与安克协作打造“AI录音豆”
Fuji PLC MICREX-SX SPB用户手册(硬件篇)
《商业周刊》:IBM强力挺进服务,硬件时代正在终结?