ESP32 硬件定时器

ESP32 芯片包含两个硬件定时器组。

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

1. 初始化定时器 timerBegin

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

参数:

  • num : 定时器编号
  • divider:分频数
  • countUp: 是否是累加模式

返回值:
返回一个计时器结构体指针 hw_timer_t *,后续操作均需带上这个指针。 

hw_timer_t* tim1= NULL; 
tim1 = timerBegin(0,80,true); //80MHZ, ESP32主频80MHz 

2. 定时器结束 timerEnd

void timerEnd(hw_timer_t *timer)

参数:

  • *timer : 目标定时器 ( 计时器结构体指针 hw_timer_t * )

2. 配置定时器中断 timerAttachInterrupt

void timerAttachInterrupt(hw_timer_t timer, void (fn)(void), bool edge){}

参数:

  • void (*fn)(void) : 中断函数入口地址
  • 中断边沿触发 : 是否跳变沿触发中断 定时器中断触发方式有: 电平触发中断(level type) 边缘触发中断(edge type)
timerAttachInterrupt(tim1,tim1Interrupt,true); 

4. 取消定时器中断 timerDetachInterrupt

void timerDetachInterrupt(hw_timer_t *timer)

5. 定时器设置timerAlarmWrite

void timerAlarmWrite(hw_timer_t *timer, uint64_t alarm_value, bool autoreload){}

参数:

  • alarm_value : 计数上限值
  • autoreload : 是否重装载.
timerAlarmWrite(tim1, 100000, true); 

6. 使能定时器 timerAlarmEnable

void timerAlarmEnable(hw_timer_t *timer){}

7. 失能定时器 timerAlarmDisable

void timerAlarmDisable(hw_timer_t *timer)

8. 判断定时器是否启动 timerAlarmEnabled

bool timerAlarmEnabled(hw_timer_t *timer)

Serial.println(timerAlarmEnabled(tim1)); 

例子:

#include <Arduino.h>

hw_timer_t *tim1 = NULL;
int tim1_IRQ_count = 0;

void tim1Interrupt()
{
  Serial.println("haha");
  tim1_IRQ_count++;
  Serial.println(timerAlarmEnabled(tim1));
}

void setup()
{
  Serial.begin(115200);
  tim1 = timerBegin(0, 80, true);
  timerAttachInterrupt(tim1, tim1Interrupt, true);
  timerAlarmWrite(tim1, 100000, true);
  timerAlarmEnable(tim1);
}

void loop()
{
  if (tim1_IRQ_count > 10)
  {
    Serial.println("count trigger");
    tim1_IRQ_count = 0;
  }
}


- 本文内容来自网络,如有侵权,请联系本站处理。

2022-06   阅读(1342)   评论(0)
 标签: 创客 ESP32 定时器

涨知识
新冠肺炎

新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19),简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病” [1-2] ,是指2019新型冠状病毒感染导致的肺炎。

评论:
相关文章
在ESP32上实现WEB交互界面

本文主要介绍在未联网(AP热点)情况下实现WEB交互界面的CSS和javascript库。


Arduino ESP32获取芯片、RAM信息

本文介绍如何使用Arduino-ESP32库中的API函数获取ESP32的芯片、RAM信息等,并提供了一个示例程序代码。


ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


ESP32 GPIO 矩阵和引脚多路复用

ESP32 芯片有34个物理GPIO管脚。每个GPIO管脚都可用作一个通用IO,或连接一个内部的外设信号。IO_MUX ¹、RTC IO MUX 和GPIO交换矩阵用于将信号从外设传输至GPIO管脚。


ESP32Encoder:高效的ESP32旋转编码器库

ESP32Encoder库是一个利用ESP32脉冲计数器硬件外设实现高效旋转编码器读取的软件库。


适合学习物联网的几款盒子

本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。


乐动掌控

乐动掌控采用掌控板作为主控,塑胶一体式外壳,侧面和底面开具多个乐高扩展孔位,兼容乐高积木,可完成多种创意应用。


ESP32 MicroPython存储数据到闪存

在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


小鹏物联网 MicroPython 图像采集方案

本方案是一个基于ESP32-CAM + 物联网的图像采集方案。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。