搜索
bottom↓
回复: 29

分享:STM32驱动WS2812B

[复制链接]

出0入0汤圆

发表于 2016-1-18 00:59:46 | 显示全部楼层 |阅读模式
搞了一晚上,好辛苦,上代码先。
void Set_LED_High()
{
        int i=0;
        PAout(4)=1;
        i=6;
        while(i--);
        PAout(4)=0;
        //i=1;
        while(0);
}

void Set_LED_Down()
{
        int i=0;
        PAout(4)=1;
        while(0);
        PAout(4)=0;
        i=6;
        while(i--);
}

void RST_LED()
{
        PAout(4)=0;
        delay_us(50);
}


int main(void)
{        int i=0;
         GPIO_InitTypeDef GPIOStruct;
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
         GPIOStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOStruct.GPIO_Pin=GPIO_Pin_4;
GPIOStruct.GPIO_Speed=GPIO_Speed_50MHz;         
        delay_init();                   
         GPIO_Init(GPIOA,&GPIOStruct);
        LED_Init();                         
         RST_LED();
         while(1) {
         i=24;
         while(i--)
         {
                 Set_LED_High();
                 
                 //delay_us(10);
         }
         RST_LED();

}
         PAout(4)=0;
        while(1)
        {
                LED0=0;
                LED1=1;
                delay_ms(300);         //ÑÓʱ300ms
                LED0=1;
                LED1=0;
                delay_ms(300);        //ÑÓʱ300ms
        }
}
有点乱大家不要介意。
SET_Led_High是发送1字码,850ns高电平,400ns低电平。0字码则相反。这两个函数里面的时序我用示波器看过了,最好不要乱改。
顺便说一下:WS2812B不能维持电平逻辑,要反复扫描,也就是发送了0xfff(白光) 并不能一直显示白光,只是会显示一下然后就灭了,所以要一直扫,或者要一直有数据输入进去。我以为是能够锁存数据的结果搞了一晚上。。。本来用dsp已经搞定了。看来dsp的io速度还是可以的。
推测2812B里面维持电平的十有八九是什么电容电路。。。。

出0入0汤圆

发表于 2016-1-18 07:23:28 | 显示全部楼层
为什么不用DMA呢?
透过UART(反相输出)或是SPI
算好除频参数
用1byte代表1-wire的1bit
接下来就全自动了
CPU可以干别的事

出0入0汤圆

发表于 2016-1-18 08:45:40 | 显示全部楼层
感谢分享!!!

出0入0汤圆

发表于 2016-1-18 09:08:09 | 显示全部楼层
2楼正解。

出0入4汤圆

发表于 2016-1-18 09:32:15 | 显示全部楼层
用STM32的DMA+SPI驱动这东西还是很开心的。

出0入0汤圆

发表于 2016-1-19 16:47:29 | 显示全部楼层
本帖最后由 luobotou 于 2016-1-19 20:37 编辑

我也想用用2812

出0入0汤圆

发表于 2016-1-19 16:58:29 | 显示全部楼层
DMA+SPI,好主意。楼主的方法只能用来演示用,实际工程还得斟酌。

出0入8汤圆

发表于 2016-1-19 19:33:21 来自手机 | 显示全部楼层
控制炫点  视频上来看看

出0入0汤圆

发表于 2016-1-23 11:15:43 | 显示全部楼层
zqf441775525 发表于 2016-1-18 09:32
用STM32的DMA+SPI驱动这东西还是很开心的。

我也用了 SPI DMA 波形是有的是感觉时间没有调很好 ,你用spi时钟配的好多呢!

出0入0汤圆

发表于 2016-1-23 14:25:10 | 显示全部楼层
1066950103 发表于 2016-1-23 11:15
我也用了 SPI DMA 波形是有的是感觉时间没有调很好 ,你用spi时钟配的好多呢! ...

我也调通了 ,开辟块内存直接当显存用,DMA自己把显存数据送到LED上。

出0入0汤圆

发表于 2016-1-23 16:50:18 来自手机 | 显示全部楼层
这样写没什么运用价值。 太浪费cpu

出0入0汤圆

发表于 2016-1-23 21:07:19 | 显示全部楼层
WS2812B好像是要5V的电平,3.3伏的电平能否驱动

出0入0汤圆

发表于 2016-1-23 21:15:18 | 显示全部楼层
楼主的程序几乎都是霸占住不放啊!

出0入0汤圆

 楼主| 发表于 2016-1-25 21:07:00 | 显示全部楼层
