目前使用BT3L这个模块驱动ws2812这种灯带,我想使用PWM+DMA这种方式,但是dma的fifo好像不够?我这边试了DMA的数据超过500多个字节PWM就会停不下来,有点像溢出了?
这种灯的驱动方式有
1.SPI(这个模组是不支持的)
2.PWM+DMA(但是单次发送数据有限制,多个灯的时候缓冲区不够大)
3.直接纯IO模拟时序,(但是这种模式的时序会受到其他系统任务干扰)
目前使用BT3L这个模块驱动ws2812这种灯带,我想使用PWM+DMA这种方式,但是dma的fifo好像不够?我这边试了DMA的数据超过500多个字节PWM就会停不下来,有点像溢出了?
这种灯的驱动方式有
1.SPI(这个模组是不支持的)
2.PWM+DMA(但是单次发送数据有限制,多个灯的时候缓冲区不够大)
3.直接纯IO模拟时序,(但是这种模式的时序会受到其他系统任务干扰)
目前我们在BT3L上跑mesh,然后控制WS2812.直接使用SPI,关闭中断,50颗灯珠,约5ms左右,控制和使用还算正常.
PWM+DMA,DMA的大小只有500个字节,你只能分批塞进去,然后看分批塞的时候带来的间隙有没有影响?速度比较快,一般没有影响,具体你要自己实际测试下
TripleJay 2022年 Dec 2日 15:13目前我们在BT3L上跑mesh,然后控制WS2812.直接使用SPI,关闭中断,50颗灯珠,约5ms左右,控制和使用还算正常.
PWM+DMA,DMA的大小只有500个字节,你只能分批塞进去,然后看分批塞的时候带来的间隙有没有影响?速度比较快,一般没有影响,具体你要自己实际测试下
BT3L这个模块支持SPI吗,我看到介绍没有这个外设以为用不了
有SPI,具体可以翻阅芯片手册和模组手册
刚刚我问了涂鸦这边他说没有SPI的,是不是模块搞错了呀
SPI_DO(PB7),控制WS2812你只需要用到这个口。其他引脚不着,BT3L模组可以满足你的需求。
你好我这边已经驱动成功了非常感谢。然后我这边遇到新的问题就是,在操作灯的时候,如果连接了蓝牙那么灯时序会受到影响,请问这种情况你是怎么解决的呢,我能想到的就是在操作灯的时候关闭中断,等到数据写入完成之后再打开,你那边是这样处理的吗?