# 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
-   Частота обновления зависит от настроек таймера
