23回答

1收藏

STM32 HAL库使用SPI+DMA驱动WS2812优化方案

 

其他 其他 5473 人阅读 | 23 人回复 | 2020-07-21

看到zoomdy 的驱动例子启发 http://www.stmcu.org.cn/module/forum/thread-610279-1-1.html
效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。


仔细一看发现 WS2812一个bit 周期是:
         TH+TL=1250ns (±600ns), Min=650ns,Max=1850ns
如果把SPI提速到4Mbits/S 的时候,SPI一个bit的周期是250ns,刚好和符合WS2812 T0H或T1L 400ns ±150ns范围。SPI 4个bit的周期刚好1000ns,刚好可以满足WS2812的时序需求。
SPI=0x8 等于 WS2812的 0
SPI=0xE 等于  WS2812的 1
也就变成一个SPI的byte,可以表示2个Ws2812的2个bit。一RGB像素颜色只需要 24bit/2bit = 12byte


SPI速度及极性配置:



SPI只需要配置主机只发模式,这样可以节省一个IO口


驱动整盘WS2812都很轻松
   

驱动库说明:
例子使用Stm32CubMx 4.23,STM32L151C8T6,IAR/MDK工程
程序移植了Adafruit NeoPixel库函数,
采用HAL库驱动方式(struct),可以方便移植到其他STM32芯片上,
只需要分配多个struct变量,硬件稍微改下,就能分时复用,控制多串灯珠。




游客,如果您要查看本帖隐藏内容请回复

分享到:
回复

使用道具 举报

回答|共 23 个

倒序浏览

6#

lenghanbing444

发表于 2021-6-30 10:55:41 | 只看该作者

想学习下,多谢
回复 支持 反对

使用道具 举报

9#

忘忧123

发表于 2021-9-13 11:56:03 | 只看该作者


想学习下,多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条