这东西资料比较少,这个程序只是简单验证下逻辑和时序

出0入0汤圆

发表于 2016-2-17 22:51:11 | 显示全部楼层
1066950103 发表于 2016-1-23 14:25
我也调通了 ,开辟块内存直接当显存用,DMA自己把显存数据送到LED上。

我的时序 还是有点问题。

出0入0汤圆

发表于 2016-2-17 22:51:41 | 显示全部楼层
zqf441775525 发表于 2016-1-18 09:32
用STM32的DMA+SPI驱动这东西还是很开心的。

分享一下你的代码呢?

出0入0汤圆

发表于 2016-2-18 10:55:09 | 显示全部楼层
WS2812B 是可以锁存的吧,我都是更改数据的时候才发一次,

出0入0汤圆

发表于 2016-2-29 23:24:08 | 显示全部楼层
刚刚在淘宝上买了一个WS2812B的驱动器,5V供电,红外线遥控接收,可以产生十几种闪烁模式,还可以调快调慢,调亮调暗,拆开一看居然是用STC的IAP 15W105,这8位机5K的flash,128的SRAM,没有串口没有SPI居然能做到800KHz的通信速度,真没搞明白时序怎么拍得那么巧妙的。

出0入0汤圆

 楼主| 发表于 2016-3-6 23:17:38 | 显示全部楼层
runball 发表于 2016-2-29 23:24
刚刚在淘宝上买了一个WS2812B的驱动器,5V供电,红外线遥控接收,可以产生十几种闪烁模式,还可以调快调慢 ...

可以用示波器量量看看。ws2812B的时序要求不是非常非常严格。因为只驱动LED,任务不多的时候应该还是能够完成的。红外接收可以用中断来完成,这样下次驱动的时候重新刷一遍。眼睛不能识别的时候就能达到这样的效果。这只是我的一些想法,有兴趣可以多交流。
其实普通的RGB在数量不大时,还是比较好用的。

出0入0汤圆

发表于 2016-4-15 16:48:29 | 显示全部楼层
楼主,有做他的呼吸灯显示么   我用的DMA+PWM,调通了,丝毫不占CPU  

出0入0汤圆

发表于 2016-8-15 16:42:17 | 显示全部楼层
顺便说一下:WS2812B不能维持电平逻辑,要反复扫描,也就是发送了0xfff(白光) 并不能一直显示白光,只是会显示一下然后就灭了,

经过实测 你的说法不正确。  刷过一遍数据后,把数据脚拔掉放了半个小时,只保留供电,颜色一直都没有变化。

出0入0汤圆

发表于 2016-8-15 16:57:51 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2018-10-21 16:02:59 来自手机 | 显示全部楼层
可以锁存的呀,我把信号断了就不动了保持着

出0入0汤圆

发表于 2018-10-21 16:04:22 来自手机 | 显示全部楼层
时序误差太大带灯数会变少吧

出0入0汤圆

发表于 2018-10-30 03:25:21 来自手机 | 显示全部楼层
因何我要300us的低电平才可以刷新???我看资料上是60us呀?

出0入0汤圆

发表于 2018-10-30 20:12:33 | 显示全部楼层
睿翼1992 发表于 2016-4-15 16:48
楼主,有做他的呼吸灯显示么   我用的DMA+PWM,调通了,丝毫不占CPU

你的代码能够分享一下吗?调不通DMA+PWM

出0入0汤圆

发表于 2018-11-2 09:13:17 | 显示全部楼层
ScilenceLK 发表于 2018-10-30 20:12
你的代码能够分享一下吗?调不通DMA+PWM

时间太久了,代码找不到了

出0入0汤圆

发表于 2018-11-2 16:00:03 | 显示全部楼层
睿翼1992 发表于 2018-11-2 09:13
时间太久了,代码找不到了

依旧感谢

出0入0汤圆

发表于 2019-2-16 13:50:06 | 显示全部楼层
1066950103 发表于 2016-1-23 14:25
我也调通了 ,开辟块内存直接当显存用,DMA自己把显存数据送到LED上。

DMA 发送一部分数据吗?能否连续发送比如1000个灯珠

出0入0汤圆

发表于 2019-2-18 16:03:51 | 显示全部楼层
一切那么自然 发表于 2019-2-16 13:50
DMA 发送一部分数据吗?能否连续发送比如1000个灯珠

可以的哦! DMA搬运内存数据 循环搬运。内存就是显存了写数据即可。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 04:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表