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 дозволяють реалізовувати кілька паралельних завдань із високою точністю, звільняючи основний цикл програми.
HX711 — модуль контролера ваги для Arduino
HX711 — це спеціалізований модуль для підключення тензометричних датчиків (датчиків ваги) до мікроко..
38.08грн.
Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR
Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR ESP32 має ап..
Arduino SIM800 GPRS HTTP GET запит
Привіт друзі! Ми з кожним разом знаємо все більш цікаві застосування GSM-модуля SIM800. На цей раз н..
Джойстик шилд для Arduino UNO MEGA
Шилд джойстика для контролерів Arduino UNO та MEGAМожна використовувати для саморобних ігор, а також..
176.49грн.
Шилд акумулятора для WeMos D1
Шилд для живлення мікроконтролера WeMos D1 від літієвого акумулятора. Дозволяє заряджати а..
74.42грн.






