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()
.都可以被用来失能定时器中断;