当前位置: 首页 > news >正文

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
  • API 使用
    • 1.创建定时器
    • 2.启动定时器
    • 3.管理定时器
    • 4.时间管理

ESP-Timer与FreeRTOS Timer

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

与FreeRTOS定时器比较:
在这里插入图片描述

API 使用

1.创建定时器

#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.启动定时器

// 单次定时器 (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.管理定时器

// 停止定时器
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.时间管理

// 获取精确时间戳 (微秒)
int64_t now = esp_timer_get_time();
ESP_LOGI("TIME", "Current time: %lld us", now);// 延迟执行 (非阻塞)
esp_rom_delay_us(500); // 精确500μs延迟
http://www.dtcms.com/a/276934.html

相关文章:

  • JVM:内存、类加载与垃圾回收
  • 每天一个前端小知识 Day 30 - 前端文件处理与浏览器存储机制实践
  • [Rust 基础课程]选一个合适的 Rust 编辑器
  • 通用定时器GPT
  • 输入npm install后发生了什么
  • # 通过wifi共享打印机只有手动翻页正反打印没有自动翻页正反打印,而通过网线连接的主机电脑可以自动翻页正反打印
  • OneCode3.0 VFS分布式文件管理API速查手册
  • Codeforces Round 855 (Div. 3)
  • 【iOS】方法与消息底层分析
  • 动物世界一语乾坤韵芳华 人工智能应用大学毕业论文 -仙界AI——仙盟创梦IDE
  • Docker Compose文件内容解释
  • 鸿蒙选择本地视频文件,并获取首帧预览图
  • 14.ResourceMangaer启动解析
  • 【java】AI内容用SSE流式输出
  • 【读书笔记】《C++ Software Design》第七章:Bridge、Prototype 与 External Polymorphism
  • 数据库3.0
  • IPC框架
  • DAY01:【ML 第一弹】机器学习概述
  • php生成二维码
  • 15.手动实现BatchNorm(BN)
  • Spring Boot中的路径变量
  • JavaEE Tomcat
  • AI大模型计数能力的深度剖析:从理论缺陷到技术改进
  • 傅里叶变换中相位作用
  • 并查集 UnionFind Test01
  • 字符串问题(哈希表解决)
  • linux:进程详解(2)
  • Java结构型模式---享元模式
  • 代码随想录|图论|14有向图的完全可达性
  • JavaScript加强篇——第八章 高效渲染与正则表达式