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 дозволяють реалізовувати кілька паралельних завдань із високою точністю, звільняючи основний цикл програми.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Датчик обертання енкодер KY-040

Датчик обертання енкодер KY-040

Енкодер обертання KY-040 - це обертальний датчик, який характеризує ступінь повороту вісі та в якому..

37.93грн.

Розумний дім #1: Вступ до розумного дому на ESP32

Розумний дім #1: Вступ до розумного дому на ESP32

Розумний дім #1: Вступ до розумного дому на ESP32 Сучасний розумний дім – це не лише дорогі..

Керування машинкою через WiFi

Керування машинкою через WiFi

Вирішив я недавно зробити апгрейд радіокерованого іграшкового джипу свого сина. Радіокерування м..

Arduino SIM800 CBC рівень заряду

Arduino SIM800 CBC рівень заряду

Привіт друзі! SIM800L має аналого-цифровий перетворювач, який призначений для вимірювання напруги жи..

SIM800L як припаяти гребінку

SIM800L як припаяти гребінку

Привіт друзі! Це коротка стаття під назвою SIM800L як припаяти гребінку. Модулі GSM зв'язку SIM8..

Рекомендовані товари

Watchdog і таймери ESP32

Watchdog і таймери ESP32

Watchdog і таймери ESP32 ESP32 має вбудований Watchdog Timer (WDT), який використовується для зах..

0.00грн.

ESP32: Високоточні вимірювання сигналів за допомогою таймерів

ESP32: Високоточні вимірювання сигналів за допомогою таймерів

ESP32: Високоточні вимірювання сигналів за допомогою таймерів ESP32 оснащений потужними апаратним..

0.00грн.