一个高性能、基于DMA的STM32可寻址RGB LED驱动库,内置56种炫酷视觉效果。
- 🚀 高性能: DMA + PWM驱动,极低CPU占用
- 🎨 56种视觉效果: 从静态颜色到动态动画应有尽有
- 🎯 多灯带支持: 可同时控制多条独立配置的LED灯带
- 🌈 颜色空间: 支持RGB和HSV颜色空间
- 💡 亮度控制: 全局亮度调节 (0-255)
- ⚡ 伽马校正: 可选的伽马校正,获得更好的颜色表现
- 🎪 灵活配置: 支持静态或动态内存分配
- 📦 易于集成: 简洁的API,最小化依赖
| LED类型 | 颜色顺序 | 频率 | 白光通道 |
|---|---|---|---|
| WS2811S | RGB | 400kHz | ❌ |
| WS2811F | RGB | 800kHz | ❌ |
| WS2812/B | GRB | 800kHz | ❌ |
| SK6812 | RGBW | 800kHz | ✅ |
- STM32微控制器(已在STM32F4系列上测试)
- HAL库
- 支持PWM的定时器
- DMA通道
- GCC ARM工具链或Keil MDK
将LED灯带的数据线连接到支持PWM的定时器引脚(例如:TIM1_CH1)。
将以下文件复制到您的项目中:
ARGB.c
ARGB.h
ARGB_Effects.c (可选,用于效果功能)
ARGB_Effects.h (可选,用于效果功能)
#include "ARGB.h"
// 定义缓冲区(30个LED,WS2812类型)
uint8_t rgb_buffer[ARGB_GET_RGB_BUF_SIZE(30, ARGB_WS2812)];
uint8_t pwm_buffer[ARGB_GET_PWM_BUF_SIZE(ARGB_DMA_BYTE, ARGB_WS2812)];
// 初始化ARGB句柄
ARGB_HandleTypeDef hargb;
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_TIM1_Init();
// 初始化ARGB驱动
ARGB_Init(&hargb, &htim1, &hdma_tim1_ch1, TIM_CHANNEL_1,
30, // 30个LED
ARGB_WS2812, // LED类型
ARGB_DMA_BYTE, // DMA传输大小
1, // 启用伽马校正
rgb_buffer, // RGB缓冲区
pwm_buffer); // PWM缓冲区
// 设置亮度
ARGB_SetBrightness(&hargb, 128);
// 将所有LED设置为红色
ARGB_FillRGB(&hargb, (ARGB_RGB){255, 0, 0});
// 更新显示
ARGB_Show(&hargb);
while (1) {
// 你的代码
}
}#include "ARGB_Effects.h"
ARGB_FX_HandleTypeDef hfx;
int main(void) {
// ... 初始化代码 ...
// 初始化效果
ARGB_FX_Init(&hfx, &hargb);
// 设置效果模式
ARGB_FX_SetMode(&hfx, FX_MODE_RAINBOW_CYCLE);
// 设置效果速度(数值越小越快)
ARGB_FX_SetSpeed(&hfx, 10);
// 设置效果颜色
ARGB_FX_SetColor(&hfx, COLOR_RED);
while (1) {
// 周期性调用服务函数
ARGB_FX_Service(&hfx);
HAL_Delay(1);
}
}ARGB_STATE ARGB_Init(ARGB_HandleTypeDef *hargb,
TIM_HandleTypeDef *htim,
DMA_HandleTypeDef *hdma,
uint32_t tim_channel,
uint16_t num_pixels,
ARGB_LED_TYPE led_type,
ARGB_DMA_SIZE dma_size,
uint8_t use_gamma,
uint8_t *rgb_buf,
void *pwm_buf);void ARGB_SetRGB(ARGB_HandleTypeDef *hargb, uint16_t i, ARGB_RGB color);
void ARGB_SetHSV(ARGB_HandleTypeDef *hargb, uint16_t i, ARGB_HSV hsv);
void ARGB_FillRGB(ARGB_HandleTypeDef *hargb, ARGB_RGB color);
void ARGB_FillHSV(ARGB_HandleTypeDef *hargb, ARGB_HSV hsv);
void ARGB_Clear(ARGB_HandleTypeDef *hargb);ARGB_STATE ARGB_Show(ARGB_HandleTypeDef *hargb);
ARGB_STATE ARGB_Ready(ARGB_HandleTypeDef *hargb);
void ARGB_SetBrightness(ARGB_HandleTypeDef *hargb, uint8_t br);void ARGB_FX_Init(ARGB_FX_HandleTypeDef *hfx, ARGB_HandleTypeDef *hargb);
void ARGB_FX_SetMode(ARGB_FX_HandleTypeDef *hfx, ARGB_FX_MODE mode);
void ARGB_FX_SetColor(ARGB_FX_HandleTypeDef *hfx, ARGB_RGB color);
void ARGB_FX_SetSpeed(ARGB_FX_HandleTypeDef *hfx, uint16_t speed);
void ARGB_FX_Service(ARGB_FX_HandleTypeDef *hfx);- 静态颜色
- 闪烁
- 呼吸灯
- 渐变
- 随机颜色
- 颜色擦除
- 颜色擦除反转
- 颜色擦除反向
- 随机颜色擦除
- 彩虹
- 彩虹循环
- 彩虹频闪
- 彩虹闪烁
- 彩虹跑马灯
- 扫描
- 双向扫描
- 跑马灯
- 白光追逐
- 颜色追逐
- 随机追逐
- 彩虹追逐
- 闪光追逐
- 熄灯追逐
- 火花
- 闪光火花
- 超级火花
- 闪烁
- 随机闪烁
- 渐变闪烁
- TwinkleFOX
- 流动灯光
- 流动颜色
- 红蓝流动
- 随机流动
- Larson扫描器 (霹雳游侠)
- 彗星
- 烟花
- 火焰闪烁(3种变体)
- 多重频闪
- 圣诞快乐
- 万圣节
- 马戏团
- 单点动态
- 多点动态
- 双色追逐
- 三色追逐
- 随机颜色扫描
本库包含200+种预定义颜色:
COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_WHITE, COLOR_BLACK,
COLOR_ORANGE, COLOR_PURPLE, COLOR_YELLOW, COLOR_CYAN, COLOR_MAGENTA,
COLOR_PINK, COLOR_LIME, COLOR_TURQUOISE, COLOR_VIOLET, COLOR_GOLD,
// ... 还有更多!完整的颜色列表请查看 ARGB_Effects.h 文件。
// 在 ARGB.h 中,保持注释状态:
// #define ARGB_USE_DYNAMIC_BUFFERS
uint8_t rgb_buf[ARGB_GET_RGB_BUF_SIZE(num_pixels, led_type)];
uint8_t pwm_buf[ARGB_GET_PWM_BUF_SIZE(dma_size, led_type)];// 在 ARGB.h 中,取消注释:
#define ARGB_USE_DYNAMIC_BUFFERS
// 将malloc和free函数传递给ARGB_Init
ARGB_Init(&hargb, ..., malloc, free);根据定时器位宽选择:
ARGB_DMA_BYTE- 8位定时器(最常用)ARGB_DMA_HWORD- 16位定时器ARGB_DMA_WORD- 32位定时器
- 检查电源供电(大多数LED需要5V)
- 验证定时器频率和PWM配置
- 确保DMA通道配置正确
- 检查数据线连接
- 验证LED类型(WS2812与WS2811颜色顺序不同)
- 检查是否应该启用/禁用
use_gamma - 尝试不同的DMA传输大小
- 确保电源稳定
- 检查电磁干扰
- 如需要可降低PWM频率
- 在LED灯带附近添加电容
查看 example/ 文件夹获取完整的STM32CubeIDE项目示例,包括:
- 基础LED控制
- 多种效果演示
- 旋转编码器模式选择
- UART调试功能
欢迎贡献!请随时提交Pull Request。
- Fork本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开一个Pull Request
本项目采用MIT许可证 - 详见 LICENSE 文件。
- Dmitriy Semenov / Crazy_Geeks - ARGB驱动 - Crazy Geeks
- LED Effects Library - 效果实现
- STMicroelectronics 提供的HAL库
- FastLED库提供的效果灵感
- 社区贡献者
- 🌐 网站:https://crazygeeks.ru
- 📧 GitHub Issues:报告bug或功能请求
如果您觉得这个项目有帮助,请给它一个Star!⭐
用 ❤️ 为STM32社区打造