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次,发文人进小黑屋喔~

评论