STM32通过DMA&PWM控制显示WS2812
支持STM32开发,修改配置函数后,单片机任意IO均可控制灯带。。含PWM,渐变,流水。本程序已用在项目中,可稳定运行。
WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。可做成长条灯带,普通用于房屋装饰,婚庆现场装饰,舞台装饰等,所以掌握WS2812BLED的驱动还是非常重要的。 这里针对WS2812B灯带,采用模拟SPI的通讯方式,底层驱动程序,包括灯带颜色,数量等控制。
ws2812B驱动的51程序,对初学者是难得的资料,是项目移植的好程序
亲测可以
芯片使用STM32F107VC 理清思路,上一期通过TIM方式驱动灯组的时候说过,对于灯带的逻辑1就是一个高电平800ns低电平450ns的脉冲,逻辑0就是一个高电平400ns低电平850ns的脉冲。脉冲周期为1250ns。所以理论上通过SPI的方式可以产生这两种脉冲就可以实现控制灯带。
stm32f103c8t6单片机ws281x_spi+dma方式驱动WS2812灯珠的驱动程序源代码,main函数中保留了各种样式的测试函数,只需在头文件中配置灯珠个数,将控制引脚接到PA7即可。 int main(void) { usart1_init(115200); delay_init(); ws281x_init(); while(1) { // Some example procedures showing how to display to the pixels: ws281x_colorWipe(ws281x_color(255, 0, 0), 50); // Red ws281x_colorWipe(ws281x_color(0, 255, 0), 50); // Green ws281x_colorWipe(ws281x_color(0, 0, 255), 50); // Blue //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW // Send
fastNP 是一个 STM32 库,用于并行刷新多个可寻址 LED 链。它适用于 WS2812B LED 及其克隆,如 SK6812 等(通常称为 NeoPixels)。最多可并行刷新 16 个 LED 链,无需超频 CPU。我已经在 STM32F103 微控制器(在所谓的“Blue Pill”板上)开发和测试了它,但也应该可以将它移植到其他 STM32 微控制器。 该库建立在Martin Hubáček的 WS2812B DMA 库的概念之上,该库使用了一项出色的技术,使用一个计时器和三个 DMA 通道刷新多个 LED 链。在 fastNP 中,我们尝试更进一步,通过大量优化生成中间 DMA 位缓冲区的代码,这基本上是尝试刷新多个通道时的瓶颈。通过一点内联汇编,我们可以在执行一半 DMA 传输所需的时间内为所有 16 个通道生成一个位缓冲区。
STM32F103_WS2812B灯带pwm+dma方式驱动控制程序软件源码 #include "sys.h" #include "delay.h" #include "usart.h" #include "ws2812b.h" #define mode 1 //mode = 1为呼吸灯 mode = 2为流水灯 int main(void) { // u8 r,g,b; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); Timer2_init(); // WS2812_Clear(); while(1) { Led_Mode(mode); } }
STM32采用SPI+DMA方式驱动WS2812b,这种方法属于基于其时序,用SPI模拟其发送协议进行操作,这种方法与传统的IO模拟相比,控制周期更短,响应更为迅速,且经过DMA通道,对单片机的占用少,尤其不怕中断。
WS2812流水灯,STM8S003F3单片机,驱动30个灯。寄存器版本。
利用STM32C8T6驱动ws2812及其相关资料
基于STM32的WS2812灯带驱动(GPIO口控制,无需驱动芯片或模块) 文章:https://blog.csdn.net/weixin_53403301/article/details/126366119
STC15W204是8PIN的宽电压版,驱动WS2812的时候单片机可以用5V电压,也可以用3.3V的电源。 RGB灯条的电源应该是4-7V之间,目前驱动的是8颗粒的灯条,原则上应该可以驱动更多颗粒的,不过手头没有那么长的,没试过,有兴趣的朋友可以自己试验,看看最多可以驱动多少个。按理论来讲驱动8颗和80颗应该是一样的。 硬件环境: 单片机:STC15W204S(SOP8) 灯带:WS2812(8颗粒) 非必需品:开关,USB转接板,面包板,跳线若干。 使用片内R/C振荡器,连外部晶振都不需要,工作频率为11.0592MHz STC15W204S可以用其他其他STC 1T的MCU。 代码也非常简单,只用到1个IO口,不需要进行任何初始化。 如果使用其他工作频率时,请相应调整DELAY_LONG和DELAY_SHORT的宏定义,适当增减_nop()_的个数,直到能正确驱动灯条为止。
使用STM32F103C8T6控制WS2811(WS2812)灯带
驱动WS2812彩灯,并实现花样流水灯。
基于stm32的ws1812b彩灯的七彩渐变源代码,方便用于装饰
使用STM32单片机做的一个控制WS2812B灯带的驱动API函数。 注意!!! 还有点问题,需要自己去微调程序。
本人的解析博客:https://blog.csdn.net/h568630659/article/details/121465665 压缩包内包含STM32CubeMX、Keil工程及WS2812技术文档(这个文档不同商家不同,注意区分),实测电路正常工作。.