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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Подключение кнопки к Arduino

Подключение кнопки к Arduino

Изначально собирался написать статью о фильтрации дребезга кнопки, подключенной к контроллеру Arduin..

ESP32 и Telegram bot: удалённый мониторинг

ESP32 и Telegram bot: удалённый мониторинг

ESP32 и Telegram bot: удалённый мониторинг Современные IoT-системы всё чаще используют облачные..

Уроки Arduino типы данных для начинающих

Уроки Arduino типы данных для начинающих

Привет друзья от geekmatic.in.ua! Пора заняться полезным делом и разобрать типы данных, представле..

Резисторы 0,250 Вт

Резисторы 0,250 Вт

Миниатюрные резисторы разных номиналов с точностью +-1%. Толщина выводов хорошо подходит под стандар..

0.85грн.

Циклы 4 — Цикл do...while

Циклы 4 — Цикл do...while

Циклы 4 — Цикл do...while Введение Цикл do...while — это разновидность цикла while, но с..

Рекомендуемые товары

Watchdog и таймеры ESP32

Watchdog и таймеры ESP32

Watchdog и таймеры ESP32 ESP32 оснащён встроенным Watchdog Timer (WDT), который используется для ..

0.00грн.

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

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

ESP32: Высокоточные измерения сигналов с помощью таймеров ESP32 оснащён мощными аппаратными тайме..

0.00грн.