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 дозволяють реалізовувати кілька паралельних завдань із високою точністю, звільняючи основний цикл програми.
Датчик обертання енкодер KY-040
Енкодер обертання KY-040 - це обертальний датчик, який характеризує ступінь повороту вісі та в якому..
37.93грн.
Розумний дім #1: Вступ до розумного дому на ESP32
Розумний дім #1: Вступ до розумного дому на ESP32 Сучасний розумний дім – це не лише дорогі..
Керування машинкою через WiFi
Вирішив я недавно зробити апгрейд радіокерованого іграшкового джипу свого сина. Радіокерування м..
Arduino SIM800 CBC рівень заряду
Привіт друзі! SIM800L має аналого-цифровий перетворювач, який призначений для вимірювання напруги жи..
SIM800L як припаяти гребінку
Привіт друзі! Це коротка стаття під назвою SIM800L як припаяти гребінку. Модулі GSM зв'язку SIM8..







