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

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

Привет, друзья! Это короткая статья под названием SIM800L как припаять гребенку. Модули GSM связ..

Колпачок на переменный резистор 6мм

Колпачок на переменный резистор 6мм

Чорно-белый декоративный колпачок для переменных резисторов и енкодеровВнутренний диаметр отверстия ..

5.63грн.

Arduino Nano + расширитель пинов + управление двигателем актуатора

Arduino Nano + расширитель пинов + управление двигателем актуатора

Пример реверсивного управления двигателем актуатора при помощи драйвера L298N и расширителя вхо..

Модуль стабилизатора напряжения 3,3 В

Модуль стабилизатора напряжения 3,3 В

Модуль предназначен для питания различных электронных устройств, модулей, работающих на напряжении 3..

18.61грн.

Прото шилд для Arduino UNO

Прото шилд для Arduino UNO

Шилд для прототипирования для Arduino UNO. Призван упростить монтаж небольших любительских проектов ..

80.34грн.

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

Watchdog и таймеры ESP32

Watchdog и таймеры ESP32

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

0.00грн.

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

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

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

0.00грн.