# STM32 WS2812 LED Control (TIM2 Interrupt) ## 📘 Описание Данный проект демонстрирует управление адресной светодиодной лентой WS2812 с использованием таймера TIM2 на микроконтроллере STM32F407VET6. При каждом срабатывании таймера: - переключается GPIO (индикатор работы) - гасится вся лента - зажигается один светодиод - цвет выбирается циклически - создаётся эффект "бегущего огня" ------------------------------------------------------------------------ ## ⚙️ Основная функция ``` c 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; } } ``` ------------------------------------------------------------------------ ## 🧠 Логика работы 1. Проверка таймера (TIM2) 2. Переключение пина (индикация) 3. Очистка всех светодиодов 4. Установка одного активного светодиода 5. Отправка данных в WS2812 6. Смещение позиции ------------------------------------------------------------------------ ## 🎯 Результат Создаётся визуальный эффект: - один "бегущий" светодиод - автоматическая смена цветов - плавное зацикливание ------------------------------------------------------------------------ ## 🧩 Используемое оборудование - Микроконтроллер: 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 - Частота обновления зависит от настроек таймера