定时器

简介

ESP32 芯片提供两组硬件定时器,每组包含两个通用硬件定时器。所有定时器均为 64 位通用定时器,包括 16 位预分频器和 64 位自动重载向上/向下计数器。

功能概述

下文介绍了配置和操作定时器的常规步骤:

  • 定时器初始化 - 启动定时器前应设置的参数,以及每个设置提供的具体功能。

  • 定时器控制 - 如何读取定时器的值,如何暂停/启动定时器以及如何改变定时器的操作方式。

  • 警报 - 如何设置和使用警报。

  • 中断- 如何使能和使用中断。

定时器初始化

两个 ESP32 定时器组中,每组都有两个定时器,两组共有四个定时器供使用。

ESP32(timer_group_t , timer_idx_t )( 定时器组,每组中的个体定时器)

首先调用 timer_init() 函数,并将 timer_config_t 结构体传递给此函数,用于定义定时器的工作方式,实现定时器初始化。特别注意以下定时器参数可设置为:

分频器: 设置定时器中计数器计数的速度, divider 的设置将用作输入的 80 MHz APB_CLK 时钟的除数。
模式: 设置计数器是递增还是递减。可通过从 timer_count_dir_t 中选取一个值,后使用 counter_dir 来选择模式。
计数器使能: 如果计数器已使能,则在调用 timer_init() 后计数器将立即开始递增/递减。您可通过从 timer_start_t 中选取一个值,后使用 counter_en 改变此行为。
报警使能: 可使用 alarm_en 设置。
自动重载: 设置计数器是否应该在定时器警报上使用 auto_reload 自动重载首个计数值,还是继续递增或递减。
中断类型: 选择定时器警报上应触发的中断类型,请设置 timer_intr_mode_t 中定义的值。

要获取定时器设置的当前值,请使用函数 timer_get_config()。

定时器控制

定时器使能后便开始计数。要使能定时器,可首先设置 counter_en 为 true,然后调用函数 timer_init(),或者直接调用函数 timer_start()。您可通过调用函数 timer_set_counter_value() 来指定定时器的首个计数值。要检查定时器的当前值,调用函数 timer_get_counter_value() 或 timer_get_counter_time_sec()。

可通过调用函数 timer_pause() 随时暂停定时器。要再次启动它,调用函数 timer_start()。

要重新配置定时器,可调用函数 timer_init(),该函数详细介绍见 定时器初始化。

除此之外,还可通过使用专有函数更改个别设置来重新配置定时器:

设置

专有函数

描述

分频器

timer_set_divider()

更改计数频率。为避免发生不可预测情况,更改分频器时应暂停定时器。如果定时器正在运行,则使用 timer_set_divider() 将其暂停并更改设置,然后重启定时器。

模式

timer_set_counter_mode()

设置计数器应递增还是递减

自动重载

timer_set_auto_reload()

设置是否应在定时器警报上重载首个计数值

警报

要设置警报,先调用函数 timer_set_alarm_value(),然后使用 timer_set_alarm() 使能警报。当调用函数 timer_init() 时,也可以在定时器初始化阶段使能警报。

警报已使能且定时器达到警报值后,根据配置,可能会出现以下两种行为:

如果先前已配置,此时将触发中断。有关如何配置中断,请参见 中断。
如 auto_reload 已使能,定时器的计数器将重新加载,从先前配置好的值开始再次计数。应使用函数 timer_set_counter_value() 预先设置该值。

注解

  • 如果已设置警报值且定时器已超过该值,则将立即触发警报。

  • 一旦触发后,警报将自动关闭,需要重新使能以再次触发。

要检查某特定的警报值,调用函数 timer_get_alarm_value()。

中断

可通过调用函数 timer_isr_register() 为特定定时器组和定时器注册中断处理程序。

调用 timer_group_intr_enable() 使能定时器组的中断程序,调用 timer_enable_intr() 使能某定时器的中断程序。调用 timer_group_intr_disable() 关闭定时器组的中断程序,调用 timer_disable_intr() 关闭某定时器的中断程序。

在中断服务程序(ISR)中处理中断时,需要明确地清除中断状态位。为此,请设置定义在 soc/esp32/include/soc/timer_group_struct.h 中的 TIMERGN.int_clr_timers.tM 结构。该结构中 N 是定时器组别编号 [0, 1],M 是定时器编号 [0, 1]。例如,要清除定时器组别 0 中定时器 1 的中断状态位,请调用以下命令:

TIMERG0.int_clr_timers.t1=1

