STM32G4高精度定时器的同步功能

2024-03-18 05:44

本文主要是介绍STM32G4高精度定时器的同步功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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
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

这篇关于STM32G4高精度定时器的同步功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/821348

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类