鱼弦:公众号【红尘灯塔】,CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)
功能:STM32F103 点亮1000个ws2812b,灯色一样就可以
目前两种解决方式:
1、循环里面:GPIO+延时翻转,这样比较消耗资源,且不能被打断,目前没有采用
2、使用PWM+DMA,这里面也有两种方式,同样也存在两个问题
若采用PWM+DMA的DMA_Mode_Normal(正常模式),那么意味着一次性设置完pwm占空比的设定值,一个灯需要24个占空比的设置值,使用半字类型,那么内存需要:1000242,使用内存较大,裸机的话也可以接受,使用系统就会有问题
若采用PWM+DMA的DMA_Mode_Circular(循环模式),在所有灯设置一个颜色的情况下,只需要重复搬运一个灯24个占空比的设置值就可以了,内存占用少,效率高,但是实际中发现,DMA一次搬运完,第二次搬运这之间会有比较大的延迟,导致时序乱了,后面的灯亮不起来,或者颜色不对。
使用STM32的PWM