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

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

[复制链接]
waiman 发布时间:2018-2-6 15:03
阅读主题, 点击返回1楼
1 收藏 28 评论77 发布时间:2018-2-6 15:03
77个回答
翱翔云端的鸟 回答时间:2018-4-10 09:45:13
jjbboox 发表于 2018-4-10 07:303 B: I2 d! S( x9 z. v9 H# i
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
* x; W8 k$ ?2 [9 d4 v3 w+ `比如8颗粒的灯条,那么分配的内存就应该是 ...

% x( x" [+ g$ t$ q) t+ L# \选择数据当做0码 1码的时候  是不是需要 首尾有限制
jjbboox 回答时间:2018-4-10 13:34:21
本帖最后由 jjbboox 于 2018-4-10 13:39 编辑 , H6 Q5 x, d& N- W& o( ^  t, |; L
翱翔云端的鸟 发表于 2018-4-10 09:45
, @( d  {- F' E) X2 w; K: D& z选择数据当做0码 1码的时候  是不是需要 首尾有限制

- ?2 e% S3 a% D' m% w/ {用3位代表1个bit通过SPI方式驱动WS2812时,SPI的速度请调整到2.25Mbps
) k9 \/ N; Q! d7 p1 g( ~. N! i( H8 i8 d0 x3 q
以下是我用的代码,供你参考。ptr指向SPI Buf,value 是要转码的值。& R6 F1 x( ^! z  W+ V3 n- O

: u- D/ V; a2 t: B; m6 c
  1. #define        PIXEL_BYTE_0        (0x92)                                //10010010
    6 v' J; z* P# s4 D
  2.         #define        PIXEL_BYTE_1        (0x49)                                //01001001
    $ h7 v2 Y9 u5 G, A6 ^
  3.         #define        PIXEL_BYTE_2        (0x24)                                //001001007 Y: k; @7 b4 K+ x; G5 \# R
  4. 5 h" W: ?3 _- }0 {0 E: q
  5.         uint16_t ws2812_spi::setbuffer(){
    . H7 \& o( M0 {# _: k7 u
  6.                 uint8_t *ptr = buf_ptr + 16;5 j& r: S+ G. V! s3 o' A
  7.                 if(pixel_count == 0 || pixels == NULL || buf_ptr == NULL); K, o$ [1 k" w0 S$ _' l7 X0 g
  8.                         return 0;5 {1 L5 \8 L- g! q: J4 I6 t9 |
  9.                 else {" W1 R; F( D" L9 J
  10.                         for(int i = 0; i < pixel_count; i ++){
      }9 g4 I7 ^5 ~. Q3 r$ F
  11.                                 ptr = setPixelBuf(ptr, (pixels[i].green) * pixels[i].brightness / 0x100);1 d) A3 h# ?  _- y+ x) J
  12.                                 ptr = setPixelBuf(ptr, (pixels[i].red) * pixels[i].brightness / 0x100);
    $ w# \0 N4 E8 Y; H1 j' Z( ?
  13.                                 ptr = setPixelBuf(ptr, (pixels[i].blue) * pixels[i].brightness / 0x100);7 L) J" C* S! m: i, ?
  14.                         }! G4 b3 E$ J" ~; L; \2 ]
  15.                 }! A5 G, p% s5 b7 L
  16.                 return (ptr - buf_ptr);2 `1 d" W. \6 j- a* `! H
  17.         }
    2 h- U1 {/ X/ S
  18. * O* W) C& q. P9 I. g
  19.         uint8_t* ws2812_spi::setPixelBuf(uint8_t *ptr, uint8_t value)) ?9 k; y; _3 s4 f$ v5 c
  20.         {
    0 E; w7 L% D5 q3 ]6 h2 S7 m2 Q; z
  21.                 ptr[0] = PIXEL_BYTE_0;, j1 S* J+ r* ]; @5 c* G' {9 m
  22.                 ptr[1] = PIXEL_BYTE_1;
    / s1 P( G# k7 v6 ^* u, Q
  23.                 ptr[2] = PIXEL_BYTE_2;
    " X6 ^7 ]! s4 Q2 _

  24. 1 ?$ t: ]6 M, h
  25.                 ptr[0] |= (value & 0x80)?(0x40):0x00;4 P( @, Y& {* ?  l% ~3 i
  26.                 value <<= 1;- V3 e  M4 {& s; X: x: H
  27.                 ptr[0] |= (value & 0x80)?(0x08):0x00;" m9 m4 [1 x' ^3 B# ?7 G1 U7 Y
  28.                 value <<= 1;8 d2 p3 v5 K& w9 J
  29.                 ptr[0] |= (value & 0x80)?(0x01):0x00;
    ( l+ }* K- q+ X0 H
  30.                 value <<= 1;5 r9 s8 w- i; Y: `
  31.                 ptr[1] |= (value & 0x80)?(0x20):0x00;8 x" i6 G3 x1 k0 P9 n
  32.                 value <<= 1;) l) @8 }2 Q2 h1 M- q. [
  33.                 ptr[1] |= (value & 0x80)?(0x04):0x00;
    / g8 r7 h0 P5 H4 @; q
  34.                 value <<= 1;
    . O% [( P2 [6 g1 d
  35.                 ptr[2] |= (value & 0x80)?(0x80):0x00;5 f3 k- S/ h, x' x2 ~
  36.                 value <<= 1;. \7 K8 [% E# F1 r( H1 {
  37.                 ptr[2] |= (value & 0x80)?(0x10):0x00;
    0 u' G* P8 {, ]' K- f$ h2 l+ ^& z  M
  38.                 value <<= 1;) q6 A' ]. h# Q- O* U1 u
  39.                 ptr[2] |= (value & 0x80)?(0x20):0x00;3 E- ^3 }- D% r$ \
  40.                 value <<= 1;7 L4 U! g) q  c5 ?
  41. ' S0 b3 q0 x/ D( m1 F
  42.                 return (ptr + 3);
    . r: W$ z' z" w- l% @( A0 y& \
  43.         }7 ^. ^4 d# Z& J( K/ R1 k2 F
复制代码
" i8 h% {1 z- Z& ]

; l9 R2 `$ h+ e8 X+ J1 |
a6161220 回答时间:2018-4-11 12:23:19
歇息学习
Belong..to.. 回答时间:2018-4-22 00:56:04
12321213321231132132132
Belong..to.. 回答时间:2018-4-22 00:57:49
请问去问我去恶趣味恶趣味
Belong..to.. 回答时间:2018-4-22 00:58:13
请问恶趣味恶趣味恶趣味恶趣味恶趣味
Belong..to.. 回答时间:2018-4-22 00:58:59
21333333333333333333333333
Belong..to.. 回答时间:2018-4-22 01:00:59
请问去问我去额外企鹅完全额外
Belong..to.. 回答时间:2018-4-22 02:15:03
请问恶趣味恶趣味委屈委屈
shih-min 回答时间:2018-4-23 11:26:46
好东西,谢谢分享
hufuha2 回答时间:2018-6-25 11:05:09
先看看了
ccav2010 回答时间:2018-7-24 15:08:34
思路新颖!赞一个
00dd 回答时间:2018-8-9 13:54:58
本帖最后由 00dd 于 2018-8-9 14:10 编辑
* G+ @% _3 m5 s. ?8 _0 S0 Q1 T, `# R' z; d7 ?2 o0 R# `
滴滴滴滴的第一
00dd 回答时间:2018-8-23 22:26:08
jjbboox 发表于 2018-3-21 17:36# `7 ?  o8 x5 q! ]
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
, @1 t( L* A* R* z1 q- HSTM32F103C8T6 SPI2  ...
. Y% N  k+ C' K, @" T
大佬,可以发源码参考一下吗?
al88 回答时间:2018-8-29 16:43:16
应该加精!!

所属标签

相似分享

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