请选择 进入手机版 | 继续访问电脑版
搜索
查看: 35263|回复: 77

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

  [复制链接]

该用户从未签到

14

主题

155

帖子

31

蝴蝶豆

金牌会员

最后登录
2021-4-16
发表于 2018-2-6 15:03:34 | 显示全部楼层 |阅读模式
本帖最后由 waiman-156411 于 2018-2-6 17:57 编辑

看到zoomdy 的驱动例子启发 https://www.stmcu.org.cn/module/forum/thread-610279-1-1.html
效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。
2017-01-21 09_12_30的屏幕截图.png

仔细一看发现 WS2812一个bit 周期是:
         TH+TL=1250ns (±600ns), Min=650ns,Max=1850ns
如果把SPI提速到4Mbits/S 的时候,SPI一个bit的周期是250ns,刚好和符合WS2812 T0H或T1L 400ns ±150ns范围。SPI 4个bit的周期刚好1000ns,刚好可以满足WS2812的时序需求。
SPI=0x8 等于 WS2812的 0
SPI=0xE 等于  WS2812的 1
也就变成一个SPI的byte,可以表示2个Ws2812的2个bit。一RGB像素颜色只需要 24bit/2bit = 12byte


SPI速度及极性配置:
捕获.PNG


SPI只需要配置主机只发模式,这样可以节省一个IO口
捕获2.PNG

驱动整盘WS2812都很轻松
微信图片_20180206141317.jpg    微信图片_20180206135738.jpg

驱动库说明:
例子使用Stm32CubMx 4.23,STM32L151C8T6,IAR/MDK工程
程序移植了Adafruit NeoPixel库函数,
采用HAL库驱动方式(struct),可以方便移植到其他STM32芯片上,
只需要分配多个struct变量,硬件稍微改下,就能分时复用,控制多串灯珠。
捕获3.PNG


SPI_DMA_WS281X.rar

584.49 KB, 下载次数: 1314, 下载积分: ST金币 -1

驱动库

评分

参与人数 4ST金币 +16 收起 理由
yogolu + 5 赞一个!
hacker + 2 赞一个!
g921002 + 4 很给力!
Inc_brza + 5 赞一个!

查看全部评分

回复

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-2-6 15:43:14 | 显示全部楼层
    这个思路很有想法,应该加精
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    155

    帖子

    31

    蝴蝶豆

    金牌会员

    最后登录
    2021-4-16
     楼主| 发表于 2018-2-6 17:56:19 | 显示全部楼层
    楼上代码有个BUG,回去修改后再放上
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    155

    帖子

    31

    蝴蝶豆

    金牌会员

    最后登录
    2021-4-16
     楼主| 发表于 2018-2-6 21:28:57 | 显示全部楼层
    修补改BUG后的代码:
    SPI_DMA_WS281X.rar (584.8 KB, 下载次数: 989)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    43

    帖子

    0

    蝴蝶豆

    金牌会员

    最后登录
    2021-12-31
    发表于 2018-2-8 11:17:30 | 显示全部楼层
    我只想知道楼主图中的代码显示是MDK的还是其他文本编辑器的,如果是MDK的话配置高亮的配置文件是否可以发我一份?如果是文本编辑器看起来不像是vs code  更不是sublime text。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
    发表于 2018-2-12 14:16:58 | 显示全部楼层
    感谢分享,已汇总到2月技术原创  https://www.stmcu.org.cn/module/forum/thread-614799-1-1.html
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    155

    帖子

    31

    蝴蝶豆

    金牌会员

    最后登录
    2021-4-16
     楼主| 发表于 2018-2-13 01:05:25 | 显示全部楼层
    onev 发表于 2018-2-8 11:17
    我只想知道楼主图中的代码显示是MDK的还是其他文本编辑器的,如果是MDK的话配置高亮的配置文件是否可以发我 ...

    mdk的,论坛里有人分享过了,你可以搜一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    53

    帖子

    0

    蝴蝶豆

    高级会员

    最后登录
    2021-3-3
    发表于 2018-2-26 14:32:08 | 显示全部楼层
    非常棒的想法,赞一个
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    79

    帖子

    85

    蝴蝶豆

    高级会员

    最后登录
    2018-10-19
    发表于 2018-2-26 15:14:01 | 显示全部楼层
    厉害,这个帖子要收藏起来的。
    好方法。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    944

    帖子

    6

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-19
    发表于 2018-2-28 09:36:53 | 显示全部楼层
    先看看
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 06:38 , Processed in 0.207085 second(s), 45 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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