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

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

[复制链接]
waiman 发布时间:2018-2-6 15:03
阅读主题, 点击返回1楼
1 收藏 28 评论77 发布时间:2018-2-6 15:03
77个回答
jjbboox 回答时间:2018-3-21 17:36:10
本帖最后由 jjbboox 于 2018-3-21 17:39 编辑 8 V, {+ J! V9 K  m

8 y. Z: a( W" x3 a0 m& v% X其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
1 [: G$ m" A* h2 z+ USTM32F103C8T6 SPI2 16分频 2.25Mbps完美实现。5 o1 m  I9 z0 l4 ~) h
yyq006 回答时间:2018-3-22 09:03:00
SPI速度调到2.5Mbps,对W2812来说时序确实更准确一些。不过一个像素是用9个字节。
waiman 回答时间:2018-3-22 10:06:37
jjbboox 发表于 2018-3-21 17:36
+ S( r  o4 w7 f, v# W其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
5 K. F% v- y9 s7 I7 r* T, OSTM32F103C8T6 SPI2  ...
( r# c9 H- _; j6 {4 c4 x
厉害!* T$ E. X% Z& v$ k& G
但3bit要对齐8bit的变量点难度哦。" T& N; X4 S% j) Q- p. `, y
请教一下用什么方法对齐变量的?
yyq006 回答时间:2018-3-22 15:21:03
按颜色处理,每种颜色正好3个字节,处理不算复杂。, ]7 k2 s; i- d3 @$ d( O
压缩存储位可以节省空间,但数据处理要多花一些时间,使用中要根据实际情况来选择。
waiman 回答时间:2018-3-23 22:54:57
yyq006 发表于 2018-3-22 15:21; B$ i- h: f8 P+ ]
按颜色处理,每种颜色正好3个字节,处理不算复杂。
0 `! Y( S: y1 k8 G压缩存储位可以节省空间,但数据处理要多花一些时间,使 ...

9 t* G2 E5 }3 x+ }) H+ ?相当于用Flash和运算时间换RAM空间。
jjbboox 回答时间:2018-3-24 11:24:04
本帖最后由 jjbboox 于 2018-3-24 11:25 编辑 7 s8 D8 k* l4 t: }* ~7 E- l
waiman-156411 发表于 2018-3-22 10:06
  E% L7 h+ u% Z厉害!0 I. w8 F% @4 P
但3bit要对齐8bit的变量点难度哦。5 Q" C$ ?1 Z0 Z) F+ Z
请教一下用什么方法对齐变量的? ...

% P; h1 q# r/ t110代表1
2 p4 ]/ |/ q, J! d; p* t; h' t$ y100代表0
, X- j. ~) E" T% k) t; H; L1 y
1 S, d4 x, J* `. ~/ C& C  m; ~7 x
sztyzhi 回答时间:2018-3-24 16:12:20
谢谢LZ
sztyzhi 回答时间:2018-3-24 16:12:54
再次感谢
nanren0542 回答时间:2018-3-24 21:23:21
好资料,需要学习
lin-ba-xin 回答时间:2018-3-27 22:04:41
請問 我目前只驅動一顆WS2812
. r) C$ O9 l% C2 @, B1 O' p' |所以我將PIXELS_LEN 改成 1 後 燈就不動作
5 {: c8 v- `; N能問一下還有什麼地方沒注意到的
$ h# E  f' x+ T. ~感謝
jjbboox 回答时间:2018-3-27 23:02:26
lin-ba-xin 发表于 2018-3-27 22:046 |) f. y: _3 }6 V9 p
請問 我目前只驅動一顆WS2812 8 h: a/ E( H; w1 {- r0 R1 O2 B
所以我將PIXELS_LEN 改成 1 後 燈就不動作7 X8 Y: e7 T( J" a0 n
能問一下還有什麼地方沒注意到的
4 k- e  g: X3 M+ z
可能是你的reset信号不正确,或者说低电平的持续时间不够。
翱翔云端的鸟 回答时间:2018-4-9 15:02:45
jjbboox 发表于 2018-3-21 17:36
( p) x; G1 `: [其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。7 W- E6 Q0 `$ U8 n
STM32F103C8T6 SPI2  ...
: B5 e+ }# d4 D- [. {0 {
2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte 4 ]  `5 _+ I  I2 M( I) l3 i
这里24bit应该是9byte的数据吧?0 G* T! ^! A: V- k
   
jjbboox 回答时间:2018-4-10 07:30:42
本帖最后由 jjbboox 于 2018-4-10 07:35 编辑
1 `6 F. P- s! Z: t) [7 z* K
翱翔云端的鸟 发表于 2018-4-9 15:02( y8 ]% S3 v" y1 H" a' ]6 v; A! K
2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte ...
2 i# q& o  G5 O, v* V1 i
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
: j* M5 k2 F2 A3 H% }比如8颗粒的灯条,那么分配的内存就应该是8 * 9 + 32 = 104字节。
: {) U0 n7 h4 J16颗粒的灯条就是 16 * 9 + 32 = 176 字节5 D/ ]6 a) y/ o6 @8 V, F* \
翱翔云端的鸟 回答时间:2018-4-10 09:42:55
jjbboox 发表于 2018-4-10 07:30
/ V/ n/ q0 I5 p( i$ z( o2 w是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。$ {6 g4 Q" y4 v1 J
比如8颗粒的灯条,那么分配的内存就应该是 ...
& s% H9 l* ^" m$ m
我现在遇到一个问题    3bit表示一个code     001  表示0code         110表示1code     
( T% ~0 E2 A6 ?8 C: a4 F& V0 U2 w, N当我要发送9byte的一个24bit颜色值的时候  比如是传输红色( e$ W$ _0 x/ D- H- h/ b, M" v, m
按照G R B  传输 为   0x00  0xFF  0x00   
9 Q# C, o5 Q( t" y
. n3 ]: k+ B9 ]# q$ Z转换为二进制
* S! k$ M. j/ ]" o' z001 001 001 001 001 001 001 001 001 001 001! a' `' x( [* J8 r9 Y9 o. A
110 110 110 110 110 110 110 110 110 110 1107 m5 k2 ~) m! B5 h* x; C/ D$ K
001 001 001 001 001 001 001 001 001 001 001
$ h; m8 p- x0 w) o4 }  O5 j( b+ _. F8 r3 H/ g0 Z3 j
SPI数据为:) D6 q/ y; K' _% m
        0x24                0x92                0x49* U" y) m( ]# p6 k0 y: M: K% h
0010 0100   1001 0010    0100 1001  + S2 F# J9 X; N% B* _. n4 G
        0xDB                0x6D                0xB6
+ Q% K9 y3 \7 t$ \, S8 c" e1101 1011   0110 1101    1011 0110
  g$ }* J/ b3 q' B' n! u. _  v5 i4 |- k/ }        0x24                0x92                0x499 I( Q; o' r* Y. A4 u' r. X
0010 0100   1001 0010    0100 1001
( k/ c; I1 j. i8 H) m
# H: l) M1 X9 b2 D2 M0 w
, N# z+ j2 \; j% X0 W这里的问题是当我SPI发送完0x24之后  发送0x92的时候  0x24的最后一位是0  0x92最后一位是1   导致0x24的最后一个0码和0x92的1码混合了  
翱翔云端的鸟 回答时间:2018-4-10 09:43:50
jjbboox 发表于 2018-4-10 07:30
+ s3 D$ m5 y( e1 G$ c! L是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
2 w/ n& E. h* X5 Z' f# K' a比如8颗粒的灯条,那么分配的内存就应该是 ...
/ ]) u" ?2 P$ R7 N. N: |9 p# ^
另外  楼主这里的4M  是不是改为 3.2M更合适啊   

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版