ESP32学习笔记:硬件定时器

今天我们来玩儿硬件定时器。
硬件定时器概述esp32内置4个64-bit的通用定时器,每个定时器包含一个 16-bit 预分频器和一个64-bit 可自动重新加载向上/向下计数器,定时器是分为两组的,每组两个。
定时器有以下特性:
16-bit 时钟预分频器,分频系数为 2-6553664-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!

基于RISC-V加速器实现FPGA CNN异构的控制方案
什么是电气规则的检查
iPhone 12 系列的一个新的卖点是具有全新的 MagSafe 技术?
测试探针市场被国外厂商占据
探析保护家园的5种物联网技术
ESP32学习笔记:硬件定时器
区块链的具体应用有哪些
网络个人隐私泄露的三类路径
致茂电子发布太阳能电池数组I-V仿真电源
红米K40出游戏增强版啦 红米正式进军游戏手机
数据中心人工智能怎样可以做到以终为始
这就是“共享汽车”?车和家SEV量产版谍照:续航里程为80km,预计年底上市!
二代锐龙APU曝光,将于今年晚些时候发布
虹科将出席2022全球自动化和制造主题峰会
物联网时代的到来将会给我们的生活带来什么变化
万亿市场的直播电商行业,赛道格局愈发明朗
智慧农业大棚 高效节水自动化灌溉系统
英特尔Xe架构的GPU能效极高
VR智能居家动感单车,在家体验动感的乐趣
SYCLomatic使开发者自由创建可迁移的异构代码