搜索
楼主: waiman-156411

[原创] STM32 HAL库使用SPI+DMA驱动WS2812优化方案

  [复制链接]

该用户从未签到

1

主题

79

帖子

85

蝴蝶豆

高级会员

最后登录
2018-10-19
发表于 2018-3-24 11:24:04 | 显示全部楼层
本帖最后由 jjbboox 于 2018-3-24 11:25 编辑
waiman-156411 发表于 2018-3-22 10:06
厉害!
但3bit要对齐8bit的变量点难度哦。
请教一下用什么方法对齐变量的? ...

110代表1
100代表0

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

3

帖子

0

蝴蝶豆

新手上路

最后登录
2018-3-24
发表于 2018-3-24 16:12:20 | 显示全部楼层
谢谢LZ
回复

使用道具 举报

该用户从未签到

0

主题

3

帖子

0

蝴蝶豆

新手上路

最后登录
2018-3-24
发表于 2018-3-24 16:12:54 | 显示全部楼层
再次感谢
回复

使用道具 举报

该用户从未签到

0

主题

5

帖子

2

蝴蝶豆

新手上路

最后登录
2018-3-24
发表于 2018-3-24 21:23:21 | 显示全部楼层
好资料,需要学习
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

5

帖子

0

蝴蝶豆

中级会员

最后登录
2019-10-14
发表于 2018-3-27 22:04:41 | 显示全部楼层
請問 我目前只驅動一顆WS2812
所以我將PIXELS_LEN 改成 1 後 燈就不動作
能問一下還有什麼地方沒注意到的
感謝
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

79

帖子

85

蝴蝶豆

高级会员

最后登录
2018-10-19
发表于 2018-3-27 23:02:26 | 显示全部楼层
lin-ba-xin 发表于 2018-3-27 22:04
請問 我目前只驅動一顆WS2812
所以我將PIXELS_LEN 改成 1 後 燈就不動作
能問一下還有什麼地方沒注意到的

可能是你的reset信号不正确,或者说低电平的持续时间不够。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

202

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-3-26
发表于 2018-4-9 15:02:45 | 显示全部楼层
jjbboox 发表于 2018-3-21 17:36
其实把SPI的速度调到2.25Mbps,用3bit代表1位即可。这样24bit只需要用8个字节就OK了。
STM32F103C8T6 SPI2  ...

2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte
这里24bit应该是9byte的数据吧?
   
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

79

帖子

85

蝴蝶豆

高级会员

最后登录
2018-10-19
发表于 2018-4-10 07:30:42 | 显示全部楼层
本帖最后由 jjbboox 于 2018-4-10 07:35 编辑
翱翔云端的鸟 发表于 2018-4-9 15:02
2.25Mbps   3bit表示24位中的一个位     那一个完整的颜色需要24*3=72bit  的SPI数据   也就是72/8=9byte ...

是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
比如8颗粒的灯条,那么分配的内存就应该是8 * 9 + 32 = 104字节。
16颗粒的灯条就是 16 * 9 + 32 = 176 字节
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

202

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-3-26
发表于 2018-4-10 09:42:55 | 显示全部楼层
jjbboox 发表于 2018-4-10 07:30
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
比如8颗粒的灯条,那么分配的内存就应该是 ...

我现在遇到一个问题    3bit表示一个code     001  表示0code         110表示1code     
当我要发送9byte的一个24bit颜色值的时候  比如是传输红色
按照G R B  传输 为   0x00  0xFF  0x00   

转换为二进制
001 001 001 001 001 001 001 001 001 001 001
110 110 110 110 110 110 110 110 110 110 110
001 001 001 001 001 001 001 001 001 001 001

SPI数据为:
        0x24                0x92                0x49
0010 0100   1001 0010    0100 1001  
        0xDB                0x6D                0xB6
1101 1011   0110 1101    1011 0110
        0x24                0x92                0x49
0010 0100   1001 0010    0100 1001


这里的问题是当我SPI发送完0x24之后  发送0x92的时候  0x24的最后一位是0  0x92最后一位是1   导致0x24的最后一个0码和0x92的1码混合了  
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

202

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-3-26
发表于 2018-4-10 09:43:50 | 显示全部楼层
jjbboox 发表于 2018-4-10 07:30
是的,其实两头各还要加一个RESET信号,大概在32个字节左右吧。
比如8颗粒的灯条,那么分配的内存就应该是 ...

另外  楼主这里的4M  是不是改为 3.2M更合适啊   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-28 20:12 , Processed in 0.161497 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表