STM32定时器详解(1)

文章目录

  • 前言
  • 一、STM32中定时器的分类
  • 二、基础定时器
    • 2.1基础定时器框图讲解
    • 2.2基础定时器计数功能讲解
  • 三、通用定时器
    • 3.1通用定时器基本描述
    • 3.2通用定时器硬件框图
  • 四、高级定时器
    • 4.1高级定时器基本描述
    • 4.2高级定时器硬件框图
  • 总结


前言

本篇文章将带大家来学习STM32中的定时器,将会讲解到STM32中的高级定时器,通用定时器,基础定时器等内容。

一、STM32中定时器的分类

基本定时器(Basic Timers):

基本定时器是STM32中最简单的定时器类型之一。
通常用于生成简单的定时中断,如毫秒级的定时器。
典型的基本定时器包括TIM6和TIM7。

通用定时器(General-purpose Timers):

通用定时器是STM32中最常用的定时器类型之一。
可以用于多种定时、计数和PWM生成任务。
典型的通用定时器包括TIM1、TIM2、TIM3、TIM4等。
通用定时器通常具有更多的功能和比较灵活的配置选项,可以用于更复杂的定时和PWM任务。

高级定时器(Advanced Timers):

高级定时器是一种更复杂、更强大的定时器类型,通常用于需要更高精度和更复杂功能的应用。
典型的高级定时器包括TIM1和TIM8。
高级定时器通常具有更多的高级功能,如编码器接口、PWM死区控制等。

二、基础定时器

2.1基础定时器框图讲解

从基础定时器的硬件框图来看基础定时器的功能非常简单:

1.触发DAC

2.计数

基础定时器的时钟源来自内部时钟(Internal clock (CK_INT))
在这里插入图片描述
基础定时器是16bit的定时器,并且是向上计数的。
在这里插入图片描述
时间基准单元:

在这里插入图片描述
Counter Register (TIMx_CNT):
这是一个用于存储当前定时器计数值的寄存器。当定时器开始计数时,计数器的值会不断地递增,直到达到最大值(通常是 16 位定时器为 65535)。然后,计数器会根据设置的模式(例如向上、向下或向上/向下计数)重新开始计数。该寄存器的值可以通过软件读取,也可以用于设置定时器的起始计数值。

Prescaler Register (TIMx_PSC):
这是一个用于设置定时器的预分频器的寄存器。预分频器用于将定时器的时钟信号分频,以降低计数速度或调整计数频率。通过设置预分频器的值,可以改变定时器的时钟频率,从而影响定时器的计数速度和溢出时间。

Auto-Reload Register (TIMx_ARR):
这是一个用于存储定时器自动重载值的寄存器。自动重载值决定了定时器的周期。当定时器的计数器达到自动重载值时,定时器会产生一个更新事件(UEV),并重新开始计数。通常,自动重载值决定了定时器的周期性,即定时器溢出的时间间隔。

2.2基础定时器计数功能讲解

在这里插入图片描述
预分频器的功能:
预分频器用于将定时器的时钟信号分频,以降低计数速度或调整计数频率。这个分频比可以在 1 到 65536 之间进行设置。例如,如果设置分频比为 2,则定时器的时钟频率将减半。

预分频器的控制:
预分频器是由一个 16 位的计数器控制的,通过一个 1 位的寄存器进行控制。这意味着,可以通过调整这个 16 位计数器的值,来改变预分频器的分频比。寄存器(TIMx PSC register)用于设置预分频器的分频比,而计数器则用于实际的分频操作。

动态调整:
预分频器的分频比可以在运行时动态调整,因为预分频器的控制寄存器是被缓冲的。这意味着,即使在定时器正在运行时,也可以修改预分频器的分频比。修改后的分频比将在下一个更新事件(update event)时生效。更新事件通常发生在定时器计数器溢出时,或者通过软件触发。

缓冲:
关于预分频器的控制寄存器是被缓冲的意思是,新的预分频器比值不会立即生效,而是会等到下一个更新事件时才会生效。这种机制确保了对预分频器的更改不会中断正在进行的定时器计数过程。

在这里插入图片描述
通过上面这张图片我们可以印证:新的预分频器比值不会立即生效,而是会等到下一个更新事件时才会生效。

基础定时器(TIMx)的工作原理以及与计数器溢出、更新事件和寄存器更新相关的操作。

