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