ESP32定时器


前言


提示:以下是本篇文章正文内容

一、定时器

ESP32 芯片包含两个定时器组,每组有两个通用定时器。它们都是基于 16 位预分频器和 64 位自动重载功能的向上/向下计数器的 64 位通用定时器

二、定时器函数

(1)timerBegin 初始化(开启)定时器

hw_timer_t * IRAM_ATTR timerBegin(uint8_t num, uint16_t divider, bool countUp)

num : 定时器编号(0到3,对应全部4个硬件定时器)
divider: 预分频器数值(ESP32计数器基频为80M,80分频单位是微秒)
countUp: 计数器向上(true)或向下(false)计数的标志
返回一个计时器结构体指针 hw_timer_t * ,预定义一个指针接收它

hw_timer_t *timer = NULL;
timer = timerBegin(0, 80, true);

(2)timerAttachInterrupt 绑定定时器的中断处理函数

void IRAM_ATTR timerAttachInterrupt(hw_timer_t *timer, void (*fn)(void), bool edge)

timer:指向已初始化定时器的指针
(*fn)():中断服务函数的函数指针
edge:表示中断触发类型是边沿(true)还是电平(false)的标志

(3)timerAlarmWrite 指定触发定时器中断的计数器值

timerAlarmWrite(hw_timer_t *timer, uint64_t alarm_value, bool autoreload)

timer:指向已初始化定时器的指针
alarm_value: 触发中断的计数器值(1000000 us -> 1s)
autoreload:定时器在产生中断时是否重新加载的标志

(4)timerAlarmEnable 使能定时器

timerAlarmEnable(hw_timer_t *timer)
timer:指向已初始化定时器的指针

三、定时器配置步骤

1.选择定时器并设置合适分频系数和计数模式 (两组四个) timerBegin()

2.绑定中断服务函数 timerAttachInterrupt()

3.设置触发定时器中断的计数器值 timerAlarmWrite()

4.使能定时器 timerAlarmEnable()

代码示例(向串口发送1-5,1s为间隔)

#include <Arduino.h>
#include "../lib/Moter/Moter.h"

#define PMW_EN 0

int interruptCounter = 0;
hw_timer_t *timer = NULL;


// 中断服务函数,为使编译器将代码分配到IRAM内,中断处理程序应该具有 IRAM_ATTR 属性
void IRAM_ATTR TimerEvent()
{
    
    
    Serial.println(interruptCounter++);
    if (interruptCounter > 5)
    {
    
    
        interruptCounter = 1;
    }
}
void setup()
{
    
    
    Serial.begin(115200);

#if PMW_EN

    Motor_Init();

#endif

    timer = timerBegin(0, 80, true);
    timerAttachInterrupt(timer, &TimerEvent, true);
    timerAlarmWrite(timer, 1000000, true);
    timerAlarmEnable(timer); //	使能定时器
}
void loop()
{
    
    

#if PMW_EN

    PWM_SetDuty(200 * interruptCounter, 200 * interruptCounter);

#endif
}

四、VSCode添加头文件

打开c_cpp_propertise.json文件,找到includePath
在后面添加路径即可,添加到保护头文件的的文件夹即可
在这里插入图片描述
或者将整个工程以VSCode打开,从工程文件下打开,VSCode会自动配置相应的头文件

注:有时添加了头文件也会出现下标出现红线,我们记得保存一下工作区

总结

提示:这里对文章进行总结:

Guess you like

Origin blog.csdn.net/qq_53144843/article/details/121458832