esp32定时器一共有2组,每组有两个,每个定时器都是64位的。每一组还会包含一个看门狗定时器。结构如下:
定时器
定时器组0定时器0
定时器1
WDT定时器
定时器组1定时器0
定时器1
WDT定时器
定时器时钟:
每个定时器都以 APB 时钟(缩写 APB_CLK,频率通常为 80 MHz)作为基础时钟
。知道了时钟频率就好配置分频值和计数值来产生自己想要的定时中断。
例如我需要1s中产生一次定时器中断;我可以把分频值设为80,这个计数器的频率为80mhz/80=1mhz,也就是1us计数器会记一个值。然后我再设定计数到1000000产生alarm中断。1us*1000000=1s
下面用代码解释下具体如何配置产生1s的定时器中断:
定时器初始化
使用的是定时器组0的定时器0,简称为timer00
void timer00_init()
{
timer_config_t config;
config.divider = 80; //分频值,默认时钟是80mhz
config.counter_dir = TIMER_COUNT_UP;
config.counter_en = TIMER_PAUSE;
config.alarm_en = TIMER_ALARM_EN;
config.intr_type = TIMER_INTR_LEVEL;
config.auto_reload = 1; //使能自动装载
timer_init(TIMER_GROUP_0,