STM32H7通用定时器计数功能的使用

news2024/11/23 8:50:35

目录

概述

1 STM32定时器介绍

1.1 认识通用定时器

1.2 通用定时器的特征

1.3 递增计数模式

1.4 时钟选择

2 STM32Cube配置定时器时钟

2.1 配置定时器参数

2.2 配置定时器时钟

3 STM32H7定时器使用

3.1 认识定时器的数据结构

3.2 计数功能实现

4 测试案例

4.1 代码实现

4.2 验证


概述

本文主要介绍STM32H7通用性定时器计数功能的用法,笔者以TIM2定时器为例,介绍如何通过配置参数,实现定制化时钟的需求。

1 STM32定时器介绍

1.1 认识通用定时器

STM32H7的通用定时器包括TIM2/TIM3/TIM4/TIM5,通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。它们可用于多种用途,包括测量输入信号的脉冲宽度( 输入捕获)或生成输出波形( 输出比较和 PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。

1.2 通用定时器的特征

通用 TIMx 定时器具有以下特性:
1) 16 位( TIM3 和 TIM4)或 32 位( TIM2 和 TIM5)递增、递减和递增/递减自动重载计
数器。
2)16 位可编程预分频器,用于对计数器时钟频率进行分频(可在运行时修改),分频系数
介于 1 到 65535 之间。
3)多达 4 个独立通道,可用于:
– 输入捕获
– 输出比较
– PWM 生成(边沿和中心对齐模式)
– 单脉冲模式输出
4)使用外部信号控制定时器且可实现多个定时器互连的同步电路。
5)发生如下事件时生成中断/DMA 请求:
– 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
– 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
– 输入捕获
– 输出比较
6)支持定位用增量(正交)编码器和霍尔传感器电路
7)触发输入用作外部时钟或逐周期电流管理

1.3 递增计数模式

在递增计数模式下,计数器从 0 计数到自动重载值( TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。每次发生计数器上溢时会生成更新事件,或将 TIMx_EGR 寄存器中的 UG 位置 1(通过软件或使用从模式控制器)也可以生成更新事件。

通过软件将 TIMx_CR1 寄存器中的 UDIS 位置 1 可禁止 UEV 事件。这可避免向预装载寄存器写入新值时更新影子寄存器。在 UDIS 位写入 0 之前不会产生任何更新事件。不过,计数器和预分频器计数器都会重新从 0 开始计数(而预分频比保持不变)。此外,如果 TIMx_CR1寄存器中的 URS 位(更新请求选择)已置 1,则将 UG 位置 1 会生成更新事件 UEV,但不会将 UIF 标志置 1(因此,不会发送任何中断或 DMA 请求)。这样一来,如果在发生捕获事件时将计数器清零,将不会同时产生更新中断和捕获中断。发生更新事件时,将更新所有寄存器且将更新标志( TIMx_SR 寄存器中的 UIF 位)置 1(取决于 URS 位):
1)预分频器的缓冲区中将重新装载预装载值( TIMx_PSC 寄存器的内容)
2)使用预装载值 (TIMx_ARR) 更新自动重载影子寄存器

以下各图以一些示例说明当 TIMx_ARR=0x36 时不同时钟频率下计数器的行为。

1.4 时钟选择

计数器时钟可由下列时钟源提供:
1)内部时钟 (CK_INT)
2)外部时钟模式 1:外部输入引脚 (TIx)
3)外部时钟模式 2:外部触发输入 (ETR)
4)外部触发输入 (ITRx):使用一个定时器作为另一定时器的预分频器,例如,可将定时器13 配置为定时器 2 的预分频器。

2 STM32Cube配置定时器时钟

2.1 配置定时器参数

笔者使用STM32H7 的通用定时器TIM2,作为案例介绍通用定时器的用法:

2.2 配置定时器时钟

定时器的base时钟配置能为:200M Hz

配置完成后,就可以生成工程代码。

3 STM32H7定时器使用

3.1 认识定时器的数据结构

参数介绍:

参数名说明
Prescaler预分频系数
CounterMode计数方式
Period自动装载值
ClockDivision时钟分频因子
RepetitionCounter重复计数器的值
AutoReloadPreload自动重载使能

3.2 计数功能实现

代码第44行:Prescaler = 199, 由于定时器的base时钟为200M Hz, 此时定时器的计数时钟为

f = \frac{200M Hz}{100} = 1M Hz

代码第45行:配置up计数模式

代码第46行:Period = 49,按照1M Hz计数,当计数个数达到50个时,产生一次中断

代码第47行:不分频base时钟

代码第48行:自动重载计数使能

4 测试案例

通过配置定时器的参数,实现1ms周期计数

4.1 代码实现

代码参数配置如下:

/* TIM2 init function */
void MX_TIM2_Init(void)
{

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 199;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 499;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM2_Init 2 */
	HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END TIM2_Init 2 */

}

4.2 验证

通过示波器测试波形可得,Freq = 1K Hz, 周期为T = 1ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 一、简单介绍 二、简单指定视频某片段快放效果实现原理…

vue3使用jsQR解析二维码

1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库&#xff0c;不仅可以在浏览器端使用&#xff0c;而且支持后端node.js环境。jsQR使用较为简单&#xff0c;有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <script setup> import …

STM32F407+FreeRTOS+LWIP UDP组播

开发环境介绍&#xff1a; MCU&#xff1a;STM32F407ZET6 网卡&#xff1a;LAN8720A LWIP版本&#xff1a;V1.1.0 FreeRTOS 版本&#xff1a;V10.2.1 LAN8720A硬件原理图&#xff1a; 硬件连接说明&#xff1a; MII_RX_CLK/RMII_REF_CLK ------>PA1 …

[lesson15]类与封装的概念

