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數字