Skip to content

Latest commit

 

History

History
344 lines (260 loc) · 8.38 KB

File metadata and controls

344 lines (260 loc) · 8.38 KB

STM32 ARGB LED 驱动库

一个高性能、基于DMA的STM32可寻址RGB LED驱动库,内置56种炫酷视觉效果。

License: MIT STM32

中文文档 | English

✨ 主要特性

  • 🚀 高性能: DMA + PWM驱动,极低CPU占用
  • 🎨 56种视觉效果: 从静态颜色到动态动画应有尽有
  • 🎯 多灯带支持: 可同时控制多条独立配置的LED灯带
  • 🌈 颜色空间: 支持RGB和HSV颜色空间
  • 💡 亮度控制: 全局亮度调节 (0-255)
  • ⚡ 伽马校正: 可选的伽马校正,获得更好的颜色表现
  • 🎪 灵活配置: 支持静态或动态内存分配
  • 📦 易于集成: 简洁的API,最小化依赖

🔌 支持的LED类型

LED类型 颜色顺序 频率 白光通道
WS2811S RGB 400kHz
WS2811F RGB 800kHz
WS2812/B GRB 800kHz
SK6812 RGBW 800kHz

📋 系统要求

  • STM32微控制器(已在STM32F4系列上测试)
  • HAL库
  • 支持PWM的定时器
  • DMA通道
  • GCC ARM工具链或Keil MDK

🚀 快速开始

1. 硬件连接

将LED灯带的数据线连接到支持PWM的定时器引脚(例如:TIM1_CH1)。

2. 添加文件到项目

将以下文件复制到您的项目中:

ARGB.c
ARGB.h
ARGB_Effects.c  (可选,用于效果功能)
ARGB_Effects.h  (可选,用于效果功能)

3. 基础使用示例

#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) {
        // 你的代码
    }
}

4. 使用效果库

#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);
    }
}

📚 API参考

核心函数

初始化

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);

🎨 可用效果(共56种)

静态与基础

  • 静态颜色
  • 闪烁
  • 呼吸灯
  • 渐变
  • 随机颜色

擦除效果

  • 颜色擦除
  • 颜色擦除反转
  • 颜色擦除反向
  • 随机颜色擦除

彩虹效果

  • 彩虹
  • 彩虹循环
  • 彩虹频闪
  • 彩虹闪烁
  • 彩虹跑马灯

扫描与追逐

  • 扫描
  • 双向扫描
  • 跑马灯
  • 白光追逐
  • 颜色追逐
  • 随机追逐
  • 彩虹追逐
  • 闪光追逐
  • 熄灯追逐

闪烁与闪耀

  • 火花
  • 闪光火花
  • 超级火花
  • 闪烁
  • 随机闪烁
  • 渐变闪烁
  • 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);

DMA传输大小

根据定时器位宽选择:

  • ARGB_DMA_BYTE - 8位定时器(最常用)
  • ARGB_DMA_HWORD - 16位定时器
  • ARGB_DMA_WORD - 32位定时器

🔧 故障排除

LED不亮

  • 检查电源供电(大多数LED需要5V)
  • 验证定时器频率和PWM配置
  • 确保DMA通道配置正确
  • 检查数据线连接

颜色错误

  • 验证LED类型(WS2812与WS2811颜色顺序不同)
  • 检查是否应该启用/禁用 use_gamma
  • 尝试不同的DMA传输大小

闪烁或不稳定

  • 确保电源稳定
  • 检查电磁干扰
  • 如需要可降低PWM频率
  • 在LED灯带附近添加电容

📝 示例

查看 example/ 文件夹获取完整的STM32CubeIDE项目示例,包括:

  • 基础LED控制
  • 多种效果演示
  • 旋转编码器模式选择
  • UART调试功能

🤝 贡献

欢迎贡献!请随时提交Pull Request。

  1. Fork本仓库
  2. 创建您的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开一个Pull Request

📄 许可证

本项目采用MIT许可证 - 详见 LICENSE 文件。

👨‍💻 作者

  • Dmitriy Semenov / Crazy_Geeks - ARGB驱动 - Crazy Geeks
  • LED Effects Library - 效果实现

🙏 致谢

  • STMicroelectronics 提供的HAL库
  • FastLED库提供的效果灵感
  • 社区贡献者

📮 联系与支持

⭐ Star历史

如果您觉得这个项目有帮助,请给它一个Star!⭐


用 ❤️ 为STM32社区打造