動態

詳情 返回 返回

STM32F103 驅動 WS281x 燈珠的三種方式詳解(普通 IO / SPI+DMA / PWM+DMA)【開源免費】 - 動態 詳情

STM32F103 驅動 WS281x 燈珠的三種方式詳解(普通 IO / SPI+DMA / PWM+DMA)

WS281x(常見型號 WS2812B / SK6812)是一種集成了 LED 與驅動芯片的智能 RGB 燈珠,通過 單總線協議 完成顏色控制。該協議雖然只有一個數據線,但對 時序要求非常嚴格,這也是驅動時常被認為“麻煩”的原因。

本文總結在 STM32F103 平台驅動 WS281x 的 三種常用方式

  1. 普通 IO 模擬時序
  2. SPI + DMA 模擬控制波形
  3. PWM + DMA 調佔空比輸出

並結合項目實踐,給出 Example 示例工程,用於串口/CAN 控制 LED。


源碼分享

由於平台諸多限制,鏈接無法直接分享並容易失效。源碼可在下方鏈接中直接下載。免費開源

https://blog.csdn.net/weixin_52908342/article/details/154457659

1. WS281x 通信時序簡介

WS281x 的控制信號為 單線時序編碼,數據格式為:

G R B
每個顏色 8bit,共 24bit

關鍵點在於 高電平時間長度代表 0 / 1

碼值 高電平時間 低電平時間 週期
0 T0H ≈ 0.35 μs T0L ≈ 0.8 μs 1.25 μs
1 T1H ≈ 0.7 μs T1L ≈ 0.6 μs 1.25 μs

且一幀數據輸出結束後需 >50 μs 的低電平復位時間


在這裏插入圖片描述

2. 普通 IO 模擬時序(Bit-Banging)

原理

直接通過 GPIO_SetBits() / GPIO_ResetBits() + NOP 延時 模擬高低電平。

優點

  • 實現簡單
  • 無需額外外設資源

缺點

  • CPU 佔用高
  • 中斷、調度會破壞時序
  • LED 數量增加後容易失穩

適用場景

  • 燈珠少、邏輯簡單的項目,例如測試樣例、小裝飾。

3. SPI + DMA 模擬時序

原理

利用 SPI 的固定時鐘來生成近似 WS281x 的波形。

每一位 WS281x 數據需要映射為 8bit SPI 數據

WS281x 位值 SPI 輸出(示例) HEX
0 11100000 0xE0
1 11111000 0xF8

SPI 時鐘設置為 SPI 分頻後 ≈ 2.4MHz(可根據波形微調)。

優點

  • CPU 不參與傳輸
  • 輸出波形穩定,不受中斷影響
  • 適合大量燈珠

缺點

  • 不同 MCU / Freq 下需要重新計算 SPI 時鐘與編碼
  • 數據量比原始像素數據 膨脹 8 倍

使用流程

RGB 數據 → 按位編碼成 SPI buffer → SPI DMA 發送 → 結束後延時復位

4. PWM + DMA 調佔空比方式(推薦)

原理

配置 PWM 輸出頻率 = 800kHz(即 1.25 μs 週期),通過改變 CCR 佔空比 來控制高電平長度:

WS281x 位值 佔空比 示例 CCR 值(TIM_ARR=100)
0 ~33% 33
1 ~66% 66

DMA 負責自動把所有 CCR 數據 依次寫入定時器。

優點(最優解)

  • 波形精確、穩定性高
  • 數據量較小
  • 適合 大規模燈帶

缺點

  • 依賴定時器資源
  • 需要正確處理 DMA 傳輸完成中斷避免顯示異常

5. Example 示例工程説明

在項目的 Example 文件夾中提供兩個完整實例:

示例 通信方式 説明
Example 1 串口控制 LED 通過串口命令控制 LED 顏色與模式
Example 2 CAN 迴環控制 LED 使用串口發送 → CAN 迴環接收 → 控制 LED

第二個例子用於 單機調試,無需兩塊板子,即可驗證 CAN 驅動 LED 是否正常。


總結

驅動方式 優點 缺點 適用場景
普通 IO 簡單直接 時序不穩定 / CPU 佔用高 簡單燈光,調試用
SPI+DMA 波形穩定 / CPU 低佔用 數據膨脹 / SPI 時鐘需精調 中等數量燈帶
PWM+DMA 最穩定 / 最通用 / 擴展性強 需要定時器資源 大批量燈帶 / 正式項目

在實際商業項目中,優先推薦 PWM+DMA 驅動方案

本篇文章分別介紹了在 STM32F103 平台上驅動 WS281x 燈珠的三種常見方式:普通 IO 模擬時序、SPI+DMA 編碼輸出以及 PWM+DMA 調佔空比方式。其中,普通 IO 方法實現簡單但時序穩定性差,更適用於測試驗證;SPI+DMA 可以顯著降低 CPU 佔用,輸出波形穩定,但需要進行數據膨脹編碼;而 PWM+DMA 方案可以在硬件層面精準控制高電平寬度,具備最優秀的時序穩定性和擴展能力,是實際工程中最推薦的方案。配合 DMA 自動傳輸,可輕鬆驅動大量燈珠而不佔用 CPU 資源。實際項目中應根據資源佔用、燈珠數量以及系統實時性要求選擇合適的實現方式,並根據示例工程進行靈活應用與拓展。

user avatar ting_61d6d9790dee8 頭像 u_16640205 頭像 u_17569005 頭像 xuxueli 頭像 AmbitionGarden 頭像 u_11365552 頭像 wanshoujidezhuantou 頭像 chaoshenjinghyperai 頭像 eolink 頭像 aipaobudeshoutao 頭像 leguandeludeng 頭像 tecdat 頭像
點贊 24 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.