ESP32-定时器中断
前言
一、关于ESP32定时器常用的代码
1.#include
2.#include
3.#include
4.总结
二、可以使用的代码
1.代码
2.代码介绍
总结
前言
环境:Arduino
芯片:ESP32-WROOM-DA Module
更新时间:2024-09-25
一、关于ESP32定时器常用的代码
资料网上很多,我这里不在赘述,但是我要说下网上常见的代码,但是我今天行不同的代码.这应该是版本更新的问题.如果哪位大佬知道什么原因,欢迎在评论区说出来.谢谢
1.#include <Arduino.h>
代码如下:
#include <Arduino.h>hw_timer_t *tim1 = NULL;
int tim1_IRQ_count = 0;void tim1Interrupt()//中断操作函数
{Serial.println("haha");tim1_IRQ_count++;Serial.println(timerAlarmEnabled(tim1));
}void setup()//初始化函数
{Serial.begin(115200);tim1 = timerBegin(0, 80, true);timerAttachInterrupt(tim1, tim1Interrupt, true);timerAlarmWrite(tim1, 100000, true);timerAlarmEnable(tim1);
}void loop()//正常的循环函数
{if (tim1_IRQ_count > 10){Serial.println("count trigger");tim1_IRQ_count = 0;}
}
这个我今天尝试也不可以,但是网上关于这个代码的资料和视频都挺多.而且也是没问题的.但是我自己尝试就会报错,报错信息:
too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'
所以我尝试失败了.
2.#include <Timer.h>
代码和上面一样,但是头文件换成了#include <Timer.h>,我尝试了也不可以
报错信息:
too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'
3.#include <MsTimer2.h>
代码如下:
//定时器库的 头文件
#include <MsTimer2.h>
//中断处理函数,改变灯的状态
void flash()
{ static boolean output = HIGH;digitalWrite(13, output);output = !output;
}
void setup()
{pinMode(13, OUTPUT); // 中断设置函数,每 500ms 进入一次中断MsTimer2::set(500, flash);//开始计时MsTimer2::start();
}void loop(){}
这也是我在网上找到的代码,但是尝试后也不可以
报错信息:
c:\Users\123\Documents\Arduino\libraries\MsTimer2/MsTimer2.h:9:2: error: #error MsTimer2 library only works on AVR architecture 9 | #error MsTimer2 library only works on AVR architecture
4.总结
具体为什么不能实现,因为精力问题没去深究.初步怀疑是版本更新的问题,应为ESP32Arduino版本不兼容现象很严重.但是这确实是网上较为流行的几种软件定时器的设置方式.大家可以尝试下
二、可以使用的代码
1.代码
#define BTN_STOP_ALARM 0hw_timer_t *timer = NULL;void ARDUINO_ISR_ATTR onTimer() {//中断操作函数
}void setup() {Serial.begin(115200);// Set timer frequency to 1Mhztimer = timerBegin(1000000);// Attach onTimer function to our timer.timerAttachInterrupt(timer, &onTimer);// Set alarm to call onTimer function every second (value in microseconds).// Repeat the alarm (third parameter) with unlimited count = 0 (fourth parameter).timerAlarm(timer, 1000000, true, 0);
}void loop() {
}
2.代码介绍
1.代码内容为定时1S
2.timerAttachInterrupt(timer, &onTimer);,其中第二个参数需要带取地址符号,且地址是中断操作函数名
3.这是官方例程,在arduino的timer文件内,大家相关例程还是尽量从官方例程查找.符合当前版本且有效.
总结
关于ESP的定时器就这么多,主要说几点注意事项
1.版本不兼容情况严重
2.尽量多看官方例程
3.不要有错别字和大小写错误