📜  ESP32 timerBegin(0, cpuClock, true); - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:00:37.643000             🧑  作者: Mango

ESP32 timerBegin(0, cpuClock, true)

介绍

ESP32 timerBegin(0, cpuClock, true) 是一种用于ESP32开发板的C编程语言函数,用于初始化一个定时器并启动计时。

参数

timerBegin(0, cpuClock, true) 需要传入三个参数:

  • 0:定时器编号,ESP32开发板上有多个定时器可用,编号从0开始。
  • cpuClock:CPU时钟频率,以Hz为单位,用于计算定时器时钟频率。
  • true:此参数为布尔型,表示是否启用定时器中断。
使用

以下为使用 ESP32 timerBegin(0, cpuClock, true) 的示例代码:

#include "soc/timer_group_struct.h"
#include "soc/timer_group_reg.h"

#define TIMER_DIVIDER         80  // 80 预分频因子,用于将 CPU 时钟频率分频为定时器时钟频率。
#define TIMER_SCALE           (TIMER_BASE_CLK / TIMER_DIVIDER)  // Timer的基本时钟频率。
#define TIMER_INTERVAL0_SEC   (3.4179) // 定时器计时周期,以秒为单位。

void IRAM_ATTR onTimer()
{
    static int cnt = 0;
    cnt++;
    Serial.print("定时器触发次数: ");
    Serial.println(cnt);
}

void setup()
{
    Serial.begin(115200);
    ESP32 timerBegin(0, TIMER_SCALE, true);

    timerAttachInterrupt(0, &onTimer, true);
    timerAlarmWrite(0, TIMER_INTERVAL0_SEC * TIMER_SCALE, true);
    timerAlarmEnable(0);
}

void loop()
{

}
返回值

该函数无返回值。

注意事项
  • 要在使用 timerBegin() 函数前引入头文件 "soc/timer_group_struct.h" 和 "soc/timer_group_reg.h"。
  • 此函数的第二个参数 cpuClock 必须使用标准ESP32时钟频率或其倍数,否则会出现计时偏差。
  • 如果需要设置定时器周期,需要通过 timerAlarmWrite() 函数设置。如果需要多次触发定时器,应使用 timerAlarmEnable() 函数启用定时器。