自学内容网 自学内容网

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 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)!