2.8 KiB
2.8 KiB
STM32 WS2812 LED Control (TIM2 Interrupt)
📘 Описание
Данный проект демонстрирует управление адресной светодиодной лентой WS2812 с использованием таймера TIM2 на микроконтроллере STM32F407VET6.
При каждом срабатывании таймера: - переключается GPIO (индикатор работы) - гасится вся лента - зажигается один светодиод - цвет выбирается циклически - создаётся эффект "бегущего огня"
⚙️ Основная функция
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);
for (int i = 0; i < LED_COUNT; i++)
{
setLED(i, 0, 0, 0);
}
setLED(pos,
colors[pos % COLOR_COUNT][0],
colors[pos % COLOR_COUNT][1],
colors[pos % COLOR_COUNT][2]);
WS2812_Send();
pos++;
if (pos >= LED_COUNT)
pos = 0;
}
}
🧠 Логика работы
- Проверка таймера (TIM2)
- Переключение пина (индикация)
- Очистка всех светодиодов
- Установка одного активного светодиода
- Отправка данных в WS2812
- Смещение позиции
🎯 Результат
Создаётся визуальный эффект: - один "бегущий" светодиод - автоматическая смена цветов - плавное зацикливание
🧩 Используемое оборудование
- Микроконтроллер: STM32F407VET6 (Cortex-M4, 168 MHz)
- Светодиодная лента: WS2812
- Таймер: TIM2
- GPIO: GPIOE PIN 15
🖼️ Плата разработки
https://giteadocker2.fvds.ru/pavel/led/src/branch/main/jz%20f407vet6.png
🚀 Примечания
- Убедитесь, что таймер TIM2 настроен и запущен с прерыванием
- WS2812 требует точного тайминга --- обычно используется DMA + PWM
- Частота обновления зависит от настроек таймера