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

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 编辑
" r3 ~. l* ~% r4 A, d- O7 o3 B" Y3 X7 V9 n
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
1 M/ o- \5 U3 K( m: r. ZSTM32F103C8T6 SPI2 16分频 2.25Mbps完美实现。
0 u/ C  `$ O8 r: m
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
8 K0 u$ Q. P* z8 d/ G7 }; `其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
' y+ I& g1 [9 P( E% p4 E2 JSTM32F103C8T6 SPI2  ...

1 ?1 G: H2 z" N0 E2 @9 P# \7 V( h厉害!
5 E- r7 ^, S4 `+ f但3bit要对齐8bit的变量点难度哦。
3 m" {' R5 R# C) V7 N5 p  U请教一下用什么方法对齐变量的?
yyq006 回答时间:2018-3-22 15:21:03
按颜色处理,每种颜色正好3个字节,处理不算复杂。
, n) |5 @/ i2 _) B8 C' @压缩存储位可以节省空间,但数据处理要多花一些时间,使用中要根据实际情况来选择。
waiman 回答时间:2018-3-23 22:54:57
yyq006 发表于 2018-3-22 15:21
( `. D! M: J, q按颜色处理,每种颜色正好3个字节,处理不算复杂。" S; f4 {  a: R- g' d2 p
压缩存储位可以节省空间,但数据处理要多花一些时间,使 ...

+ ]0 c( K5 L' J7 A6 b9 o% I. o相当于用Flash和运算时间换RAM空间。
jjbboox 回答时间:2018-3-24 11:24:04
本帖最后由 jjbboox 于 2018-3-24 11:25 编辑
$ F- E4 J: o( o, I  @# i
waiman-156411 发表于 2018-3-22 10:06
  @( R4 {/ e- w厉害!
8 l0 r3 t; S- P% g: u但3bit要对齐8bit的变量点难度哦。, U8 Q! \, B" d# ]  y
请教一下用什么方法对齐变量的? ...
1 C2 G) I8 u! _8 H) @& E7 ^
110代表1
: m, N! f- w# X. S+ x100代表0+ w& l" h  l. X- c! @/ J. L; Z6 }
# G* |: H1 d; g/ w/ A
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
8 a' j3 B, n2 v所以我將PIXELS_LEN 改成 1 後 燈就不動作1 d7 @! X4 g" U
能問一下還有什麼地方沒注意到的$ `& c& `$ m2 t" S  v
感謝
jjbboox 回答时间:2018-3-27 23:02:26
lin-ba-xin 发表于 2018-3-27 22:04. @( ]6 Z7 y4 z" H9 y& \3 q+ @
請問 我目前只驅動一顆WS2812 9 K7 O  W/ h/ i4 }" b3 `* }
所以我將PIXELS_LEN 改成 1 後 燈就不動作1 z- X4 x' J' o* e$ b) V
能問一下還有什麼地方沒注意到的
, y7 Y: @; C7 ~* U2 `
可能是你的reset信号不正确,或者说低电平的持续时间不够。
翱翔云端的鸟 回答时间:2018-4-9 15:02:45
jjbboox 发表于 2018-3-21 17:36
) ~. f# {% S& T9 V; s% s其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。, `1 B  X4 h! `
STM32F103C8T6 SPI2  ...
8 _6 v- L3 [8 F+ W& [, q
2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte
* C' K+ X3 e* i5 O3 J# B2 w" S7 |4 q% ^这里24bit应该是9byte的数据吧?
" e' [) \  \0 q$ F6 p$ M( G; s   
jjbboox 回答时间:2018-4-10 07:30:42
本帖最后由 jjbboox 于 2018-4-10 07:35 编辑
# F4 V. f, O/ a. z
翱翔云端的鸟 发表于 2018-4-9 15:02
7 W0 e( q# ^" p2 D9 z2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte ...
; Q( o( y7 L$ d
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
1 K4 G& |) N- H7 z0 X% d9 K比如8颗粒的灯条,那么分配的内存就应该是8 * 9 + 32 = 104字节。3 ]2 v$ b/ _# ?4 S5 K
16颗粒的灯条就是 16 * 9 + 32 = 176 字节3 k$ M0 S5 i% r/ L2 e. b% {
翱翔云端的鸟 回答时间:2018-4-10 09:42:55
jjbboox 发表于 2018-4-10 07:30- S3 B$ Q5 P$ z+ ?
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。$ v. A$ B; F+ ~6 N
比如8颗粒的灯条,那么分配的内存就应该是 ...

9 Z, w0 I% o3 _/ ^4 a0 ^3 e我现在遇到一个问题    3bit表示一个code     001  表示0code         110表示1code     
3 K' j$ Z5 H2 O0 z6 z6 K% Z当我要发送9byte的一个24bit颜色值的时候  比如是传输红色0 C6 E6 w4 @4 n/ S" W3 |+ W; f
按照G R B  传输 为   0x00  0xFF  0x00   
. F+ H) Z/ T" V1 j) p1 P& [( B5 S* l" k: x0 U( l
转换为二进制
! K* Y0 j2 V" @$ Y5 d001 001 001 001 001 001 001 001 001 001 001
: u4 V/ T1 l) j- ?' m7 G110 110 110 110 110 110 110 110 110 110 110
2 i; X5 f6 Y9 H- I001 001 001 001 001 001 001 001 001 001 001 5 n+ }' c+ d  w7 u

& |" l) A4 h3 C3 N7 FSPI数据为:3 ?5 U( r" z% p0 Y$ u% S# g/ _
        0x24                0x92                0x49
1 x, K0 w- ]2 r0010 0100   1001 0010    0100 1001  9 [& x! D8 v0 [* m* e$ Y- P
        0xDB                0x6D                0xB6
& v. H" [* d& z5 {* {- V; H1101 1011   0110 1101    1011 0110
5 S: o) R4 x+ j0 c        0x24                0x92                0x49% q+ G, _1 u) t$ p  W) [
0010 0100   1001 0010    0100 1001
5 E, T; Y  J2 r' q0 y$ d/ z+ b  v! n. M

! K8 [5 k: a4 ^# @/ Z6 W2 G4 L这里的问题是当我SPI发送完0x24之后  发送0x92的时候  0x24的最后一位是0  0x92最后一位是1   导致0x24的最后一个0码和0x92的1码混合了  
翱翔云端的鸟 回答时间:2018-4-10 09:43:50
jjbboox 发表于 2018-4-10 07:30$ X& Z" Y+ R. L5 G; p
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。8 A0 J2 y- z/ `- O& a8 x
比如8颗粒的灯条,那么分配的内存就应该是 ...
7 K. N! E6 V) b) m
另外  楼主这里的4M  是不是改为 3.2M更合适啊   

所属标签

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