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

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:306 s9 G# _: |' d
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
, ]9 F0 k# M; y' F& S4 J7 _3 j; e比如8颗粒的灯条,那么分配的内存就应该是 ...

4 W% }7 X1 n2 w  P: Q) m选择数据当做0码 1码的时候  是不是需要 首尾有限制
jjbboox 回答时间:2018-4-10 13:34:21
本帖最后由 jjbboox 于 2018-4-10 13:39 编辑
: V; e7 u! y; `: e/ e
翱翔云端的鸟 发表于 2018-4-10 09:45
* K5 o& n3 b% F3 K. s9 {$ P# a$ ~( s选择数据当做0码 1码的时候  是不是需要 首尾有限制

# i/ A6 Z8 R8 [5 X用3位代表1个bit通过SPI方式驱动WS2812时,SPI的速度请调整到2.25Mbps
7 Z5 ?- J$ c% q( I& z0 M
! r! c3 z# C& D! `9 E' Y以下是我用的代码,供你参考。ptr指向SPI Buf,value 是要转码的值。
! k7 ~- i0 I3 J+ \2 N
* p: B7 {1 Z/ }
  1. #define        PIXEL_BYTE_0        (0x92)                                //10010010& N. W9 B# Q: _; z% O
  2.         #define        PIXEL_BYTE_1        (0x49)                                //01001001% a/ F; U. k) A- o+ i  M+ D7 T
  3.         #define        PIXEL_BYTE_2        (0x24)                                //00100100
    2 `7 ^4 @7 u# H% [6 W: Z* M

  4. ! c$ a/ Y0 K) u3 @7 j2 S. u
  5.         uint16_t ws2812_spi::setbuffer(){# \! u& q$ K5 |: z: D+ O
  6.                 uint8_t *ptr = buf_ptr + 16;
    3 L, J. ^; k6 V1 p2 i$ I- @3 W' I
  7.                 if(pixel_count == 0 || pixels == NULL || buf_ptr == NULL)9 F6 c2 }4 m0 G0 w6 X0 G, ^
  8.                         return 0;
    1 r/ u* v7 X# Y  i6 [" z( T3 ?4 g
  9.                 else {6 |+ q% s2 Z9 T. C( K/ s
  10.                         for(int i = 0; i < pixel_count; i ++){3 p# g% z# Z7 D8 \- c
  11.                                 ptr = setPixelBuf(ptr, (pixels[i].green) * pixels[i].brightness / 0x100);
    ) C. m+ K7 e+ Y
  12.                                 ptr = setPixelBuf(ptr, (pixels[i].red) * pixels[i].brightness / 0x100);7 c( d: q/ x# ~
  13.                                 ptr = setPixelBuf(ptr, (pixels[i].blue) * pixels[i].brightness / 0x100);# ^6 q1 V+ }5 d  a1 [. V5 [
  14.                         }* S$ o/ R2 j* \3 ~4 q8 a
  15.                 }; k9 S) ~: {2 M. i! |) }0 ~9 \5 W
  16.                 return (ptr - buf_ptr);
    % q2 m' j! @0 H) k+ q* b
  17.         }
    . O( A; o' E! Z. z4 z- v

  18. 6 F  Y: A0 }! n  J5 @
  19.         uint8_t* ws2812_spi::setPixelBuf(uint8_t *ptr, uint8_t value)6 v8 \" i9 Q6 y" \0 }+ M
  20.         {
    9 X: C$ h9 y; g1 Z4 d
  21.                 ptr[0] = PIXEL_BYTE_0;$ P6 D7 Q% |. y) m7 Z
  22.                 ptr[1] = PIXEL_BYTE_1;
    * v6 G+ m" ~; [" b# [
  23.                 ptr[2] = PIXEL_BYTE_2;
    1 S0 M( P2 |7 H; O; ~( @/ M) R
  24. + I! @& q8 J1 {) A9 ?
  25.                 ptr[0] |= (value & 0x80)?(0x40):0x00;
    , a1 P$ t$ e$ ]6 x* P/ v
  26.                 value <<= 1;
    - x2 y! g0 U3 f5 {2 F9 J, A$ D
  27.                 ptr[0] |= (value & 0x80)?(0x08):0x00;
    7 S& {; Z& o. H) a" c" l: a
  28.                 value <<= 1;
    2 v- P' @& D9 K  z
  29.                 ptr[0] |= (value & 0x80)?(0x01):0x00;. h, Z) q0 ~2 P9 F  b
  30.                 value <<= 1;
    * }/ k3 b. u/ X' c- E0 N, z3 C
  31.                 ptr[1] |= (value & 0x80)?(0x20):0x00;% I! D6 p+ Z/ V
  32.                 value <<= 1;
    * U$ X* q' ^, ~- Q' C
  33.                 ptr[1] |= (value & 0x80)?(0x04):0x00;
    1 Q, H; O+ ?- m5 f
  34.                 value <<= 1;( H* `( F/ F9 Q9 g! t# y
  35.                 ptr[2] |= (value & 0x80)?(0x80):0x00;
    / b+ S9 k1 y6 o: A4 d7 {
  36.                 value <<= 1;6 \* Q# T9 P9 W; h; X$ H- }
  37.                 ptr[2] |= (value & 0x80)?(0x10):0x00;' V3 f8 c- S# x& |9 i5 l1 y
  38.                 value <<= 1;  @0 j; U+ G8 @6 t6 m5 Z
  39.                 ptr[2] |= (value & 0x80)?(0x20):0x00;
    $ m5 K( z3 I; K$ n; ?. f* r* I. l( Q
  40.                 value <<= 1;
    " V. {& A) N6 _) y0 A# p' t
  41. 3 D) _' l. J) @7 N5 W
  42.                 return (ptr + 3);
    9 |4 ?' }! W2 H
  43.         }1 S% n- f5 ~! g" @4 J; P" D
复制代码

0 _$ j* U* i' a5 Q9 X" i- c% X) U( K0 T* m" ]: L+ q
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 编辑 , ~& {' E4 Y# {4 E" P

- N# g8 `5 E4 R2 z  G滴滴滴滴的第一
00dd 回答时间:2018-8-23 22:26:08
jjbboox 发表于 2018-3-21 17:36
4 b& |- a& a' r其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。  N2 K, s& k2 B6 r* D+ j
STM32F103C8T6 SPI2  ...

( B- z% R# D: u  }! z6 P) p$ B5 z大佬,可以发源码参考一下吗?
al88 回答时间:2018-8-29 16:43:16
应该加精!!

所属标签

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