LAOXU
发表于 2024-1-2 00:26:49
本帖最后由 LAOXU 于 2024-1-2 01:02 编辑
大补洞 发表于 2024-1-1 22:03
加反相器的同时,是不是也要关掉其它中断呀?不然其它中断进来就超过2812协议的完成时间了。 ...
不加反相器, 由于每次 DMA 传输完, 下次启动 DMA 传输 之间(切换时), SPI 输出起码会有 数十 个时钟周期 以上 的高电平停顿, 假如下次DMA 传输 的第一个 BIT 是 0, SPI 发送时, 加上这点开始前的高电平停顿, WS2812B 是否就变成了接收到 1 ???
LAOXU
发表于 2024-1-2 00:36:52
加反相器, 由于输出是反相的, 每次 DMA 传输完, SPI 输出停顿的是低电平, 只要在 下次(小于 50us 的时间内), 再次 启动 DMA 传输 , WS2812B 就不会复位, 继续 接着传输串行数据.
50us 之内的时间, 可以执行多次中断, 所以, 只要把 DMA - SPI 中断优先级加高, 就完全不用担心 超过2812协议的完成时间了。
梁工
发表于 2024-1-2 15:55:05
大补洞 发表于 2024-1-1 22:03
加反相器的同时,是不是也要关掉其它中断呀?不然其它中断进来就超过2812协议的完成时间了。 ...
只要保证任何中断执行时间都不要超过50uS,就没有问题。
王昱顺
发表于 2024-1-5 19:43:46
不用加反相器是可以的,DMA传输完了开下一个DMA,之间的时间间隔也就有个10us低电平,完全满足时序要求。
我这里调通了这部分的驱动程序,理论上可以驱动无限个灯。
使用SPI-DMA无限驱动WS2812灯带
神农鼎
发表于 2024-1-9 08:44:11
SPI方案:
只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的,MISO、SCLK不能做它用。本例使用P1.3-MOSI输出驱动信号,用户可以切换到别的脚。
===将 MISO 不做其他用途;
===将 MISO管脚 先设置为对外输出0;
===MOSI 发送完成后,对外停止时输出的是 MISO 读到的状态, 0 ,这 STC-R&D 留了这么个绝活支持 WS2812B !!!
STC企鹅
发表于 2024-12-9 00:01:49
<p>打卡学习</p>