1.计数器工作原理:
计数器从0开始计数,一直累加到自动重载值(TIMx ARR 寄存器的内容),然后重新从0开始,并生成一个计数器溢出事件。这个循环过程一直持续。

2.更新事件:
更新事件可以在每次计数器溢出时生成,也可以通过设置 TIMx EGR 寄存器中的 UG 位来生成(通过软件或使用从模式控制器)。更新事件(UEV)用于触发对寄存器的更新操作。

3.禁用更新事件:
软件可以通过设置 TIMx CR1 寄存器中的 UDIS 位来禁用更新事件。这样做的目的是在写入新值到预加载寄存器时,避免更新影子寄存器。在这种情况下,直到 UDIS 位被写为 0 之前,不会发生更新事件,但是计数器和预分频器计数器都会重新从0开始(预分频率不变)。

4.URS 位的影响:
如果 TIMx CR1 寄存器中的 URS(更新请求选择)位被设置,那么通过设置 UG 位会生成一个更新事件 UEV,但 UlF 标志不会被设置,因此不会触发中断或 DMA 请求。

5.更新事件发生时的操作:
当更新事件发生时,所有相关寄存器都会被更新,并设置更新标志(UlF 位在 TIMx SR 寄存器中)。具体操作包括将预分频器的缓冲区重新加载为预加载值(TIMx PSC 寄存器的内容),以及更新自动重载阴影寄存器为预加载值(TIMx ARR 寄存器的内容)。

在这里插入图片描述

三、通用定时器

3.1通用定时器基本描述

在这里插入图片描述
1.16位自动重装向上计数器:

这些定时器具有16位的自动重装向上计数器,意味着它们可以从0计数到2^16 - 1,然后溢出并重新开始。

2.16位可编程分频器:

定时器配备有一个16位的可编程分频器。分频器允许你将计数时钟频率按1到65536之间的任意因子进行分频。重要的是,这个分频因子可以在运行时动态更改,即“on the fly”,提供了在调整计数速度方面的灵活性。

3.最多2个独立通道,用于:

输入捕获:此模式允许定时器在特定事件(如外部信号过渡)发生时捕获计数器的当前值。
输出比较:此模式使定时器能够根据计数器值和指定的比较值之间的预定义比较生成输出信号。
PWM生成(边沿对齐模式):支持脉冲宽度调制(PWM),提供了在边沿对齐模式下生成PWM信号的方法。
单脉冲模式输出:该模式用于基于触发事件生成单脉冲。

4.同步电路:

这些定时器配备了同步电路。这使得你可以使用外部信号控制定时器并将多个定时器进行同步。在需要多个定时器之间进行精确协调的场景中,这个功能非常有价值。

5.中断生成:

可以在各种事件上生成中断:
更新:在计数器溢出或计数器初始化(通过软件或内部触发)时触发。
触发事件:在计数器启动、停止、初始化或通过内部触发进行计数时生成。
输入捕获:可以在输入捕获事件上触发中断。
输出比较:可以根据输出比较事件生成中断。

3.2通用定时器硬件框图

从硬件框图中就可以很直观的看出来通用定时器相较于基础定时器多了一些什么功能。

首先是定时器的时钟:

通用定时器的时钟可以由:内部时钟,ITR0 ~ ITR3(内部触发信号),TIMx_CH1/2/3/4来提供。

还增加了以下功能:

多通道功能:

通用定时器通常支持多个独立通道,这些通道可以用于不同的目的,如输入捕获、输出比较和脉冲宽度调制(PWM)。这提供了更多的灵活性,使得定时器可以同时执行多种任务。

复杂的计时模式:

通用定时器可能支持更多复杂的计时模式,例如边沿对齐模式、中央对齐模式等。这些模式使得定时器更适用于不同类型的应用,如音频处理或电机控制。

动态分频器设置:

通用定时器通常允许在运行时动态地更改分频器的设置,而基础定时器可能不具备这种灵活性。动态分频器的设置使得可以根据应用的需求实时调整计时器的时钟频率。

同步功能:

通用定时器通常提供同步功能,允许多个定时器在同一时刻启动或停止,以确保它们之间的同步性。这对于需要协调多个定时器的应用非常重要。
更多中断选项:

通用定时器通常提供更多中断选项,可以在不同的事件上触发中断。这增加了在计时器运行时处理各种事件的能力。
在这里插入图片描述

