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

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:30
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
比如8颗粒的灯条,那么分配的内存就应该是 ...

选择数据当做0码 1码的时候  是不是需要 首尾有限制
jjbboox 回答时间:2018-4-10 13:34:21
本帖最后由 jjbboox 于 2018-4-10 13:39 编辑
翱翔云端的鸟 发表于 2018-4-10 09:45
选择数据当做0码 1码的时候  是不是需要 首尾有限制

用3位代表1个bit通过SPI方式驱动WS2812时,SPI的速度请调整到2.25Mbps

以下是我用的代码,供你参考。ptr指向SPI Buf,value 是要转码的值。

  1. #define        PIXEL_BYTE_0        (0x92)                                //10010010
  2.         #define        PIXEL_BYTE_1        (0x49)                                //01001001
  3.         #define        PIXEL_BYTE_2        (0x24)                                //00100100

  4.         uint16_t ws2812_spi::setbuffer(){
  5.                 uint8_t *ptr = buf_ptr + 16;
  6.                 if(pixel_count == 0 || pixels == NULL || buf_ptr == NULL)
  7.                         return 0;
  8.                 else {
  9.                         for(int i = 0; i < pixel_count; i ++){
  10.                                 ptr = setPixelBuf(ptr, (pixels[i].green) * pixels[i].brightness / 0x100);
  11.                                 ptr = setPixelBuf(ptr, (pixels[i].red) * pixels[i].brightness / 0x100);
  12.                                 ptr = setPixelBuf(ptr, (pixels[i].blue) * pixels[i].brightness / 0x100);
  13.                         }
  14.                 }
  15.                 return (ptr - buf_ptr);
  16.         }

  17.         uint8_t* ws2812_spi::setPixelBuf(uint8_t *ptr, uint8_t value)
  18.         {
  19.                 ptr[0] = PIXEL_BYTE_0;
  20.                 ptr[1] = PIXEL_BYTE_1;
  21.                 ptr[2] = PIXEL_BYTE_2;

  22.                 ptr[0] |= (value & 0x80)?(0x40):0x00;
  23.                 value <<= 1;
  24.                 ptr[0] |= (value & 0x80)?(0x08):0x00;
  25.                 value <<= 1;
  26.                 ptr[0] |= (value & 0x80)?(0x01):0x00;
  27.                 value <<= 1;
  28.                 ptr[1] |= (value & 0x80)?(0x20):0x00;
  29.                 value <<= 1;
  30.                 ptr[1] |= (value & 0x80)?(0x04):0x00;
  31.                 value <<= 1;
  32.                 ptr[2] |= (value & 0x80)?(0x80):0x00;
  33.                 value <<= 1;
  34.                 ptr[2] |= (value & 0x80)?(0x10):0x00;
  35.                 value <<= 1;
  36.                 ptr[2] |= (value & 0x80)?(0x20):0x00;
  37.                 value <<= 1;

  38.                 return (ptr + 3);
  39.         }
复制代码


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 编辑

滴滴滴滴的第一
00dd 回答时间:2018-8-23 22:26:08
jjbboox 发表于 2018-3-21 17:36
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
STM32F103C8T6 SPI2  ...

大佬,可以发源码参考一下吗?
al88 回答时间:2018-8-29 16:43:16
应该加精!!

所属标签

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