本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
注意:
本API将在 ESP-IDF-v5.0 之后被弃用,届时你可能仍然可以使用本Timer API,但是建议迁移至新的 GPTimer API。
ESP-IDF v4.x.x 不受影响
如果不必使用硬件定时器,则建议使用软件定时器:
- [推荐] ESP-IDF 高分辨率软件定时器
#include "esp_timer.h"
。点击链接至此文章 FreeRTOS
提供的Timer API
文章目录
〇、写在前面
ESP32 硬件定时器涉及的内容较多,如果理解起来困难,可以看下一篇文章学习一下 软件定时器
本文涉及了一些FreeRTOS基础知识,有可能难理解的内容在本文有讲解。如仍有不懂可评论,可私信。
一、配置定时器
ESP32内置了两个定时器组 Timer Group
,每个定时器组都有两个64位定时器Timer
。支持向上、向下两个方向计数。支持设置警报阈值。
1、定时器初始化
定时器初始化需要通过函数timer_init
传递一个timer_config_t
结构体来完成对定时器的初始化。
函数
timer_init()
简介1、功能简介
用于初始化定时器
2、返回值
类型 名称 意义 esp_err_t ESP_OK 配置成功 同上 ESP_ERR_INVALID_ARG 参数错误 3、参数 类型 名称 意义 - - - timer_group_t timer_group 目标定时器组索引 timer_idx_t timer_index 定时器索引 timer_config_t config 配置结构体
配置结构体
timer_config_t
简介struct timer_config_t{ //定时器中断开(1)关(0) timer_alarm_t alarm_en; //定时器运行开(1)关(0) timer_start_t counter_en; //中断类型(一般不需要改动) timer_intr_mode_t intr_type; //向上计数(1)/向下计数(0) timer_count_dir_t counter_dir; //是(1)否(0)自动重装载 timer_autoreload_t auto_reload; //分频倍数 uint32_t divider; }
2、硬件定时器里的数学关系
定时器计数频率关系:
f 0 = F c l k k (1) f_{0}=\frac{F_{clk}}{k} \tag{1} f0=kFclk(1)
其中 f 0 f_{0} f0为定时器的计数频率( H z \rm Hz Hz), F c l k F_{clk} F