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()
.都可以被用來失能定時器中斷;