你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 HAL库使用SPI+DMA驱动WS2812优化方案

[复制链接]
STMCU小助手 发布时间:2022-1-6 22:00
效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。" x; q4 Y; P% H) b6 h  j/ Q: I/ e; H
1 B- T3 f' f+ f# ]+ N1 @

3 ~1 ^* r0 ]+ h$ \+ m3 A仔细一看发现 WS2812一个bit 周期是:' Q& @+ R" p5 a2 R9 W" g
         TH+TL=1250ns (±600ns), Min=650ns,Max=1850ns% A! W" J( Z& O% r3 m3 p) M% K
如果把SPI提速到4Mbits/S 的时候,SPI一个bit的周期是250ns,刚好和符合WS2812 T0H或T1L 400ns ±150ns范围。SPI 4个bit的周期刚好1000ns,刚好可以满足WS2812的时序需求。
" j4 y* v. B  t* W7 w, r! _1 KSPI=0x8 等于 WS2812的 0% i' l- S  c: ]7 D. D
SPI=0xE 等于  WS2812的 1  P7 A  i/ s* E
也就变成一个SPI的byte,可以表示2个Ws2812的2个bit。一RGB像素颜色只需要 24bit/2bit = 12byte- U1 i, o; j) Z) F6 O" a  n' N
( t" n' v, x* t$ d0 \
4 k; ~% A( T) @1 p9 |& R( u" J
SPI速度及极性配置:
& V' n* V% ]  m4 d% R7 U: g+ g1 i! D1 q0 `( g  M
. B- K- I9 _* D7 q" K# m: \& M1 z. D9 W
& t4 I# S/ `7 q3 F
SPI只需要配置主机只发模式,这样可以节省一个IO口) G8 O5 q; }. q/ f5 i) y4 F
$ S& a3 M( N3 X# }6 |9 }
5 n% E/ C, i, Z
驱动整盘WS2812都很轻松
) ^# Y, @/ b4 N    
' [  @5 |0 n7 C& f* L" V$ n
; n6 B8 M9 t5 {# f3 w: C驱动库说明:( Z. ]% f/ U/ U1 u
例子使用Stm32CubMx 4.23,STM32L151C8T6,IAR/MDK工程
& c' ?& I" ?( h! Q程序移植了Adafruit NeoPixel库函数,6 [7 D$ x5 N) U3 g1 N' U9 Y
采用HAL库驱动方式(struct),可以方便移植到其他STM32芯片上,
% C" b, q3 J) G; j# i, y$ B) W+ j只需要分配多个struct变量,硬件稍微改下,就能分时复用,控制多串灯珠。9 I6 M: {* g3 I: A# ?5 ^! i# l9 J
9 S9 o! o: B( W1 s6 h% H

! L  ^% ]% e* R; T
赞 收藏 评论0 发布时间:2022-1-6 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版