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

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.xdnf.cn/news/15325.html

相关文章:

  • 插入类排序的C语言实现
  • Java小白-设计模式
  • C#单例模式管理全局变量
  • OSPF与BGP的联动特性实验案例
  • OSPF与BGP的联动特性
  • Java设计模式之行为型模式(命令模式)
  • 单例模式:确保全局唯一实例
  • Vue文件上传实战指南
  • 【OpenGL 渲染器开发笔记】1 为什么要设计渲染器?
  • Dubbo-Admin 安装与使用指南:可视化管理 Dubbo 服务
  • 初识drag2框架,drag2注入的基本原理
  • 常用的docker命令备份
  • k8s:0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims.
  • 论文Review 3DGSSLAM GauS-SLAM: Dense RGB-D SLAM with Gaussian Surfels
  • 使用python操作文件夹
  • Hashtable 与 HashMap 的区别笔记
  • [GWCTF 2019]我有一个数据库
  • 05.判断日期是工作日还是周末
  • 改进广告投入与销售额预测分析
  • JavaSE-多态
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 算法题(174):全排列问题
  • 归并排序递归法和非递归法的简单简单介绍
  • 运放压摆率?正弦波怎么输出了三角波?
  • 数据结构 单链表(2)--单链表的实现
  • 打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比
  • 二叉树算法详解和C++代码示例
  • C++封装、多态、继承
  • RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析