找回密码
 立即注册
查看: 8707|回复: 33

STC-SPI 驱动 WS2812, 【STC-USB转双串口工具作为开发板应用】之SPI驱动WS2812

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2022-12-10 16:54:04 | 显示全部楼层 |阅读模式
STC-SPI  驱动 WS2812, 【STC-USB转双串口工具作为开发板应用】之SPI驱动WS2812

一、前言
  看到STC最新推出了一个USB转双串口的神器,不仅可以做最小系统板,还能做下载器,甚至原理图和程序均开源了,
在官网https://stcai.com/hxgnsyb就可以下载,具体如下

QQ截图20221210163230.png

  当然我也是迫不及待的入手了一个,为了图方便,我直接某宝上特价十块钱左右的价格就卖到了!!!回来实测了下可以轻轻松松实现4M以上的串口通信!当然作为一个资深的点灯工程师,新拿到个板子我们还是以点灯为主,具体的效果见最前面的视频,这里先把源代码上传,见附件,感兴趣的盆友们可以下载下来自己试试。



二、实现原理

  这里简要分析一下实现过程,已知WS2812的驱动时序如下:

QQ截图20221210163949.png


  可以看到上图中,驱动一个灯需要24个0码或者1码,一个0码或者1码都包含一段高电平和低电平,且1个码的高电平和低电平时间相加为1.1us±300ns,当然这种时序我们完全可以用IO口模拟实现,不过这里我们可以尝试用SPI驱动。

QQ截图20221210164311.png


  标准的SPI协议如上图所示,有SCLK,SS,MOSI和MISO四个引脚,首先排除SS这个片选引脚,其次SCLK只能发时钟信号,离我们的一个高点平,一个低电平有点区别,暂时放弃,那MOSI刚好作为一个输出引脚,且输出的脉冲宽度可控,我们就可以选择他作为输出来实现我们的时序模拟。

  配合我们的示波器,我们在44.2368的IRC时钟之下,发出的0码和1码分别如下图所示:

IMG_20221206_114514.jpg

IMG_20221206_114535.jpg

  可以看到DATA引脚上(这里是P13引脚)输出的0码的总时间约为1.22us,正脉宽约为280ns,负脉宽约为935ns;0码的总时间约为1.19us,正脉宽约为749ns,负脉宽约为442ns。完全符合我们的驱动时序,所以SPI驱动可行。详细代码可以直接下载附件查看,有用或者好用的话希望小伙伴们可以在帖子下面留言点赞,这里就不详细展开了,要是小伙伴们实在需要的话我单独开一贴讲讲代码~


USB转双串口之SPI驱动WS2812.rar

266.34 KB, 下载次数: 641

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2024-1-1 17:04:09 | 显示全部楼层

点评

STC32G的SPI+DMA驱动ws2812的应该好早就贴出来了的,本来就不需要反相器  详情 回复 发表于 2024-1-1 23:09
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-24 13:36:20

8

主题

39

回帖

342

积分

中级会员

积分
342
发表于 2022-12-11 09:22:53 | 显示全部楼层
超详细的教程!!!!!!!!
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2022-12-11 12:45:52 | 显示全部楼层
绝对本坛 点灯大师 爱的奉献

2

主题

9

回帖

141

积分

注册会员

积分
141
发表于 2022-12-28 15:20:43 | 显示全部楼层
下载程序例程完美运行。但遇到个问题当我把灯数量WS_NUM 设置100或更多 在主函数调用
WS2812_ColorSetAll(255,0,0);
WS2812_ColorFresh();
delay_ms(250);
灯显示混乱,这里有办法解决吗
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2022-12-28 16:45:11 | 显示全部楼层
你是哪*** 发表于 2022-12-28 15:20
下载程序例程完美运行。但遇到个问题当我把灯数量WS_NUM 设置100或更多 在主函数调用
WS2812_ColorSetAll(2 ...

这个灯显示混乱是个什么现象呢?是所有的灯颜色都不对了还是最末尾的几个不对了呢?

2

主题

9

回帖

141

积分

注册会员

积分
141
发表于 2022-12-29 08:56:42 | 显示全部楼层
电子DI*** 发表于 2022-12-28 16:45
这个灯显示混乱是个什么现象呢?是所有的灯颜色都不对了还是最末尾的几个不对了呢? ...

是末尾不对 前面显示正常正确 后面显示另一种颜色
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2022-12-29 10:34:57 | 显示全部楼层
你是哪*** 发表于 2022-12-29 08:56
是末尾不对 前面显示正常正确 后面显示另一种颜色
  1. //========================================================================
  2. // 函数: void WS2812_ColorFresh(void)
  3. // 描述: WS2812的颜色批量输出
  4. // 参数:
  5. // 返回: none.
  6. // 版本: VER1.0
  7. // 日期: 2022-15-5
  8. // 备注: 调用完记得调用
  9. //========================================================================
  10. void WS2812_ColorFresh(void)
  11. {
  12.     u8 i=0;
  13.     for(i=0;i<WS_NUM*3;i++)
  14.         WS2812_WriteByte(Color_Buff[i]);
  15. }
复制代码
这个刷新的代码里,WS2812_WriteByte这个函数目前最大值只有255,你把i的类型从u8改成u16试试,u8的话只能控制255/3个灯,u16可以控制65535/3个灯,另外WS2812_ColorSetAll函数里的变量类型也修改下。
回复 支持 1 反对 0

使用道具 举报 送花

2

主题

9

回帖

141

积分

注册会员

积分
141
发表于 2022-12-29 11:26:10 | 显示全部楼层
电子DI*** 发表于 2022-12-29 10:34
这个刷新的代码里,WS2812_WriteByte这个函数目前最大值只有255,你把i的类型从u8改成u16试试,u8的话只 ...

改了之后正常了 确实是定义的问题 感谢楼主
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2022-12-29 16:28:00 | 显示全部楼层
你是哪*** 发表于 2022-12-29 11:26
改了之后正常了 确实是定义的问题 感谢楼主

客气了,祝你用的愉快:lol

2

主题

3

回帖

27

积分

新手上路

积分
27
发表于 2023-3-27 22:00:08 | 显示全部楼层
STC-SPI 最大的设计失败,就是MOSI 空闲 不能配置成低电平

点评

同感 !!! WS2812 多级串联, 当数据量超出 DMA 缓冲区长度时, 就不能直接 使用了, 必须外加一级反相器, 才能可靠的分多次传送.  详情 回复 发表于 2023-12-30 09:31
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:45 , Processed in 0.132722 second(s), 131 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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