WS2812B是一款贴片RGB灯。由于采用了单总线通讯,所以需要特别关注下它的通讯时序。

调试细节:
本来以为会是一个比较简单的调试,结果还是花了很长时间才调试完成。
首先是关于ESP32的纳秒级延时确定,当时按照空指令始终调试不出来。之前在STM32平台上的nop()函数也不知道怎么用。
后来发掘出了一个比较简单的办法。就是一个个试,然后在main函数中按照1S的频率打印调试信息来倒推ns级别的延时是否可靠。
注意:在ESP32不能使用空语句加;来进行空指令延时,需要使用操作语句。
然后在main函数中按照1S的频率打印调试信息:
基本确定了ns级别延时后,就可以按照时序来写ws2812的驱动函数啦。
ESP32的IO口没有进行初始化配置!

配置完IO口就可以进行WS2812B驱动啦。不过还是出现了一些小bug,比如初始化第一次点灯,绿色灯珠总是会不受控制地自动点亮!后来发现在IO初始化函数前预先执行一次点亮指令就可以消除这个bug!Nice!
至此,ESP32对于WS2812B的驱动函数就调试完成啦。
对于这个说起来简单但是异常曲折的小demo项目积累了如下经验:
1.ESP32的IO也是需要进行初始化配置的。
2.MCU的单指令确实能够进行粗略的ns级延时,为后续调试一些芯片时序提供了新的方法。
3.ESP32的GPIO8需要使用一个10K电阻上拉3.3V,否则无法进行程序下载。
2023-05-04 细节补充
1.在后续demo项目完善该驱动时,发现会出现初始化后,在别处点灯时,依然会出现亮出绿灯现象。
后来增加了灯珠的复位函数:
然后初始化变更为:
如果需要在别的函数位置电灯,择执行以下函数即可,亲测有效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/192578.html