ESP32-定时器中断
前言
前言
环境: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 0
hw_timer_t *timer = NULL;
void ARDUINO_ISR_ATTR onTimer() {
//中断操作函数
}
void setup() {
Serial.begin(115200);
// Set timer frequency to 1Mhz
timer = 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.不要有错别字和大小写错误
原文地址:https://blog.csdn.net/2301_80596293/article/details/142534647
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!