二十五,ESP32 使用定时器中断

一,介绍

blinky演示中,我们使用delay()函数使LED闪烁。在本演示中,我们将使用Timer(这是硬件定时器)来复制delay()函数。使用Timer我们可以安排何时需要启动任务和重复。应用于此演示,当Timer超时时,我们将每1秒更改LED的当前状态(ON至OFF至ON)。

二,硬件

  • ESP32开发板
  • 一个红色LED

三,电路图

连接:

[ESP32 IO18和ESP32 GND到LED] 

二十五,ESP32 使用定时器中断

四,代码设计

为了使用Timer,我们将使用以下功能:

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

+ num:是Timer的顺序。我们只有4个定时器,所以订单可以是0,1,2,3。

+ divider:它是一个预分频器。要制作1秒调度器,我们将使用分频器值为80. ESP32主时钟为80MHZ,因此每个滴答将采用T = 1 /(80MHZ / 80)= 1微秒。我们需要1000000个刻度1秒。

+countUp:如果为true,则计时器将计数,反之亦然。

隐藏内容,您需要满足以下条件方可查看
End

 

/* 创建硬件定时器 */
hw_timer_t * timer = NULL;

/* LED 引脚 */
int led = 18;
/* LED 状态 */
volatile byte state = LOW;

void IRAM_ATTR onTimer(){
  state = !state;
  digitalWrite(led, state);
}

void setup() {
  Serial.begin(115200);

  pinMode(led, OUTPUT);

  
  /*  1/(80MHZ/80) = 1us  */
  timer = timerBegin(0, 80, true);

  /* 将onTimer函数附加到我们的计时器 */
  timerAttachInterrupt(timer, &onTimer, true);

  /* *设置闹钟每秒调用onTimer函数1 tick为1us   => 1秒为1000000us * / 
  / *重复闹钟(第三个参数)*/
 
  timerAlarmWrite(timer, 1000000, true);

  /* 启动警报*/
  timerAlarmEnable(timer);
  Serial.println("start timer");
}

void loop() {

}

人已赞赏
基础入门

二十四,ESP32 条件运算符

2018-10-4 13:01:50

基础入门

二十六,ESP32 使用事件组同步多个任务-广播事件

2018-10-21 8:45:15

8 条回复 A文章作者 M管理员
  1. G观摩学习

  2. 学习

  3. 辛苦辛苦!

  4. 學習了,謝謝

  5. 学习楼主!

  6. 66666666666666666666666666

  7. 辛苦了

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索