基于STM32的WS2812B炫彩灯光控制系统
这个项目是一个高效稳定的WS2812B RGB LED灯带驱动库,专为STM32F103系列微控制器设计。通过PWM和DMA技术实现精确的时序控制,支持多达60个LED灯珠,提供了丰富的灯光效果和灵活的配置选项。
效果图
(只拍摄了部分效果)

核心功能亮点
-
专业级硬件驱动
- 零等待DMA传输技术
- 自动生成WS2812B协议波形(800kHz)
- 精确的复位信号控制(>50μs低电平)
-
11种炫彩特效
// 彩虹波浪效果 Effect_RainbowWave(8, 3); // 呼吸灯效果 Effect_Breathe(COLOR_BLUE, 50, 5); // 奔跑光带 Effect_RunningLights(COLOR_GREEN, 25, 80, 5); // 音乐频谱效果 Effect_SingleMusicBar(COLOR_RED, 75, 500); -
卓越的性能优化
- 呼吸灯查表算法替代浮点运算
- HSV转RGB快速转换函数
- 内存占用优化(双缓冲设计)
- 动态延时控制技术
技术架构
关键特性
-
物理层
- 工作电压:灯珠5V,信号线电压3.3V既可。
- 信号频率:800kHz ±150ppm
- 支持灯珠数:60个(可配置)
-
色彩系统
- GRB 24位真色彩
- HSV色彩空间支持
- 预定义常用颜色常量
#define COLOR_RED 0x00FF00 #define COLOR_PURPLE 0x00FF80
-
控制接口
- 速度参数:1-100可调
- 循环次数:0=永久运行
- 亮度控制:0-255级
使用示例
while(1) {
// 彩虹波浪效果
Effect_RainbowWave(8, 3);
// 音乐频谱效果
Effect_SingleMusicBar(COLOR_RED, 75, 500);
// 双向流水灯
Effect_BidirectionalFlow(COLOR_CYAN, 70, 3);
// 清屏暂停
WS2812B_Clear();
Delay_ms(1000);
}
应用场景
- 智能家居氛围照明
- 音乐可视化系统
- 节日装饰灯光
- 汽车氛围灯
- 游戏设备RGB灯效
该项目以卓越的性能和丰富的灯光效果,为嵌入式开发者提供了开箱即用的WS2812B解决方案。所有代码采用模块化设计,方便移植到各种STM32平台,并通过详尽的注释确保可维护性。
下面是全部的代码(粘贴既可使用)
主函数代码(main.c)
#include "stm32f10x.h"
#include "HDL_WS2812B.h"
#include "Delay.h"
int main(void)
{
// 系统时钟初始化 (根据实际配置)
SystemInit();
// WS2812B初始化
PWM_WS2812B_Init(WS2812B_ARR);
WS2812B_Clear();
while (1) {
// 0.显示 x色频谱条,中等速度,运行 次
Effect_SingleMusicBar(COLOR_RED, 75, 500);
// 1. 彩虹波浪效果
Effect_RainbowWave(8, 3); // 中等速度,运行3个循环
// 2. 呼吸灯效果 (蓝色)
Effect_Breathe(COLOR_BLUE, 50, 5); // 蓝色,中等速度,5次呼吸循环
// 3. 颜色循环效果
Effect_ColorCycle(30, 10); // 较慢速度,运行3个循环
// 4. 奔跑光带效果 (绿色)
Effect_RunningLights(COLOR_GREEN, 25, 80, 5); // 绿色,宽度6,慢速,运行5个循环
// 5. 快速闪烁效果 (红色/绿色交替)
Effect_Flash(COLOR_RED, COLOR_GREEN, 70, 10); // 红绿色交替,快速,闪烁10次
// 6. 白色渐变效果
Effect_WhiteFade(200, 60, 3); // 最大亮度200,慢速,3次渐变循环
// 7. 随机闪烁效果
Effect_RandomTwinkle(70, 20); // 中等速度,闪烁20次
// 8. 跳动条效果 (紫色)
Effect_JumpingBar(COLOR_PURPLE, 4, 5, 10, 10); // 紫色,条长4,间隔5,慢速,运行10个循环
// 9. 单向流水灯效果 (青色)
Effect_WaterFlow(COLOR_CYAN, 80, 3); // 青色,慢速,3次流水
//
// 10. 双向流水灯效果 (紫色)
Effect_BidirectionalFlow(COLOR_PURPLE, 70, 3); // 白色,中等速度,运行3个循环
//
// 短暂停顿
WS2812B_Clear();
Delay_ms(1000);
}
}
HDL_WS2812B.c文件
/*******************************************************************************
* @file HDL_WS2812B.c
* @author
* @version V1.0
* @date 2025
* @brief Improved WS2812B driver with multiple effects
******************************************************************************/
#include "HDL_WS2812B.h"
#include "Delay.h"
#include "stdlib.h" // For random effects
/* 单个灯珠的编码对应的比较值数组 */
uint16_t Single_LED_Buffer[DATA_SIZE * LED_NUM];
/* 存储所有灯珠的颜色数据 (GRB格式) */
uint32_t LED_Color[LED_NUM];
// HSV转RGB函数
static uint32_t HSVtoRGB(uint16_t h, uint8_t s, uint8_t v);
/*
* 初始化函数
* 参数:arr:自动重装值
*/
void PWM_WS2812B_Init(uint16_t arr)
{
//结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
DMA_InitTypeDef DMA_InitStructure;
//使能RCC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PORTA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph

最低0.47元/天 解锁文章
2938

被折叠的 条评论
为什么被折叠?



