STM32F103使用TIM+DMA驱动WS2812灯带
ws2812做为RGB灯,在很多场合都是非常有用的,我准备使用STM32H755的M4内核驱动时,遇到了一些问题,因此先用STM32F103来验证一下,找到库存的STM32103的开发板,来实现驱动,特记录如下:
1.使用STM32CubeMX 新建基于STM32F103C8Tx的工程

2.打开外部时钟,因为内部时钟最高只能跑到64MHz。

3.在时钟配置界面,配置72MHz的总线时钟。

从上面我们得到Timer的时钟总线为72MHz。
4.打开TIM1的配置界面配置如下:

这里我们需要将GPIO的输出速度选择为高速模式。
5.配置pwm

在定时器配置中,我们根据WS2812 的最大传输速率800kbps,设置定时器不分频和计数周期为89+1,这样下来波形的频率为72 M /(89+1) = 800 K,并且一个波形的周期为1 / 800 = 1.25 us 。
6.配置DMA

我们打开DMA的界面,添加一个DMA,选择方向为从内存到外设,内存为递增,数据宽度为半字节,即16 bit。
到此界面配置结束,生成工程后,使用mdk 打开工程。
【代码添加】
1.新建RGB.c 添加代码如下:



2.添加RGB.h 代码如下:


3.Main
首先引RGB.h头文件
再使用extern一下数组

在while中添加周期的亮灯:

【验证】
将ws2812 的DI 引脚接到PA8,VCC 与GND 接到开发板的电源上,将程序下载到开发板后,可以看到如期点亮了WB2812。
(本文来源于《EEPW》202510)








评论