四、高级定时器

4.1高级定时器基本描述

在这里插入图片描述
16位的向上、向下、向上/向下自动重装载计数器。

16位可编程预分频器,可以将计数器时钟频率按1至65536的因子进行分频(也可在运行时进行)。

最多支持4个独立通道,包括:
输入捕获
输出比较
PWM生成(边沿和中心对齐模式)
单脉冲模式输出

可编程死区的互补输出。

同步电路可以通过外部信号控制定时器,并将多个定时器连接在一起。

重复计数器可以在计数器周期达到给定次数后更新计时器寄存器。

Break输入可将定时器的输出信号置于复位状态或已知状态。

可以根据以下事件生成中断/DMA:
更新:计数器溢出/下溢,计数器初始化(通过软件或内部/外部触发)
触发事件:计数器启动、停止、初始化或通过内部/外部触发计数
输入捕获
输出比较
Break输入

支持增量(相位)编码器和霍尔传感器电路用于定位目的。

触发输入用于外部时钟或逐周期电流管理。

4.2高级定时器硬件框图

在这里插入图片描述
高级定时器相比于通用定时器多了一个定时器的时钟源提供:

ETR(External Trigger Input),外部触发的输入信号:可以统计外部触发信号

更多的特殊功能:高级定时器可能具有其他特殊功能,如编码器接口、死区控制、PWM生成的高级特性(如断路检测、震荡控制等)等,以满足特定应用的需求。

更精确的分辨率和同步性:高级定时器通常具有更高的分辨率,可以实现更精确的计时。此外,它们通常具有更强大的同步功能,可以与其他外部定时器和信号进行精确的同步操作。

更灵活的触发和中断机制:高级定时器通常支持更多的触发源和中断事件,以便在特定的计时条件满足时触发相应的操作和中断处理。

影子寄存器:高级定时器通常提供影子寄存器功能,可在定时器仍在计数时安全地更新定时器参数,以避免因更新参数而引起的错误计时。

总结

本篇文章主要讲解了STM32中定时器的分类和这些定时器的一些常用的基本功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SunFMEA冠翔(台山)工业FMEA培训会圆满结束

近日,SunFMEA软件成功在冠翔(台山)工业有限公司举办了为期三天的FMEA软件系统培训,通过重要知识讲解、现场答疑、演练互动、软件实操等环节,把培训氛围推向高潮。 ​ 此次培训分为DFMEA与PFMEA两部分,按照七…

浏览器工作原理与实践--TCP协议:如何保证页面文件能被完整送达浏览器

在衡量Web页面性能的时候有一个重要的指标叫“FP(First Paint)”,是指从页面加载到首次开始绘制的时长。这个指标直接影响了用户的跳出率,更快的页面响应意味着更多的PV、更高的参与度,以及更高的转化率。那什么影响FP…

不定方程求解【详解+代码】

不定方程求解 文章目录 不定方程求解题目描述 分析题目简单穷举法思路1:Java代码C代码 思路2Java代码C代码 测试结果 题目描述 给定正整数a,b,c。求不定方程 axbyc 关于未知数x和y的所有非负整数解组数。 Input 一行,包含三个正…

Linux离线部署gitLab及使用教程

一、下载gitLab的linux系统rpm包 地址:Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 找到这个最新版 点击下载 二、上传到linux系统 笔者是在windows系统下的vmware虚拟机中部署安装的,虚拟机中安装了cent…

c/c++整数和浮点数在内存中存储

了解变量的储存原理是我们灵活运用和防止数据截断改变带来的危害的有效途径。 那么我们从int char和float double两类来阐述内存的储存。 首先我们讲内存单位: 内存单位从小到大分别是bit byte KB MB GB TB PB。 bit是最小的内存单位,它可以存储一…

docker容器下部署hbase并在springboot中通过jdbc连接

我在windows的docker中部署了一个hbase服务,然后用springboot连接到此服务并访问数据。 详情可参考项目中的README.md。项目中提供了用于构建镜像的dockerfile,以及测试代码。 项目连接:https://gitee.com/forgot940629/hbase_phoenix_spring…

Java学习路线大纲

