ST STM32G4 系列-TIM 輸出 500 KHz PWM計算方式與注意事項

1. 目的

STM32G474 系列晶片功能強大,除了提供了高解析的 Timer ( HRTIM, High-resolution timer ),另外也提供了通用型 Timer ( General-purpose timer ) 可以來做 PWM 輸出使用。

此篇博文來說明如何使用 STM32G474 通用型 Timer計算出 500 KHz的 PWM 輸出,並要注意的細節。

功能說明 :

使用 ST 開發板 ( NUCLEO-G474RE ) TIM8 的 CH1 ( PC6 ) 輸出 500 KHz 的 PWM。

編譯軟體工具 :

a. STM32CubeIDE 1.14.1 ( 軟體編譯工具軟體 )

b. STM32CubeMX  6.10.0 (圖形介面設定 & 產生程式軟體) 

硬體工具 :

型號 : NUCLEO-G474RE ( STM32G474 開發版 )



2. CubeMX設定說明 ( TIM clock source )

這邊要設定 STMM32G474 TIM clock source 來源為 170 MHz

APB1 timer clocks : 170 MHz




3. CubeMX設定說明 ( TIM8 )

這邊要設定 STM32G474 內部 TIM8_CH1 功能,Pin 腳 PC6 輸出500KHz PWM。


3.1 點選 STM32G474 方塊圖腳位 PC6,再點選 TIM8_CH1。


3.2 點選 Pinout & Configuration -> TIM8 -> Counter Settings ->

    Counter Period ( AutoReload Register – 16 bits value ) : 設定 339




計算說明 :

Timer module 的 Counter Period 暫存器為 TIM1->ARR

要設定頻率 500KHz, 公式如下:

Counter Period = Clock source / Timer module頻率

               = 170M / 500K

               =340

但是如果要寫入暫存器 TIM8->ARR 必須要減 1, 所以填入參數如下

TIM1->ARR = Counter Period -1 = 340-1 = 339

TIM1->ARR 設定 339 就是 500KHz


4. PWM duty 計算方式

這邊說明 Timer 的50% PWM duty 計算方式與暫存器。

4.1 點選 Pinout & Configuration -> TIM8 -> PWM Generation -> Pulse 設定170



計算說明 :

設定 PWM pulse width 的暫存器為 TIM-> CCR1, 50% duty 計算如下

TIM->CCR1 = Period * 50% = 340 * 50% = 170

TIM1->CCR1 設定 170 就是 500KHz 50% duty


5. EVM 硬體設定

5.1 STM32G474RET6 MCU 腳位定義規劃如下 

PA13 : SWDIO   ( 燒錄 Debug PIN )

PA14 : T_SWCLK ( 燒錄 Debug PIN )

PC6 : TIM8_CH1 ( PWM 輸出 PIN )



5.2 開發板 NUCLEO-G474RE 訊號接線圖

示波器訊號連接 PC6 ( TIM8_CH1 ) PWM 輸出 PIN




6. 編輯程式

這邊要注意,在 CubeMX 設定好的 TIM 模組後,但 TIM模組還尚未啟動,在 CubeIDE 編輯程式下就要用程式代碼來啟動 TIM模組的 PWM 輸出功能。

6.1 在程式中的 Main() 裡面,初始化程式後與 while(1) 迴圈之前加上啟動 TIM8 Channel 1 的PWM 輸出程式。




6.2 接著 Build ( Compiler ) 專案,確認專案沒有問題




7. 驗證 TIM8 Channel 1 PWM 功能

7.1 燒錄程式進入 Debug mode,並執行程式。





7.2 用邏輯分析儀或示波器來抓取輸出 PWM 波形,可以看到輸出結果如下 :

    PWM 頻率 : 500KHz

    PWM Duty : 50%


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論