STM32G474 的高精度定时器(HRTIM)虽对比较寄存器 CMPx(x=1-4)有取值限制(需大于 3 个 fHRTIM 时钟、小于定时器周期 PER-3 个 fHRTIM 时钟),但可通过硬件触发源配置或软件强制控制,实现零占空比(0%)和满占空比(100%)的 PWM 输出。核心思路是避开 CMPx 的中间值限制,利用触发事件优先级、特殊赋值或软件强制位,直接控制 PWM 输出电平。
资料获取:高精度定时器PWM输出零或满占空比话题
1. 核心概述
1.1 问题背景
HRTIM 的 CMPx 寄存器因硬件设计,无法直接通过赋值 0 或 PER 实现零 / 满占空比,但 CMP1 和 CMP3 支持写 0,且可通过事件优先级、触发源组合或软件位强制输出状态,间接达成目标。
1.2 核心实现路径
- 硬件方案:通过配置 SET/RESET 触发源(PER、CMPx 事件),利用事件优先级或特殊 CMPx 赋值(0 或 > PER)实现;
- 软件方案:通过 HRTIM 的软件强制置位 / 复位位(SST/SRT),直接控制 PWM 输出高 / 低电平,无需依赖 CMPx 比较。
2. Up 计数模式:硬件触发实现
Up 计数模式下,寄存器更新由 PER 事件触发,需通过 SET/RESET 触发源的合理配置实现目标占空比。
2.1 零占空比(PWM 输出低电平)
方法 1:CMP1/CMP3=0 + 触发源配置
- 配置要点:PWM 的 SET 触发源设为 PER 事件,RESET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0;
- 原理:PER 事件触发 PWM 置位后,立即被 CMP1/CMP3=0 的比较事件复位,输出持续低电平;
- 注意:CMP1/CMP3=0 的比较事件仅本定时器可用,无法传递到其他定时器。
方法 2:CMPx=CMPy + 优先级利用
- 配置要点:SET 触发源设为低优先级 CMPx,RESET 触发源设为高优先级 CMPy,赋值 CMPx=CMPy;
- 优先级规则:CMP4>CMP3>CMP2>CMP1>PER,需保证 RESET 触发源优先级高于 SET;
- 示例:SET=CMP3(x=3),RESET=CMP4(y=4),CMP3=CMP4,PWM 被高优先级 RESET 事件持续拉低。
方法 3:CMPx>PER + 无 SET 事件
- 配置要点:SET 触发源设为 CMPx,RESET 触发源设为任意有效事件,赋值 CMPx>PER;
- 原理:CMPx>PER 时无 SET 事件发生,PWM 始终保持 RESET 后的低电平。
2.2 满占空比(PWM 输出高电平)
- 配置要点:SET 触发源设为 CMP1 或 CMP3(赋值 0),RESET 触发源设为 CMPy(赋值 > PER);
- 原理:CMP1/CMP3=0 触发 SET 事件置位 PWM,CMPy>PER 无 RESET 事件,PWM 持续高电平;
- 注意:需启用寄存器预加载功能,由 PER 事件触发寄存器更新。
3. Up-down 计数模式:硬件触发实现
Up-down 计数模式下,寄存器更新由计数器 = 0 事件触发,配置逻辑与 Up 模式类似,需注意更新触发点约束。
3.1 零占空比(PWM 输出低电平)
方法 1:CMP1/CMP3=0 + RESET 触发
- 配置要点:PWM 的 RESET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0,寄存器更新触发点设为计数器 = 0;
- 原理:计数器从 0 开始计数时,立即触发 RESET 事件,PWM 保持低电平。
方法 2:CMPx>PER + 无 SET 事件
- 配置要点:PWM 的 SET 触发源设为 CMPx,赋值 CMPx>PER,寄存器更新触发点设为计数器 = 0;
- 原理:无 SET 事件触发,PWM 始终保持初始低电平。
3.2 满占空比(PWM 输出高电平)
方法 1:CMP1/CMP3=0 + SET 触发
- 配置要点:PWM 的 SET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0,寄存器更新触发点设为计数器 = 0;
- 原理:计数器 = 0 时触发 SET 事件,PWM 置位后无 RESET 事件,持续高电平。
方法 2:CMPx>PER + 无 RESET 事件
- 配置要点:PWM 的 RESET 触发源设为 CMPx,赋值 CMPx>PER,寄存器更新触发点设为计数器 = 0;
- 原理:无 RESET 事件触发,PWM 保持 SET 后的高电平。
4. 软件强制控制:灵活切换占空比
无需依赖硬件比较事件,直接通过 HRTIM 的软件控制位强制 PWM 输出状态,适用于无严格时序要求的场景。
4.1 核心寄存器与位功能
- 软件置位触发(SST):HRTIM_SETx1R(x=A-F)寄存器的 SST 位,置位后强制 PWM 输出高电平(主动态),硬件自动清零;
- 软件复位触发(SRT):HRTIM_RSTx1R(x=A-F)寄存器的 SRT 位,置位后强制 PWM 输出低电平(非动态),硬件自动清零。
4.2 使用注意事项
- 无预加载:SST/SRT 位置位后立即生效,无延迟;
- 时序限制:若需 PWM 在特定时刻(如计数器 = 0)切换,不建议使用此方法,优先硬件触发。
5. 避坑关键要点
- 触发源优先级:硬件触发时,RESET 触发源优先级必须高于 SET 触发源(满占空比)或反之(零占空比),否则配置失效;
- CMPx 选择:仅 CMP1 和 CMP3 支持赋值 0,CMP2/CMP4 不可写 0,需注意触发源选择;
- 寄存器更新:Up 模式需设 PER 事件触发更新,Up-down 模式需设计数器 = 0 事件触发更新,否则配置不生效;
- 事件传递:CMP1/CMP3=0 的比较事件仅本定时器可用,跨定时器触发需避免使用此配置。
STM32G474 HRTIM 实现零 / 满占空比的核心是 “绕开 CMPx 中间值限制”:硬件方案利用特殊 CMPx 赋值(0 或 > PER)、触发源组合及事件优先级,软件方案直接强制输出状态,可根据时序要求灵活选择。实操中需重点关注触发源配置、寄存器更新触发点和事件优先级,确保配置符合 HRTIM 硬件逻辑。
283