一、学习路线 二、学习大纲 0. 地基部分 数据结构:线性表、队列、栈、树、图、哈希等等常见算法:10大排序、字符串匹配、二分法、双指针等等操作系统:进行线程管理、内存管理、I/O等等计算机网络:四层协议、TCP/UDP、HTTP/HTTPS等…

安装elasticsearch和kibana

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大&#xff0…

互联网思维:息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 人工智能思维:模拟人、解放劳动力、人工智能解决方案和服务

互联网思维:信息共享、开放性、创新和快速反应、网络化、平台化、数据驱动和用户体验 互联网思维是指一种以互联网为基础的思考方式,强调信息共享、开放性、创新和快速反应的特点。这种思维方式注重网络化、平台化、数据驱动和用户体验,以适…

数通-路由策略

路由策略 访问控制:1.acl控制——通过控制流量,起到控制作用。2.路由控制 注意:ACL在做报文过滤时,默认允许所有;在做路由抓取时,默认拒绝所有,且只能使用基本ACL。 路由控制 1、路由策略&a…

基于springboot的反诈宣传平台

技术:springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理,可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加&#xff…

电力柜智能蓝牙锁控解决方案

一、行业背景 随着智能电网的快速发展,电力柜作为电网的重要组成部分,其安全性和可靠性对于保障电力供应至关重要。传统的电力柜锁控系统多依赖于物理钥匙,存在管理不便、安全隐患大、难以实时监控等问题,为了提高电力柜的安全管…

AI绘画自动生成器:让艺术创作触手可及

随着人工智能技术的飞速发展,越来越多的应用领域逐渐与AI技术融合。在艺术领域,AI绘画自动生成器成为了一款备受关注的产品。它利用深度学习算法,让用户通过输入关键词或描述性文本,就能在几秒钟内生成一幅独特的艺术作品。在这篇…

探索人工智能基础:从概念到应用【文末送书-42】

文章目录 人工智能概念人工智能基础【文末送书-42】 人工智能概念 人工智能(Artificial Intelligence,AI)作为当今科技领域的热门话题,已经深刻地影响着我们的生活和工作。但是,要理解人工智能,我们首先需…

杂记8---多线激光雷达与相机外参标定

背景:本人开源的标定程序,提供大家参考学习 基于棋盘格的多线激光雷达和鱼眼/针孔模型相机外参标定的程序 前言 标定数据,只需要一个棋盘格标定板。把标定板放置lidar 与camera 共视区域,拜拍几个pose进行采集。 基于简谐原则…

快速傅氏变换(Fast Fourier Transform,FFT)算法基本原理详细解析

目录 目录 FFT 基本原理 FFT算法 Cooley-Tukey 步骤概述: 1、分解:将原始序列分成偶数部分和奇数部分。原始DFT问题就被分解成两个长度为N/2的子问题,分别对应偶数索引和奇数索引的元素。 2、递归:递归地对这两个子序列应用F…

多线程libtorch推理问题

一、环境 我出问题的测试环境如下: pytorch1.10+cu113 pytorch1.10+cu116 pytorch2.2+cu118 libtorch1.10.1+cu113 libtorch1.10.1+cu111 libtorch1.9.0+cu111 二、问题现象 最近封装libtorch的推理为多线程推理的时候,遇到一个现象如下: (1)只要是将模型初始化放到一个…

黑马现有java课程框架及其功能梳理

目录 高并发相关提高通信效率Netty作用:哪些框架使用它: ChannelChannelHandler 和 ChannelPipelineEventLoop 和 EventLoopGroup**涉及的名词解释:**NIOSocketNginx 高并发相关 主要用来解决IO密集型程序(大量文件读写&#xff…

游戏软件报错xinput1_3.dll丢失如何修复,5种方法一分钟教你修复完成

在计算机使用过程中,我们经常会遇到一些错误提示或者程序无法正常运行的情况。其中,一个常见的问题就是与xinput13.dll文件相关的问题。那么,xinput13.dll到底是什么呢?本文将对其进行详细介绍,帮助大家更好地理解和解…

25.7 MySQL 数据库和表的基本操作

1. 基础知识 1.1 一条数据的存储过程 存储数据确实是处理数据的基石, 只有确保数据被准确无误且有条理地存储, 我们才能对其进行深入的处理和细致的分析. 否则, 这些数据就像是一团毫无章法的乱麻, 让我们难以捉摸其内在的逻辑和价值.那么, 如何才能够将用户那些与经营紧密相关…