ESP32 Timer Groups: архитектура и использование
Микроконтроллер ESP32 имеет мощную систему аппаратных таймеров, организованных в две группы — Timer Group0 и Timer Group1. Каждая группа содержит по два независимых таймера, что в сумме дает четыре 64-битных таймера, работающих с высокой точностью.
Архитектура Timer Groups
- Timer Group0 — включает два таймера:
TG0T0иTG0T1. - Timer Group1 — включает два таймера:
TG1T0иTG1T1. - Каждый таймер — 64-битный счетчик с возможностью деления частоты и генерации прерываний.
- Все таймеры могут работать независимо, параллельно выполняя разные задачи.
Особенности Timer Groups
- Таймеры могут работать как в режиме однократного запуска, так и в режиме периодического повторения.
- Прерывания таймеров можно использовать для выполнения функций без блокировки
loop(). - Timer Group0 тесно связан с Watchdog — системным сторожевым таймером ESP32.
Пример: использование таймера из Timer Group0
hw_timer_t* timer = NULL;
void IRAM_ATTR onTimer() {
digitalWrite(2, !digitalRead(2)); // мигаем светодиодом
}
void setup() {
pinMode(2, OUTPUT);
// Инициализация таймера из Group0, канал 0
timer = timerBegin(0, 80, true); // делитель 80 → 1 МГц (1 тик = 1 мкс)
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 500000, true); // 500000 мкс = 0.5 сек
timerAlarmEnable(timer);
}
void loop() {
// основной код не блокируется
}
Что происходит: создается таймер из Timer Group0, который вызывает обработчик каждые 0,5 секунды. В обработчике мигает светодиод на GPIO2, при этом основной цикл loop() свободен для других задач.
Пример: использование таймера из Timer Group1
hw_timer_t* timer1 = NULL;
void IRAM_ATTR onSecondTimer() {
Serial.println("Сработал таймер из Group1");
}
void setup() {
Serial.begin(115200);
// Инициализация таймера из Group1, канал 0
timer1 = timerBegin(2, 80, true); // Group1 Timer0 → ID 2
timerAttachInterrupt(timer1, &onSecondTimer, true);
timerAlarmWrite(timer1, 1000000, true); // каждая 1 секунда
timerAlarmEnable(timer1);
}
void loop() {
// можно выполнять любые другие задачи
}
Что происходит: используется таймер из Timer Group1. Каждую секунду вызывается обработчик, в котором отправляется сообщение в Serial.
Выводы
- ESP32 имеет 2 группы таймеров: Group0 и Group1.
- В каждой группе по 2 таймера, всего доступно 4 аппаратных таймера.
- Таймеры могут работать независимо, что удобно для многозадачности.
- Timer Group0 часто используется для системного Watchdog.
Таким образом, Timer Groups позволяют реализовывать несколько параллельных задач с высокой точностью, освобождая основной цикл программы.
lm358dr сдвоенный операционный усилитель
LM358DR - двухканальный операционный усилитель с низким потреблением, разработанный компанией Texas ..
3.53грн.
Arduino SIM800 исходящий звонок ATD
Привет друзья! Это продолжение серии статей о работе с SIM800. Всех их можно найти на этом канале.&n..
Пружина для натяжения ремня 6мм
Стальная пружина для натяжки зубчатого ремня GT2 шириной 6 ммИспользуется в 3d принтерах и CNC-станк..
4.82грн.
Переменный резистор многооборотистый
Потенциометр для сверхточной подстройки сопротивления.Мощность 2 ВтУгол вращения 3600°Размеры указан..
73.09грн.
Термопара K-типа -100...800°C 5х100мм
Термопара типа К ТХА хромель-алюмель используется для измерения экстремально высоких температур до&n..
204.73грн.







