ESP32有两组硬件计时器组,每组包含两个通用硬件计时器。这些计时器都是64位的可双向计数的计数器;

下面的步骤是典型的配置和操作定时器流程:

第一:初始化;

初始化定时器通过函数:timer_init()来进行,但是这个初始化函数要求先定义一个结构体timer_config_t,这个结构体包含的内部的变量就是定时器初始化必须的一些变量;

第一个变量:divider:APB_CLK的时钟频率是80MHz,divider就是几分频的意思;

第二个变量:MODE 计数器是双向计数的,那么用counter_dir可以定义计数方向,couter_dir中的参数timer_count_dir_t是直接决定计数方向的参数;

第三个变量是:使能定时器;这个使能操作是通过count_en的参数timer_start_t来直接操作的,使能之后就可以通过timer_init()来立即开始使用定时器;

第四个变量是:使能报警,这个是通过alarm_en来实现的;

第五个参数:自动重载;

第六个参数:中断类型;

当一个定时器设置并使能之后,就开始计数了。

timer_get_counter_value() or timer_get_counter_time_sec().这两个API均可检查实时的计数器的值是多少;

timer_set_counter_value()这个API可以设定定时器的起始值;

timer_pause(). 这个API可以随时停止定时器;

timer_start().这个API可以重新开始计时;

警告:

timer_set_alarm_value() 这个API用来设置一个报警;

timer_set_alarm() 这个API被用来使能一个报警;起始timer_init()也可以使能报警;

在报警使能的情况下,定时器到了报警器设置的值的时候,会发生如下情况:

中断被触发;

在自动重载的情况下,定时器会自动重载并从初始值或者已经定义好的初始值重新开始计数;定义初始值的函数是:timer_set_counter_value().

当一个报警已经触发过中断之后,就会自动的编程失能状态,如果你还想用的话,你的重新设置报警;

中断:

timer_isr_register().通过这个API定义指定定时器的中断函数;

timer_group_intr_enable(). 这个API被用来使能中断函数,这个使能的是一个定时器组的;

timer_enable_intr()这个API被用来使能特定的定时器的中断函数;

timer_group_intr_disable()         timer_disable_intr().都可以被用来失能定时器中断;


最新文章

  1. iptables 思维导图 (zz)
  2. bower使用记录
  3. AC日记——单词替换 1.7 21
  4. javascript高级程序设计---CSS操作
  5. 获取APK签名
  6. 在linux上使用交换文件扩展交换空间
  7. 【MySQL】MySQL索引背后的之使用策略及优化【转】
  8. PHP能得到你是从什么页面过来的,r…
  9. windows任务栏消失
  10. iOS 开发之协议-代理传值
  11. python中的缩进问题
  12. csv 数据
  13. EventBus中观察者模式的应用
  14. cf245H Queries for Number of Palindromes (manacher+dp)
  15. leetcode 3.Longest Substring Without Repeating Charcters
  16. 不将EF连接字符串写在配置文件的方法
  17. Python property,属性
  18. 前端学习之JavaScript
  19. Linux之精灵进程
  20. 文件操作 - 整体操作&文件搜索

热门文章

  1. module.exports和exports.md
  2. java反射与动态代理的理解
  3. linux中cut、printf、awk、sed命令
  4. java enum使用方法
  5. ThreadLocal终极源码剖析-一篇足矣!
  6. 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
  7. 取消Eclipse等号、分号、空格代码自动补全
  8. (后端)出现org.hibernate.NonUniqueResultException的原因即解决办法
  9. 【CSS基础】实现 div 里的内容垂直水平居中
  10. LeetCode题解Maximum Binary Tree