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)








評論