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 ( 软体编译工具软体 )
硬体工具 :
型号 : NUCLEO-G474RE ( STM32G474 开发版 )2. CubeMX设定说明 ( TIM clock source )
这边要设定 STMM32G474 TIM clock source 来源为 170 MHz
APB1 timer clocks : 170 MHz3. 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 输出 PIN6. 编辑程式
这边要注意,在 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%
评论