
前言 STM32 高级定时器提供了丰富可调的功能。应用中,需要输出固定个数 PWM 脉冲时,可以利用 STM32 高级定时器的硬件机制,实现在不占用 CPU 资源的情况下,输出固定 PWM 脉冲数。本文利用 STM32CubeMX,介绍如何利用 STM32 的高级定时器实现固定个数 PWM 脉冲的输出。 一 实现机制 利用 STM32 定时器的 PWM 模式和单脉冲模式,结合高级定时器独有的重复计数(TIMx_RCR 寄存器)功能,实现固定个数 PWM 脉冲的输出。实现机制如下图所示。 ![]() 根据应用需要,利用自动装载寄存器(TIMx_ARR)、预分频寄存器(TIMx_PSC)等配置对应的 PWM 周期;利用自动装载寄存器(TIMx_ARR)、TIMx_CCRx 配置需要的占空比;利用 TIMx_RCR 配置需要的脉冲个数,TIMx_RCR 的范围为 0~255,所以利用这种机制,输出 PWM 脉冲的个数在 1~256 范围内。 在启动 PWM 前,开启单脉冲模式(单脉冲模式会在更新事件发生时,停止计数器),高级定时器在输出对应个数的PWM 脉冲后自动停止,实现输出固定个数 PWM 的需求。更多关于配置细节的介绍请参考文档 RM0090。 二 实现例 首先利用 STM32CubeMX 生成 PWM 输出的初始化工程,然后介绍如何通过简单的添加,实现固定个数 PWM 脉冲的输出。 本文中例程基于 STM32F4xG-Eval 板和 HAL 驱动库,利用高级定时器 1 的通道 3 输出 PWM 脉冲。为简化演示环节,本文中不对 STM32 时钟、PWM 周期等配置来源做细节讨论,具体实现可参考 STM32 参考手册中定时器章节,以及 ST 提供的PWM 例程。实现步骤如下(开发者也可以直接在 PWM 例程上做修改实现,从而省略 STM32CubeMX 生成工程的步骤): 1. 利用 STM32CubeMX 获取 PWM 输出的初始化工程。 a. 选择对应的目标微控制器(本文采用 STM32F407IG),选择调试接口、外部时钟(根据硬件平台情况)、 高级定时器 1 通道 3 选择‘PWM Genration CH3’(其他通道也支持)。 ![]() b. 切换至‘Configuration’标签页,单击‘TIM1’打开 TIM1 配置界面。配置如下。 ![]() ![]() Repetition Counter 决定了 PWM 脉冲个数(Repetition 值 + 1)。更多详细介绍请参考对应 STM32 的参考 手册中定时器章节。 2. 在生成工程的 main.c 中,添加单脉冲模式的支持,实现固定个数 PWM 脉冲的输出。 下述指令,产生固定个数的 PWM 脉冲,然后 PWM 输出自动停止。注:停止时,电平对应为 CH Polarity 设置状态。
按照上述配置及调用,输出 PWM 脉冲如下图所示。 另外,在再次启动时,如果需要更改 PWM 脉冲个数,仅需更改重复计数器参数即可,如下方式所示(输出 10 个 PWM脉冲)。
三 小结 通过使用高级定时器独有的重复计数器,能够在不占用 CPU 资源的情况下,实现固定 PWM 脉冲数的输出。如果没有额外高级定时器可用,可以利用普通定时器,通过在比较中断中计算产生 PWM 脉冲数,到达指定的 PWM 脉冲数时关闭定时器实现,这种方式会占用少量 CPU 资源处理中断服务。 完整版请查看:附件 |
Output the specified number of PWM pulses.pdf
下载920.81 KB, 下载次数: 39
兔哥的ST67——【000】ST67模组订购
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
刘氓兔的64位入门挑战【1】——MP257芯片下单和硬件准备
刘氓兔的64位入门挑战【0】——MP257选型