有关如何使用中断,请参阅应用

解析:

软件学习——定时器(3)相关推荐

  1. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

  2. 工具类软件操作手册_全套广联达软件学习资料合集:教程+实例讲解+操作手册,一文搞定...

    要学习并掌握好算量软件,不仅仅需要软件知识,还需要各种造价相关知识,只有精通软件及造价知识,才能大大的提高算量的速度及准确度. 一个算量的高手掌握的不单是软件操作技术,还要掌握的是造价的基础知识,你要 ...

  3. project项目管理案例_福清公司开展Project项目管理软件学习培训活动

    Project讲解 日前,福清公司组织开展了Project项目管理软件学习培训活动.生产指挥中心.工程科技部等相关人员参加了此次培训. 实际操作练习 整体培训 培训内容首先就Project软件的相关功 ...

  4. PLECS软件学习使用(一)简单的RLC电路搭建

    PLECS软件学习使用(一)简单的RLC电路搭建 1相关操作总结: 旋转:Ctrl+R 翻转:Ctrl+F 从连线中引出线:Ctrl+鼠标左键 设置元件参数:双击元件,进行设置,若要显示参数,则在参数 ...

  5. 进度计划软件哪个好用_斑马进度计划软件学习视频-资源管理

    十一假期期间,斑马进度推出<学习之星>活动,通过系统学习教程8天帮助大家掌握斑马进度计划软件.你要悄悄拔尖,然后惊艳所有人! 以下是课程安排: 斑马进度计划免费版软件+学习视频配套资料 百 ...

  6. 项目管理工具project软件学习(六) - 设置里程碑、任务备注

    1. 里程碑设置三种方法: 1.1 工期设置为0,默认就是里程碑 1.2 双击任务名称,弹出框选择高级,下面标记为里程碑的选项勾选 1.3 添加里程碑的列 右击,插入列 然后选择里程碑,在里程碑列,选 ...

  7. xero 软件学习_使用PHP与Xero连接

    xero 软件学习 In previous posts, we demonstrated connecting to Xero using only an OAuth 2.0 library. We' ...

  8. 实现BIM的Revit软件学习资料

    实现BIM的Revit软件学习资料 一.BIM与Revit的关系 二.Revit使用方法总结 (一)快捷键 (二)一些技巧 一.BIM与Revit的关系 链接: BIM与Revit是什么关系?看完秒懂 ...

  9. 开源软件学习交流计划 (西游记项目)

    试试搞一个项目,推广开源软件的学习和交流,项目名称:开源软件学习交流计划.再弄个好玩好记的项目名字:西游记. 西游记嘛,有一个好玩的过程,主要是把西方的开源软件学习过来(当然更支持我们自己的项目,比如 ...

最新文章

  1. Python-random模块-59
  2. 查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致
  3. C++中的空类与空结构体大小
  4. 编译Android源码
  5. 「Android」 详细全面的基于vue2.0Weex接入过程(Android视角)
  6. C# 代码优化 性能优化【转】
  7. 验证码 -图形图像识别的算法。http://blog.csdn.net/xtalk2008/archive/2007/11/01/1861310.aspx...
  8. citrix android,Citrix Receiver
  9. mysql主从复制实践之单数据库多实例
  10. 最适合开发VR游戏大作的游戏引擎——Unity
  11. 题解 AT934 【完全数】
  12. 英特尔主板快捷启动键_电脑小匠电脑硬件知识科普——主板接口篇
  13. python怎么下载panda包_pandas python下载
  14. java中protected的作用域_java作用域public ,private ,protected
  15. 你的时间都去哪了?(一)数据分析指标
  16. 《三体1:地球往事》读后感
  17. 计算机组成原理_存储系统结构
  18. Java虚拟机(四)—— Java虚拟机中的对象
  19. GD32学习笔记(3)NAND Flash管理
  20. 关于牛客网代码题 数据读取问题的 小白指南

热门文章

  1. 3D建模需要什么电脑配置?什么样的电脑可以用作游戏建模?
  2. B-样条曲线:重要性质
  3. html贝塞尔曲线在线,【HTML+js+纯前端】三次方贝塞尔曲线手工拟合小工具
  4. 一步步解密微商城系统开发流程
  5. 拉依达准则去除异常数据
  6. 贪心法和动态规划法的区别
  7. 7-4 换硬币(20 分)
  8. ApacheCN 公众号文章汇总 2019.9
  9. 详解Minimax算法与α-β剪枝
  10. [蓝桥杯]Excel题