ESP-Timer入门(基于ESP-IDF-5.4)

主要参考资料:

ESP 定时器(高分辨率定时器): https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32s3/api-reference/system/esp_timer.html

目录

ESP-Timer与FreeRTOS Timer

ESP-Timer 是 ESP-IDF 中提供的高精度定时器组件,专为精确时间控制和低功耗设计优化。它取代了传统的 FreeRTOS 定时器,在 ESP32 系统中提供更精确、更灵活的时间管理能力。

与FreeRTOS定时器比较:

API 使用

1.创建定时器

cpp 复制代码
#include "esp_timer.h"

// 定义回调函数
void timer_callback(void* arg) {
    int* counter = (int*)arg;
    (*counter)++;
    ESP_LOGI("TIMER", "Callback called %d times", *counter);
}

// 创建定时器配置
esp_timer_create_args_t timer_args = {
    .callback = &timer_callback,
    .arg = &counter,
    .name = "my_timer",
    .dispatch_method = ESP_TIMER_TASK // 或 ESP_TIMER_ISR
};

esp_timer_handle_t timer_handle;
ESP_ERROR_CHECK(esp_timer_create(&timer_args, &timer_handle));

2.启动定时器

c 复制代码
// 单次定时器 (50ms后触发)
ESP_ERROR_CHECK(esp_timer_start_once(timer_handle, 50 * 1000));

// 周期定时器 (每100ms触发)
ESP_ERROR_CHECK(esp_timer_start_periodic(timer_handle, 100 * 1000));

3.管理定时器

c 复制代码
// 停止定时器
ESP_ERROR_CHECK(esp_timer_stop(timer_handle));

// 删除定时器
ESP_ERROR_CHECK(esp_timer_delete(timer_handle));

// 获取剩余时间
int64_t remaining = esp_timer_get_next_alarm();
ESP_LOGI("TIMER", "Next alarm in %lld us", remaining);

4.时间管理

c 复制代码
// 获取精确时间戳 (微秒)
int64_t now = esp_timer_get_time();
ESP_LOGI("TIME", "Current time: %lld us", now);

// 延迟执行 (非阻塞)
esp_rom_delay_us(500); // 精确500μs延迟
相关推荐
傻童:CPU39 分钟前
C语言需要掌握的基础知识点之链表
c语言·1024程序员节
是苏浙1 小时前
零基础入门C语言之操作符详解2
c语言·开发语言
m0_748233642 小时前
单调队列【C/C++】
c语言·c++·算法·1024程序员节
小莞尔2 小时前
【51单片机】【protues仿真】基于51单片机智能温控风扇系统
c语言·单片机·嵌入式硬件·物联网·51单片机·1024程序员节
hazy1k2 小时前
51单片机基础-DS18B20温度传感器
c语言·stm32·单片机·嵌入式硬件·51单片机·1024程序员节
胜天半月子3 小时前
嵌入式开发 | C语言 | 单精度浮点数解疑--为什么规格化数中指数位E不能是E=0 或 E=255?
c语言·嵌入式c·1024程序员节·单精度浮点数范围
傻童:CPU3 小时前
C语言需要掌握的基础知识点之图
c语言·1024程序员节
傻童:CPU5 小时前
C语言需要掌握的基础知识点之矩阵
c语言·1024程序员节
小年糕是糕手6 小时前
【数据结构】队列“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法
无限进步_6 小时前
【C语言】函数指针数组:从条件分支到转移表的优雅进化
c语言·开发语言·数据结构·后端·算法·visual studio