没志青年
发布于 2025-07-20 / 20 阅读
0

ESP32 定时器

手册 11 、12章,605、625

ESP 定时器(高分辨率定时器) - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

通用硬件定时器 (GPTimer) - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

通用硬件定时器 = 定时器组???

系统定时器

系统定时器为全局定时器,两个 CPU 共享的。其内置两个 52 位计数器和三个 52 位比较器。

该定时器可用于生成操作系统所需的嘀嗒定时中断,也可用作普通定时器生成周期或单次中断。

通用硬件定时器 GPTimer

ESP32-S3 包含两个定时器组,即定时器组 0 和定时器组 1。每个定时器组有两个通用定时器和一个主系统看门狗定时器。

定时器结构,和 STM32 差不多:

  • 16 位预分频寄存器,2~65536

  • 54 位计数器,可递增或递减

  • 支持重装载的比较器

基本使用

(1)创建和启动定时器

gptimer_handle_t gptimer = NULL;    // 定时器句柄

gptimer_config_t timer_config = {
    .clk_src = GPTIMER_CLK_SRC_DEFAULT, // 时钟源
    .direction = GPTIMER_COUNT_UP,      // 向上计数
    .resolution_hz = 1 * 1000 * 1000,   // 频率为 1 MHz,即 1 次滴答为 1 微秒
};

ESP_ERROR_CHECK(gptimer_new_timer(&timer_config, &gptimer));  // 创建定时器实例
ESP_ERROR_CHECK(gptimer_enable(gptimer));                     // 使能定时器
ESP_ERROR_CHECK(gptimer_start(gptimer));                      // 启动定时器

(2)停止和释放定时器

gptimer_stop
gptimer_disable
gptimer_delete_timer

(3)设置/获取计数值

周期性报警

单次报警