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

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 编辑
) }5 c6 e$ b) u+ S7 H: v! l6 k: N1 |1 j0 a9 Q# C0 l' ?
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。% [+ a! h) k, \! u8 N
STM32F103C8T6 SPI2 16分频 2.25Mbps完美实现。4 @1 `* Y1 k; M7 U/ b( ^
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
) F/ n- @9 V! f7 k; q其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。1 j9 w8 N" r* r- M- [0 `1 x
STM32F103C8T6 SPI2  ...
# K- g# z4 F: R" O  `
厉害!9 C+ C6 g) E  ]6 ]1 x& X  h8 J+ }
但3bit要对齐8bit的变量点难度哦。
" G+ @! n1 n7 F* K  T, D请教一下用什么方法对齐变量的?
yyq006 回答时间:2018-3-22 15:21:03
按颜色处理,每种颜色正好3个字节,处理不算复杂。- y* m" o, q) @* w$ G! v
压缩存储位可以节省空间,但数据处理要多花一些时间,使用中要根据实际情况来选择。
waiman 回答时间:2018-3-23 22:54:57
yyq006 发表于 2018-3-22 15:216 b0 T7 ]) H( N7 k7 r
按颜色处理,每种颜色正好3个字节,处理不算复杂。
) y' _7 u: r9 W1 O压缩存储位可以节省空间,但数据处理要多花一些时间,使 ...
, p7 y1 _( ^5 j( H
相当于用Flash和运算时间换RAM空间。
jjbboox 回答时间:2018-3-24 11:24:04
本帖最后由 jjbboox 于 2018-3-24 11:25 编辑
% @8 L" L) S2 g, z1 g
waiman-156411 发表于 2018-3-22 10:06
/ S8 J0 j5 Z& ~' @: V- B厉害!
; H5 ^7 D2 @/ q3 d% V- b4 S但3bit要对齐8bit的变量点难度哦。! v$ m! ^6 R/ c$ m3 X
请教一下用什么方法对齐变量的? ...

8 A+ P, R" ?1 [/ t7 |' P4 F( {# K7 {110代表1
' N! U6 |+ ?: L& y$ G0 S' Y9 {100代表0
6 D8 z3 x' x, ^) {# M" B8 B5 ^  s& q' E$ |7 _
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 1 P4 s0 x/ c! D3 W
所以我將PIXELS_LEN 改成 1 後 燈就不動作
8 |  k, z/ ]% c- @: m+ ?& l7 n能問一下還有什麼地方沒注意到的4 W/ p4 j9 G; s! v  D
感謝
jjbboox 回答时间:2018-3-27 23:02:26
lin-ba-xin 发表于 2018-3-27 22:04
$ R3 O6 d% o9 W% F4 `6 X& F請問 我目前只驅動一顆WS2812 $ ^7 E6 C  U( R2 n, X# k; g6 c# T
所以我將PIXELS_LEN 改成 1 後 燈就不動作2 D% d+ G1 f, I8 c, R, n7 T& i$ t
能問一下還有什麼地方沒注意到的
; l+ s1 ?) ]! B
可能是你的reset信号不正确,或者说低电平的持续时间不够。
翱翔云端的鸟 回答时间:2018-4-9 15:02:45
jjbboox 发表于 2018-3-21 17:367 g- u+ A: G6 t$ O7 ?" e, [1 `% h4 J6 K
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
1 R8 e, _, U; W: gSTM32F103C8T6 SPI2  ...

3 X! o) n/ b  O# V+ g" R2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte 1 ?# A4 H* P9 t% D# j4 i8 r+ O: `
这里24bit应该是9byte的数据吧?$ ^) H& Q* I4 c1 D
   
jjbboox 回答时间:2018-4-10 07:30:42
本帖最后由 jjbboox 于 2018-4-10 07:35 编辑
$ L7 \1 F5 \; i( P" `1 e) i& }
翱翔云端的鸟 发表于 2018-4-9 15:02
* L4 I% Y+ m) w/ Z5 U2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte ...

$ r4 A! S2 h5 U% h  @' B是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
- Z  J$ A8 ~& H  C% B7 C" J) L比如8颗粒的灯条,那么分配的内存就应该是8 * 9 + 32 = 104字节。: r( A/ [* s0 C+ t5 G. Z& s+ h
16颗粒的灯条就是 16 * 9 + 32 = 176 字节
" |& n5 A$ g- u2 y4 e, r0 O+ X
翱翔云端的鸟 回答时间:2018-4-10 09:42:55
jjbboox 发表于 2018-4-10 07:30
# f4 r1 L6 `( J7 v- _( Y是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。5 C' {# M; O. @
比如8颗粒的灯条,那么分配的内存就应该是 ...
& R/ s- Q& l2 x1 D) O/ P  X) ^
我现在遇到一个问题    3bit表示一个code     001  表示0code         110表示1code     
# x9 G/ C# z" b* m6 r- j6 E* t: [当我要发送9byte的一个24bit颜色值的时候  比如是传输红色
" j' M3 V6 Q" g; W按照G R B  传输 为   0x00  0xFF  0x00   
! @6 [* ^! @1 {& t" y, @8 g( g3 u) |0 W" X/ K+ \
转换为二进制/ L0 E8 h6 N5 c: j8 n
001 001 001 001 001 001 001 001 001 001 0019 @" g: v; |% k( I! w' D
110 110 110 110 110 110 110 110 110 110 110
% u# b: ?3 A( S5 A# ?001 001 001 001 001 001 001 001 001 001 001
, F9 k  H5 Q! T8 v
  z8 r+ k5 _: FSPI数据为:: X$ B3 _; H2 {
        0x24                0x92                0x491 Q  ]* h8 l6 s1 p( [+ C
0010 0100   1001 0010    0100 1001  
  r3 l8 n' M/ N3 C        0xDB                0x6D                0xB6
& R9 R( }- C+ m1 d8 S1101 1011   0110 1101    1011 0110
& X' t/ m. \  Y5 }5 r! X8 [% E        0x24                0x92                0x49
- B. A# p0 F" ]2 _. o, d$ Y0010 0100   1001 0010    0100 1001
6 z, l2 r5 I' E! x
2 e+ W; }+ v: K
" E* M' T) |( C9 T; U9 P3 a这里的问题是当我SPI发送完0x24之后  发送0x92的时候  0x24的最后一位是0  0x92最后一位是1   导致0x24的最后一个0码和0x92的1码混合了  
翱翔云端的鸟 回答时间:2018-4-10 09:43:50
jjbboox 发表于 2018-4-10 07:30
; G2 x% s9 K' B9 Y0 y, t是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。. |% c4 r$ W& C$ }( ?
比如8颗粒的灯条,那么分配的内存就应该是 ...
* g) e; a6 b2 S9 `3 W
另外  楼主这里的4M  是不是改为 3.2M更合适啊   

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版