【esp32】定时器使用

定时器使用的API

  • 定时器开始函数 初始化
hw_timer_t * timerBegin(uint8_t num, uint16_t divider, bool countUp);

此函数用来配置定时器 成功设置后 定时器将自动启动

  1. num 定时器编号 (0到3 对应4个硬件定时器)
  2. divider 预分频器数值(ESP32定时器基频是80M,80分频时单位是微秒)
  3. countUp 为true向上计数 false向下计数

返回值 是一个指向 hw_timer_t 结构类型的指针 如果为NULL则表明初始化失败

  • 定时器结束函数
void timerEnd(hw_timer_t *timer);

此函数用来结束定时器

  1. timer 已初始化的定时器指针
  • 定时器中断函数
void timerAttachInterrupt(hw_timer_t *timer, void (*fn)(void), bool edge);

此函数用来给定时器加上中断

  1. timer 已初始化的定时器指针
  2. (*fn)(void) 中断服务函数的函数指针
  3. edge 为true边沿触发 false电平触发
  • 定时器关闭中断函数
void timerDetachInterrupt(hw_timer_t *timer);

该函数用来关闭定时器上的中断

  1. timer 已初始化的定时器指针
  • 配置定时器报警值 和 是否重新加载
void timerAlarmWrite(hw_timer_t *timer, uint64_t alarm_value, bool autoreload);
  1. timer 已初始化的定时器指针
  2. alarm_value 计数器报警值
  3. autoreload true 重新加载 false 不加载
  • 使能定时器报警
void timerAlarmEnable(hw_timer_t *timer);
  1. timer 已初始化的定时器指针
  • 关闭定时器报警
void timerAlarmDisable(hw_timer_t *timer);
  1. 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() {}
在这里插入代码片
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值