定时器

[English]

ESP 定时器分类

  • 定时器
    • 系统定时器
      • esp_timer

      • FreeRTOS Tick

    • 通用定时器
      • 独立硬件定时器

以下会一一介绍各类 ESP 定时器。

esp_timer

由于 ESP-IDF 编程指南里已存在 esp_timer 文档,故在此仅做一些额外补充。

esp_timer 的特点如下:

  • 时钟源为 XTAL_CLK

  • 支持从 light-sleep 唤醒后,系统定时器通过软件加载 RTC 定时器记录的睡眠时间来进行时间补偿

  • 以 ESP32 为例,ESP32 往往使用 240 MHz 的 CPU 频率运行并使用任务分发法决定 esp_timer 的最小周期,此时一次性定时器配置的超时值需要大于 20 μs,周期性定时器的超时值需要大于 50 μs

esp_timer 的回调有以下两类:

  • 任务分发法(默认):从单个高优先级 esp_timer 任务中分发定时器回调函数,此方法适用于对时序要求不高的定时器回调函数

  • 中断分发法:直接从中断处理程序分发定时器回调函数,此方法适用运行时间仅为几 μs 的简单、低延迟的定时器回调函数。优点是能确保事件和执行回调间的延迟较短,且不受其他任务影响。

配置为中断分发法的方式为:在 menuconfig 里使能 CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD

GPTimer

由于 ESP-IDF 编程指南里已存在 GPTimer 文档,故在此仅做一些额外补充。

GPTimer 的特点如下:

  • 时钟源为 XTAL_CLK && APB_CLK

  • 基于定时器组外设实现

  • 应用独享硬件资源,不易受到其他模块干扰

  • 功能更多,可以跟其他外设通过 ETM 联动(仅 ESP32-C6 等新芯片支持)

FreeRTOS Timer

由于 ESP-IDF 编程指南里已存在 FreeRTOS Timer API 说明,故在此仅做一些额外补充。

FreeRTOS Timer 的特点如下:

不同时钟对比

时钟

优点

缺点

esp_timer

  1. 精度和准确度高

  2. 使用简单

系统也在使用,应用层存在阻塞时会影响系统

GPTimer

  1. 精度和准确度最高,可用于波形生成

  2. 提供事件捕获等额外功能

使用不方便

FreeRTOS Timer

使用简单,不影响系统

  1. 最大分辨率等于 RTOS 滴答周期

  2. 定时器回调函数来自低优先级的定时器任务。 该任务可能会被其他任务抢占,导致精度和准确性下降