1、引言
STM32G474 所含的高精度定时器(HRTIMER)其实包含了多个定时器,多个定时器之间可以单独工作,也可以进行同步,且高精度定时器还能与片上的其他定时器以及其他芯片进行同步,本文将对高精度定时器的同步功能进行介绍。
2、定时器同步结构
HRTIME 的整体架构如下图所示,内含由 7 个定时器,主定时器 Master timer 与子定时器Timer A~F,为 1 主 6 从结构,同步功能主要分为两部分:
- 内部同步:各定时器通过内部的 Cross-timer counter reset bus 互连,见图中红框标识部分;
- 外部同步:主定时器通过 External Synchronization input/output 单元与片上其他定时器以及片外其他MCU 的定时器进行同步,如图中绿框标识部分。
整个同步功能的主体是主定时器,其主要作用就是用来给所有子定时器提供统一的同步事件,以及将同步事件提供给外部或是接收外部输入的同步事件。另外子定时器也可将自身的某些事件作为同步事件发送到 Cross-timer counter reset bus 上。
在同步功能中,将提供同步信号的定时器称为主,接收同步信号的称为从。在接收到同步信号后,从定时器将自身的计数器复位到 0 或是启动计数,从而与主定时器实现同步或形成一定的移相。
3、高精度定时器内部同步
通过内部的互联总线 Cross-timer counter reset bus,除主定时器 Master Timer 外,每个定时器都可以接收总线上其他定时器发出的同步信号,同时所有定时器都可将自身的某些事件作为同步信号发送到总线上。以定时器 Timer A 为例,其可以接收到来自 Cross-timer counter reset bus的同步事件包括:
- Master timer period event
- Master timer cmp1/2/3/4 event
- Timer B cmp1/2/4 event
- Timer C cmp1/2/4 event
- Timer D cmp1/2/4 event
- Timer E cmp1/2/4 event
- Timer F cmp1/2 event
通过 Cross-timer counter reset bus,可以将所有的子定时器都与主定时器进行同步,也可以将所有的定时器分为几组,分别工作。
下面以子定时器都与主定时器同步为例进行说明,借助 CubeMx 配置工具,轻松完成如下图所示的四相 90°交错 PWM 的产生。
Master Timer 的 PER/CMP1/CMP2/CMP3 事件分别作为 Timer A/B/C/D 的同步源,复位对应的定时器计数器。 在子定时器中,分别选择对应的来自 Master Timer 的事件作为自身的同步源。 在 CubeMx 中的相关配置如下的截图(截图仅示意同步功能部分的配置)。
Master Timer 中的配置:
更加简单的方式是在使能 CMP/1/2/3 后,直接选择 interleaved Mode 的 Quad 选项,这样CMP1/2/3 就会自动等于 PER/4,(PER2)/4,(PER3)/4,后续即使 Timer_PER 的值更新,CMP1/2/3 也会按照该规则自动更新,无需软件参与。
Timer A 中的配置:
Timer B 中的配置:
Timer C 中的配置:
Timer D 中的配置:
按照以上的同步配置,并设置 PWM 的 Duty = 20%,实测到的四相 90°交错 PWM 波形如下所示。
4、高精度定时器外部同步
HRTIME 通过其 Master Timer 的 External Synchronization input/output 单元与片上其他定时
器以及片外其他 MCU 的定时器进行同步。
当 HRTIME 做为主时,其输出的同步事件可由其内部的以下事情产生:
- Master Timer start event
- Master Timer CMP1 event
- Timer A start event
- Timer A CMP1 event
该同步事件可以在管脚 HRTIM_SCOUT 上输出一个高或是低的脉冲,宽度为 16 个 fhrtim 周期,同时也可以映射到内部的 ITR10,ITR10 可以直接作为片上其他定时器的同步事件。
当 HRTIME 做为从时,其接收的同步事件可以来自于:
- •片上定时器 TIM1 的 TRGO
- 同步输入管脚 HRTIM_SCIN 的上升沿
接收到同步信号后,可以设置 HRTIME 内部定时器是复位还是启动。
下面以 HRTIME 做为主,TIM1 作为从, HRTIME 的 Timer A 产生一路 PWM,TIM1 产生一路PWM,两路 PWM 构成两相 180°交错来说明 HRTIME 的外部同步功能。在 CubeMx 中的关键配置如下截图所示(截图仅示意同步功能的配置)。
HRTIME 配置,HRTIME 作为主,Master timer 的 CMP1 事件做为同步事件,且同步事件映射到内部的 ITR10(也可以将同步信号输出到 HRTIM_SCOUT,同时将信号连接到 TIM1 的 ETR管脚,由于要多占用两个管脚,不建议该方式)。
同步配置:
Master Timer 配置(可以修改 CMP1 的值来形成不同的移相值):
Timer A 配置:
TIM1 的配置,TIM1 做从,工作在 Reset Mode,PWM 的输出模式为 PWM_MODE1。
按照以上的同步配置,实测到的两 180°交错 PWM 波形如下所示。
C1: HRTIM_TA1 C2 : TIM1_CH1
接下来再以如何在两个 MCU 的 HRTIME 之间完成同步。比如 MCU1 的 HRTIME 做主设备,MCU2 的 HRTIME 做从设备,相关的配置如下截图所示。
MCU1 的 HRTIME 同步配置,Master timer 的 CMP1 事件做为同步事件,同步信号必须输出到 HRTIM_SCOUT 管脚上。
MCU1 Master Timer 配置(可以修改 CMP1 的值来形成不同的移相值):
MCU1 Timer A 配置:
同时需要在程序中添加如下的 PB1 初始化代码,保证同步脉冲能在 PB1 上产生。
MCU2 的 HRTIME 同步配置,同步信号来自 HRTIM_SCIN。
MCU2 Timer A 的配置,来自 HRTIM_SCIN 的同步信号让 Timer A 复位并启动计数。
按照以上的同步配置,并设置 MCU1 与 MCU2 的 Timer A 的 PWM 的 Duty = 20%,实测到的两 180°交错 PWM 波形如下所示。
C1: MCU1 TA1 C2 : MCU2 TA1 C5 : HRTIM 同步脉冲
通过 HRTIM_SCIN 与 HRTIM_SCOUT,配合 HRTIME 同时做主与从的方式,可以实现多个MCU 之间定时器的同步,如下图示意。
5、小结
对高精度定时器 HRTIME 的同步功能进行了介绍,基于 STM32G474 和 CubeMx 工具说明如何快速的实现 HRTIME 的各种同步功能。
本文档参考ST官方的《【应用笔记】LAT1173高精度定时器的同步功能》文档。
参考下载地址:https://download.csdn.net/download/u014319604/88971346