跳到主要内容

【Timer】定时器

下载例程代码下载代码

定时器的作用

  • 定时器,用来计时,也可以用来产生定时任务,也可以驱动ADC或者是DAC等等.我们给定时器编写一个函数,就是计数到这个时候执行这个函数

定时器的分类

  • 定时器分为硬件定时器和软件定时器两种
    • 软件定时器就是使用软件的方式来模拟定时器。精度比较高,us级别的定时

    • 硬件定时器就是使用单片机ESP32内部的定时器。精度比较低,但是使用方便。ms级别的定时

软件定时器

  • 使用软件计时器,需要用到 ESP32 内置的库 Ticker,需要引入 #include <Ticker.h> 头文件

使用步骤

  • 创建 Ticker 对象

    Ticker ticker

  • 配置 TIcker 工作模式
    attach为周期执行

    ticker.attach(0.5, ISR, 2);

    • attach函数的参数
      • 第一个参数:定时器的周期,单位为秒,这里为0.5秒
      • 第二个参数:中断服务程序(ISR)
      • 第三个参数:中断服务程序的参数,这里为2

    once为一次执行

    ticker.once(0.5, ISR,2);

    • once函数的参数
      • 第一个参数:定时器的周期,单位为秒,这里为0.5秒
      • 第二个参数:中断服务程序(ISR)
      • 第三个参数:中断服务程序的参数,这里为2

例程

  • 周期中断

    • 使用软件定时器,每隔 0.5 秒反转小灯
 #include <Arduino.h>
#include <Ticker.h>

#define led_pin 2


// 定义定时器对象
Ticker ticker;


void toggle(int pin) {
digitalWrite(pin, !digitalRead(pin)); // 翻转LED状态
}


void setup() {
pinMode(led_pin, OUTPUT);
ticker.attach(0.5, toggle, led_pin); // 定时器周期为0.5秒,执行toggle函数,参数为led_pin
}

void loop() {

}
  • 一次中断

    • 使用软件计时器,每隔 0.5 秒翻转小灯。(翻转一次)
 #include <Arduino.h>
#include <Ticker.h>

#define led_pin 2


// 定义定时器对象
Ticker ticker;


void toggle(int pin) {
digitalWrite(pin, !digitalRead(pin)); // 翻转LED状态
}


void setup() {
pinMode(led_pin, OUTPUT);
ticker.attach(0.5, toggle, led_pin); // 定时器周期为0.5秒,执行一次toggle函数,参数为led_pin
}

void loop() {

}

硬件定时器

  • 使用硬件定时器,需要用到 ESP32 内置的库 HardwareTimer,需要引入 #include <HardwareTimer.h> 头文件