Таймеры и FreeRTOS на ESP32

ESP32 работает под управлением FreeRTOS, и в дополнение к аппаратным таймерам (hw_timer_t) в нём доступны программные таймеры FreeRTOS. Они позволяют запускать функции по расписанию, управлять периодическими событиями и при этом экономить аппаратные ресурсы.

Что такое софтварные таймеры FreeRTOS

Программные таймеры FreeRTOS создаются и управляются при помощи специальных функций ядра. В отличие от аппаратных таймеров, они не зависят от железа, а работают в контексте задач ОС. Основные особенности:

  • Не используют аппаратные таймерные блоки ESP32 — освобождают ресурсы.
  • Могут быть одноразовыми (one-shot) или периодическими (auto-reload).
  • Выполняют обработчик (callback) в отдельной служебной задаче FreeRTOS.

Основные функции API

  • xTimerCreate() — создание таймера.
  • xTimerStart() — запуск таймера.
  • xTimerStop() — остановка таймера.
  • xTimerDelete() — удаление таймера.

Пример: мигание светодиода через FreeRTOS таймер


#include 

#define LED_PIN 2

// Дескриптор таймера
TimerHandle_t blinkTimer;

// Обработчик таймера
void blinkCallback(TimerHandle_t xTimer) {
  static bool ledState = false;
  digitalWrite(LED_PIN, ledState);
  ledState = !ledState;
}

void setup() {
  pinMode(LED_PIN, OUTPUT);

  // Создаем таймер: имя, период 500 мс, auto-reload = true, ID = 0, callback
  blinkTimer = xTimerCreate("BlinkTimer", pdMS_TO_TICKS(500), pdTRUE, 0, blinkCallback);

  if (blinkTimer != NULL) {
    xTimerStart(blinkTimer, 0); // Запускаем таймер
  }
}

void loop() {
  // Основной цикл пуст — всё делает таймер
}

Что происходит: каждые 500 мс срабатывает callback, и светодиод на GPIO 2 переключает своё состояние.

Сравнение с аппаратными таймерами

Характеристика Аппаратные таймеры (hw_timer_t) Программные таймеры FreeRTOS
Зависимость от железа Работают напрямую с блоками таймеров ESP32 Выполняются в задачах ОС
Точность Высокая, до микросекунд Миллисекундный диапазон, зависит от системного тика
Скорость выполнения ISR — работает очень быстро Задержка на планирование задач
Нагрузка на CPU Минимальная Чуть выше, чем у hw_timer
Удобство Требуется писать обработчик ISR Callback в обычном коде, проще отлаживать

Когда использовать софтварные таймеры

  • Когда точность в микросекундах не критична.
  • Для управления событиями в миллисекундном диапазоне (мигание, обновление интерфейса, периодические задачи).
  • Когда аппаратные таймеры уже заняты.

Заключение

Таймеры FreeRTOS на ESP32 — удобный инструмент для периодических задач. Если вам нужна высокая точность, используйте аппаратные hw_timer_t. Если же важна простота и гибкость — подойдут программные таймеры FreeRTOS.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Стойка нейлоновая М3 18мм + 6мм

Стойка нейлоновая М3 18мм + 6мм

Стойка для крепления различных електронных модулей к корпусу устройстваВысота стойки 18 ммДлина внеш..

5.18грн.

ST-Link V2 программатор

ST-Link V2 программатор

Программатор для микроконтроллеровАлюминиевый корпусПоддерживает следующие версии программ для проек..

153.83грн.

Модуль блока питания 5В 700мА

Модуль блока питания 5В 700мА

Миниатюрный безкорпусный трансформаторный блок питания для любительских проектов.Входное напряжение ..

70.15грн.

Датчик температуры аналоговый 10К

Датчик температуры аналоговый 10К

Датчик температуры аналоговый NTC 10K Аналоговый датчик температуры NTC 10K ±1% — это высокоточный ..

44.68грн.

AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Микросхема постоянной памяти EEPROMНапряжение питания 2,7 ... 5,5 ВОбъем 256 БайтКомуникация I2..

4.54грн.

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

ESP32 таймеры: Многозадачность с аппаратными таймерами

ESP32 таймеры: Многозадачность с аппаратными таймерами

ESP32 таймеры: Многозадачность с аппаратными таймерами ESP32 — это мощный микроконтроллер с двухъ..

0.00грн.

Измерение времени и точные задержки на ESP32

Измерение времени и точные задержки на ESP32

Измерение времени и точные задержки на ESP32 ESP32 обладает мощной системой аппаратных таймеров, ..

0.00грн.