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

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

[复制链接]
STMCU小助手 发布时间:2022-1-6 22:00
效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。
( h; R/ }, U, C: u. k
" W# N- w0 y( S  Y
% q- K$ ~$ A: t( I7 C& |/ u仔细一看发现 WS2812一个bit 周期是:
/ D6 n' A8 D) y2 h8 [/ J, A: Z- a         TH+TL=1250ns (±600ns), Min=650ns,Max=1850ns' \% B( f7 g" g  a# ^4 C
如果把SPI提速到4Mbits/S 的时候,SPI一个bit的周期是250ns,刚好和符合WS2812 T0H或T1L 400ns ±150ns范围。SPI 4个bit的周期刚好1000ns,刚好可以满足WS2812的时序需求。4 a& d& a% m% d; `0 m
SPI=0x8 等于 WS2812的 0
; ~+ H# d# |" r6 \SPI=0xE 等于  WS2812的 1
) e8 [( U- d3 X; C8 G也就变成一个SPI的byte,可以表示2个Ws2812的2个bit。一RGB像素颜色只需要 24bit/2bit = 12byte8 \5 V& n4 e8 Y6 Z) t; N9 c0 \! b

" V3 L$ `* H  e  q7 r1 b
7 F0 S. ^+ q1 |, b5 N) j6 tSPI速度及极性配置:
, g  |0 Y1 D. t" E4 a" y. `5 {8 U; g7 `7 b- m: X% |

; w! I0 l% K6 \% W: `6 Z0 R3 F% j) N5 e9 u1 J3 G+ Z' n, h; [* E
SPI只需要配置主机只发模式,这样可以节省一个IO口9 `6 E) V4 {' e- p8 ~& l

7 X7 G0 m: s$ |9 s
8 ]$ l5 y0 E: i驱动整盘WS2812都很轻松
# f5 }8 @6 m, }! ~3 p9 r    9 f4 m4 {/ w. q& j5 g

  T; t% R) ^5 V" }2 @驱动库说明:
# Q7 g! T. _0 }$ N1 V1 \! l! u例子使用Stm32CubMx 4.23,STM32L151C8T6,IAR/MDK工程
0 S6 n$ I- M7 M9 F' V$ g* S- H程序移植了Adafruit NeoPixel库函数,
$ t3 b- w; M; }6 t+ }) u' w采用HAL库驱动方式(struct),可以方便移植到其他STM32芯片上,. n: L) q' g% V; ^2 \8 O" Y4 U3 H$ ]6 d
只需要分配多个struct变量,硬件稍微改下,就能分时复用,控制多串灯珠。
- C$ l- s5 Q$ j  m( y' [
( V, {2 U& a: M+ m. }3 f, ]# X2 v6 t6 R6 K
赞 收藏 评论0 发布时间:2022-1-6 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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