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 позволяют реализовывать несколько параллельных задач с высокой точностью, освобождая основной цикл программы.
SIM800L как припаять гребенку
Привет, друзья! Это короткая статья под названием SIM800L как припаять гребенку. Модули GSM связ..
Колпачок на переменный резистор 6мм
Чорно-белый декоративный колпачок для переменных резисторов и енкодеровВнутренний диаметр отверстия ..
5.63грн.
Arduino Nano + расширитель пинов + управление двигателем актуатора
Пример реверсивного управления двигателем актуатора при помощи драйвера L298N и расширителя вхо..
Модуль стабилизатора напряжения 3,3 В
Модуль предназначен для питания различных электронных устройств, модулей, работающих на напряжении 3..
18.61грн.
Прото шилд для Arduino UNO
Шилд для прототипирования для Arduino UNO. Призван упростить монтаж небольших любительских проектов ..
80.34грн.