类与封装的概念 类的封装 类通常分为以下两个部分 类的实现细节类的使用方式 当使用类时&#xff0c;不需要关心其实现细节 当创建类时&#xff0c;才需要考虑其内部实现细节 封装的基本概念 根据经验&#xff1a;并不是类的每个属性都是对外公开的 如&#xff1a;女孩子不…

hive-3.1.2分布式搭建与hive的三种交互方式

hive-3.1.2分布式搭建&#xff1a; 一、上传解压配置环境变量 在官网或者镜像站下载驱动包 华为云镜像站地址&#xff1a; hive&#xff1a;Index of apache-local/hive/hive-3.1.2 mysql驱动包&#xff1a;Index of mysql-local/Downloads/Connector-J # 1、解压 tar -zx…

gpt科普1 GPT与搜索引擎的对比

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的自然语言处理模型。它通过大规模的无监督学习来预训练模型&#xff0c;在完成这个阶段后&#xff0c;可以用于各种NLP任务&#xff0c;如文本生成、机器翻译、文本分类等。 以下是关…

在Linux系统上实现TCP(socket)通信

一.什么TCP TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。 二.TCP通信流程 三. TCP 服务器端 1 创建socket int sockfd socket(AF_INET, SOCK_STREAM, 0); //SOCK_STREAM tcp通信2 绑定(bind) struct sockaddr_in myad…

.net 6 集成NLog

.net 6 webapi项目集成NLog 上代码step 1 添加nugetstep 2 添加支持step 3 添加配置文件 结束 上代码 step 1 添加nuget 添加nuget 包 Roc step 2 添加支持 修改program.cs var builder WebApplication.CreateBuilder(args); // 添加NLog日志支持 builder.AddRocNLog();ste…

UDP简单总结

UDP&#xff1a;用户数据报协议 特点: 无连接、不可靠通信 不事先建立连接&#xff0c;数据按照包发&#xff0c;一包数据包含&#xff1a;自己的IP、程序端口、目的地IP、程序端口和数据(限制在64KB内) 发送方不管对方是否在线&#xff0c;数据在中间丢失也不管&#xff0c;…

用友NC Cloud importhttpscer接口存在任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友NC Cloud 是基于云计算技术的企业管理软件。它提…

监控指标体系:交互延迟上的探索与最佳实践

FID 在互联网高速发展的时代,用户体验已成为企业竞争的关键所在。网页性能作为用户体验的重要组成部分,直接影响着用户的满意度和工作效率。First Input Delay(FID)作为衡量网页性能的重要指标,越来越受到业界关注。今天,让我们一起来深入了解FID,探讨如何优化FID以提升…

GitHub 仓库 (repository) Pulse - Contributors - Network

GitHub 仓库 [repository] Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进…

51单片机之LED点阵屏

目录 1.LED点阵屏简介 2.配置LED点阵屏代码 1.LED点阵屏简介 LED点阵屏真的是遍布我们我们生活的每个角落&#xff0c;从街边的流动显示字的招牌到你的液晶显示屏&#xff0c;都是基于点阵屏的原理研究出来的。还有那个世界上最大的球状建筑物&#xff1a;MSG Sphere&#xff…

签名失败当前系统没有安装苹果根证书

发生背景 第一次我没有iOS证书(.p12)和描述文件(.mobileprovision)。按照这个文档https://ask.dcloud.net.cn/article/152拿到后&#xff0c;安心打包出问题。 错误信息 [Info] begin getCertCName... [Info] begin codesignFramwork to ipa... [Error] DCUniBase.framework…

Mac 安装 brew brew cask 遇到的问题以及解决办法

安装Homebrew和Homebrew Cask是在Mac上管理软件包的常用方法。虽然大多数情况下安装这两个工具是比较简单的&#xff0c;但有时候也可能遇到一些问题。下面是一些常见的问题以及解决办法&#xff1a; 问题1&#xff1a;无法安装Homebrew 解决办法&#xff1a; 1.确保你的Mac已连…

跟TED演讲学英文:Why AI will spark exponential economic growth by Cathie Wood

TED英文文稿 文章目录 TED英文文稿Why AI will spark exponential economic growthIntroductionVocabularyTranscriptSummary Why AI will spark exponential economic growth Link: https://www.ted.com/talks/cathie_wood_why_ai_will_spark_exponential_economic_growth? …

打印CSDN博客只需两步

打印博客 关闭浏览器限制 浏览器打开对应博客&#xff0c;F12&#xff0c;在console下粘贴如下代码&#xff0c;回车 (function doPrint(){var head_str "<html><head><title></title></head><body>"; var foot_str "&…

three.js跟着教程实现VR效果(四)

参照教程&#xff1a;https://juejin.cn/post/6973865268426571784&#xff08;作者&#xff1a;大帅老猿&#xff09; 1.WebGD3D引擎 用three.js &#xff08;1&#xff09;使用立方体6面图 camera放到 立方体的中间 like “回” 让贴图向内翻转 &#xff08;2&#xff09;使…

【机器学习—聚类】

文章目录 1、前言1.1、定义1.2、数据 2、亲和力传播3、聚合聚类4、BIRCH5、DBSCAN6、K-均值7、Mini-Batch K-均值8、均值漂移聚类9、OPTICS10、光谱聚类11、高斯混合模型12、参考 1、前言 1.1、定义 聚类分析&#xff0c;即聚类&#xff0c;是一项无监督的机器学习任务。它包…

本地开发nginx代理服务器

1、nginx 解释 nginx 是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP 代理服务器。 在性能上&#xff0c;Nginx占用很少的系统资源&#xff0c;能支持更多的并发连接&#xff0c;达到更高的访问效率&#xff1b; 在功能上&#xff0c;Nginx是优…