查看: 3923|回复: 23

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

  [复制链接]
  • TA的每日心情
    无聊
    2018-11-16 10:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-7-21 16:25:20 | 显示全部楼层 |阅读模式
    分享到:
    看到zoomdy 的驱动例子启发 http://www.stmcu.org.cn/module/forum/thread-610279-1-1.html
    效果虽然不错,可以节省不少MCU资源,但用一个byte的SPI数据代替WS2812一个bit,很浪费RAM资源,而且生成像素的效率也很慢。


    仔细一看发现 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速度及极性配置:



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


    驱动整盘WS2812都很轻松
       

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




    游客,如果您要查看本帖隐藏内容请回复

    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-6-30 10:55:41 | 显示全部楼层
    想学习下,多谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-9-13 11:56:03 | 显示全部楼层

    想学习下,多谢
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 21:33 , Processed in 0.192901 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.