天天看點

esp32 Timer實作Timer功能實作

Timer功能實作

Timer主要有四個方法

timerBegin:建立

timerAttachInterrupt:中斷設定

timerAlarmWrite:時間設定

timerAlarmEnable:使能

#include <Arduino.h>

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(9600);
  //	函數名稱:timerBegin()
  //	函數功能:Timer初始化,分别有三個參數
  //	函數輸入:
  //          1. 定時器編号(0到3,對應全部4個硬體定時器)
  //          2. 預分頻器數值(ESP32計數器基頻為80M,80分頻機關是微秒)
  //          3. 計數器向上(true)或向下(false)計數的标志
  //	函數傳回:一個指向 hw_timer_t 結構類型的指針
  timer = timerBegin(0, 80, true);

  //	函數名稱:timerAttachInterrupt()
  //	函數功能:綁定定時器的中斷處理函數,分别有三個參數
  //	函數輸入:
  //          1. 指向已初始化定時器的指針(本例子:timer)
  //			    2. 中斷服務函數的函數指針
  //			    3. 表示中斷觸發類型是邊沿(true)還是電平(false)的标志
  //	函數傳回:無
  timerAttachInterrupt(timer, &TimerEvent, true);

  //	函數名稱:timerAlarmWrite()
  //	函數功能:指定觸發定時器中斷的計數器值,分别有三個參數
  //	函數輸入:
  //          1. 指向已初始化定時器的指針(本例子:timer)
  //			    2. 第二個參數是觸發中斷的計數器值(1000000 us -> 1s)
  //			    3. 定時器在産生中斷時是否重新加載的标志
  //	函數傳回:無
  timerAlarmWrite(timer, 1000000, true);
  timerAlarmEnable(timer); //	使能定時器
}

void loop() {

}
           

實作效果是不停的重複列印1-5數字

繼續閱讀