基于STM32 + TIM _定时器的基本机构和工作原理详解

news2024/11/26 5:38:36

前言

       本篇博客主要学习了解定时器的基本结构和工作原理,掌握定时器的驱动程序和设计。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。

本次博客板子使用的是正点原子精英版,芯片是STM32F103ZET6,需要资料可以@我拿取。

本博客内容原创,创作不易,转载请注明
————————————————

一. TIM定时器介绍

  1. 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  2. 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
  3. 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
  4. 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

        本篇博客不介绍寄存器和时序,因为针对新手,首先得学会了解基本概念和使用即可,后期自己深入了再看手册了解难度也不是很大。

二. TIM定时器简介

        主要是对输入的时钟进行计数,并在计数值达到设定值的时候触发中断(定时器触发中断)

在STM32中,定时器分为:高级定时器(TIM1,TIM8),通用定时器(TIM2/3/4/5),基本定时器(TIM6/TIM7)

本次博客我们主要针对基本和通用定时器进行介绍,高级定时器通过手册简略了解即可,如有不懂的需要自己去看看STM32 参考手册》,定时器的介绍占了 1/5 的篇幅,足见其重要性。

三. 基本定时器(TIM6/TIM7)

完成定时器的基本功能,即定时功能,开中断或DMA后,在计数器溢出时可以产生中断请求或DMA请求。

1.TIM6TIM7简介以及特性

1)基本定时器TIM6TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。

2)可以作为通用定时器提供时间基准,特别地可以为数模转换器 (DAC) 提供时钟。实际上,它
们在芯片内部直接连接到 DAC 并通过触发输出直接驱动 DAC
        这2 个定时器是互相独立的,不共享任何资源。

2.TIM6TIM7的主要特性

16 位自动重装载累加计数器
16 位可编程 ( 可实时修改 ) 预分频器,用于对输入的时钟按系数为 1 65536 之间的任意数值
分频
● 触发 DAC 的同步电路
● 在更新事件( 计数器溢出 ) 时产生中断 /DMA 请求
仅支持向上计数

3.基本定时器框图和介绍

4.基本定时器时钟选择  

  • 计数器的时钟由内部时钟(CK_INT)提供。
  • TIMx_CR1寄存器的CEN位和TIMx_EGR寄存器的UG位是实际的控制位,(除了UG位被自动清
  • 除外)只能通过软件改变它们。一旦置CEN位为’1’,内部时钟即向预分频器提供时钟。
  • TIM6 /7 在APB1总线上,按工程默认时钟配置TIM6 /7的时钟是72M

    除非APB1的分配系数是1,否则基本定时器和通用定时器的时钟都是等于APB1的2倍

5.基本定时器功能介绍

  • 一般做定时中断使用,或者定时事件
  • 主模式触发DAC的功能
  • 主模式触发DAC:

            让内部的硬件在不受控制的条件下实现自动运行,当我们需要DAC来测试电压点的时候,就可以通过更新事件来映射到TRGO的DAC上,实现定时触发DAC的功能,避免通过更新中断频繁触发DAC。还可以为模数转换器(DAC)提供时钟,即在芯片内部直接连接到ADC并通过触发输出直接驱动ADC

四 . 通用定时器(TIM2/3/4/5)

        STM32F1 的通用定时器是一个通过可编程预分频器( PSC )驱动的 16 位自动装载计数器
CNT )构成。

1.TIM2/3/4/5简介

  • 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
  • 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和
  • PWM)
  • 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。
  • 每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。

2.TIM2/3/4/5主要功能

  • 16位向上、向下、向上/向下自动装载计数器
  • 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165536之间的任意
  • 数值
  • 4个独立通道:
  • 输入捕获
  • 输出比较
  • PWM生成(边缘或中间对齐模式)
  • 单脉冲模式输出
  • ● 使用外部信号控制定时器和定时器互连的同步电路
  • ● 如下事件发生时产生中断/DMA
  • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
  • 输入捕获
  • 输出比较
  • ● 支持针对定位的增量(正交)编码器和霍尔传感器电路
  • ● 触发输入作为外部时钟或者按周期的电流管理

3.通用定时器框图和介绍

4.通用定时器时钟选择 

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

5.通用定时器功能介绍

  • 拥有基本定时器的所有功能,如定时中断,主模式触发DAC。
  • 拥有内外时钟源选择,不了解系统时钟的可以看看我之前的博客:STM32+内部时钟树详解.
  • 输入捕获:可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量 PWM 输入信号的频率及占空比。
  • 输出比较:输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 。
  • 编码器接口:STM32提供的编码器接口模式主要针对的就是“正交编码器”,它可以利用定时器的“计数”功能,得出编码器计了多少个脉冲;同时,它可以根据编码器AB的相位得出编码器是正转,还是反转。一般和电机配合工作,了解即可

五 .高级定时器(TIM1,TIM8)

1.TIM1TIM8简介

  • 高级控制定时器(TIM1TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。
  • 它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、 PWM、嵌入死区时间的互补PWM)
  • 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
  • 高级控制定时器(TIM1TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们 可以同步操作,

2.TIM1TIM8主要特性

  • 16位向上、向下、向上/下自动装载计数器
  • 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165535之间的任意
  • 数值
  • ● 多达4个独立通道:
  • 输入捕获
  • 输出比较
  • PWM生成(边缘或中间对齐模式)
  • 单脉冲模式输出
  • ● 死区时间可编程的互补输出
  • ● 使用外部信号控制定时器和定时器互联的同步电路
  • ● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
  • ● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
  • ● 如下事件发生时产生中断/DMA
  • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
  • 输入捕获
  • 输出比较
  • 刹车信号输入
  • ● 支持针对定位的增量(正交)编码器和霍尔传感器电路
  • ● 触发输入作为外部时钟或者按周期的电流管理

3.高级定时器框图和介绍

4.高级定时器时钟选择 

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

 5.高级定时器功能介绍

  • 拥有通用定时器的全部功能
  • 有额外的重复计数器,在原本最大支持定时59S的基础上*65536(为三相无刷电机设计)
  • 死区生成(互补的PWM波):系统框图中设计了DTG死区生成电路。主要目的是为了驱动三相无刷电机,因为驱动三相无刷电机需要三个桥臂*2个大功率开关控制。在通过开关切换的时候,可能由于硬件器件的限制,会造成短暂的直通现象,所以该设计是为了生成一定的死区时间,让桥臂上下管关闭,防止直通现象的发生。
  • 刹车输入:为电机设计,主要是为了防止内部时钟死机或者刹车失效,对电机生成刹车型号,切断电机的输出,保护电机不受损坏。
  • 为电机设计的了解即可,新手不用深究

六.定时器时基单元和时序:

● 预分频寄存器(TIMx_PSC):软件设置的分频系数+1  = 实际的分配系数
1)它的系数介于1-65536之间的任意值,对时钟进行分频,是一个16位寄存器。
分频的意思就是对时钟周期时间进行分割,
如果我们想获取一个精确的1ms中断,如果不分频,72MHz的时钟对应每周期1/72us,十分不利于计算。这时候使用预分频器将其72分频后为1MHz,每周期1us,1000个计时周期即为1ms,这样既便于计算,定时也更加精确。
2)16位计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。
影子寄存器的作用:
        我们在程序中能够访问的是自动重装载寄存器,而芯片中实际工作的是影子寄存器,也就是每次与计数器进行比较的寄存器是影子寄存器,我们设定在自动重装载寄存器中的值在每次更新事件发生时传入影子寄存器,预分频器和影子寄存器的关系也是如此。
● 计数器寄存器(TIMx_CNT)

1)顾名思义,这就是一个计数的寄存器,在分频之后,每一个周期结束计数+1,因为也是一个16位的寄存器,所以它的范围也是在1-35536之间。

2)16位计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。

● 自动重装载寄存器(TIMx_ARR)

1)当计数器和自动重装载寄存器相等时,就会触发更新中断,该寄存器是一个16位的,最大65536。

2)当触发中断后,就会更新数值,重新进行下一次判断,依次循环

3)决定计数器一个周期计数的次数,即定时器的周期,它也有缓冲器,即影子寄存器

所以我们在使用定时器的时候,就需要设置预分频系数和重装载值来确定需要更新中断的时间

       当开启影子寄存器时,只有在每次更新事件发生时,影子寄存器的值才更新为自动重装载寄存器中的值,重装载影子寄存器可以开,也可以关.但是,预分频寄存器的影子寄存器是不可以关掉的,它是一直开启的.

时钟源:

预分频器时序

  • 计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
  • 计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。
  • CK_PSC=72M

计数器时序

计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)= CK_PSC / (PSC + 1) / (ARR + 1)

计算中断时间:

定时器实现定时时间:

总结:


        以上就是STM32定时器的简略教程,关于定时器的讲解手册讲了很多,但是对应入门的来说,我们得先了解他的作用和概念,学会使用为前提,所以如果需要更加深入就需要对照手册来了解了。接下来几篇博客将会介绍定时器中断,PWM和输入捕获,会教使用和代码,欢迎各位交流

   点赞收藏关注双击博主,不定期分享单片机知识,互相学习交流。
————————————————
 

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

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

相关文章

线性系统理论 -- 降阶观测器的设计

定理: 若系统能观测,且rankCm,则系统的状态观测器的最小维数是(n-m)。 线性定常时不变系统方程如下(以三阶(n3)单入单出系统为例,有mrankC1): 取变换阵P,有: 对上述系统…

AT89S52单片机的定时器

目录 定时器/计数器的结构 工作方式控制寄存器TMOD和TCON 定时器/计数器T1、T0的4种工作方式 1.方式0 2.方式1 3.方式2 4.方式3 定时器/计数器T2的结构与工作方式 1.T2的特殊功能寄存器T2MOD和T2CON 2.特殊功能寄存器T2CON 3.T2的三种工作模式 1. 捕捉方式 2.重新…

LangChain 14 SequencialChain链接不同的组件

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

基于Eclipse+Mysql+Tomcat开发的挖掘机配件营销系统

基于EclipseMysqlTomcat开发的挖掘机配件营销系统 项目介绍💁🏻 大家都有目共睹,现在的科学技术发展很迅速。而如今,计算机应用已经完全融入到人们的生产和生活当中,特别是企业,现在的企业几乎都是离不开计…

论如何让Spring Boot在高压力环境下依然与众不同

文章目录 🔊博主介绍🥤本文内容调优线程池优化线程池配置多样化设备支持分布式控制同步编程 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客…

网络和信息系统指令 ( NIS2 ) 及其全球影响

网络和信息系统指令 ( NIS2 ) 将于 2024 年 10 月生效,旨在提高欧盟 (EU) 的网络弹性。 不过,其影响可能会更广泛,带来更严格的流程和控制,并重新定义我们向被视为国家关键的组织提供服务的方式。 该强制性指令将具有效力&#x…

centos7.9 + gitlab12.3.0安装

本文在centos7.9操作系统上安装gitlab 12.3.0,gitlab官方最新的版本已经是16.6.0了,这里仍然安装12.3.0版本的原因是汉化包的最新版本是12.3.0,如果汉化包的版本和gitlab的版本不对应,会出现汉化他无法启动的现象。 1、安装依赖 …

第3章 表、栈和队列

前言 本章讨论最简单和最基本的三种数据结构。实际上,每一个有意义的程序都将至少明确使用一种这样的数据结构,而栈则在程序中总是隐含使用,不管你在程序中是否做了声明。 在这一章,我们将: 介绍抽象数据类型…

python实现rpc的几种方式(SimpleXMLRPCServer 自带的、第三方ZeroRPC)、连接linux远程开发分布式锁、分布式id

1 python实现rpc的几种方式 1.1 SimpleXMLRPCServer 自带的 1.2 第三方ZeroRPC 2 连接linux远程开发 3 分布式锁 4 分布式id 1 python实现rpc的几种方式 # 远程过程调用-1 借助于rabbitmq,可以跨语言-2 SimpleXMLRPCServer 自带的-3 ZeroRPC-4 GRPC:跨语言的 htt…

【Python】torch.exp()和 torch.sigmoid()函数详解和示例

本文对torch.exp()和 torch.sigmoid()函数进行原理和示例讲解,以帮助大家理解和使用。 目录 torch.exp函数原理运行示例 torch.sigmoid()函数原理运行示例torch.sigmoid相关知识 结合运行 torc…

C++设计模式——工厂模式 :简单工厂、工厂方法、抽象工厂

工厂模式可以分为三种,简单工厂模式,工厂方法模式和抽象工厂模式。 那么,这三种工厂模式长啥样,又为啥会衍生出这三种模式来呢?本篇和大家一起来学习总结一下。 一、简单工厂模式 简单工厂SimpleFactory 负责创建所有…

Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件

QMianWindow 概述 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及 一个中心部件 (central widget) 许多应用程序的基础…

Python内置类属性`__name__`属性的使用教程

更多Python学习内容:ipengtao.com Python中的__name__是一种内置的特殊属性,通常用于判断模块是作为主程序运行还是作为模块被导入。本文将深入讲解__name__属性的用法,通过丰富的示例代码展示其在不同情景下的应用。 模块作为主程序运行 当一…

软著项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

快上车~「黄钊的AI日报·第二季」预约抢跑群、锁定明晚早鸟价

本周,即将开启我的小报童专栏「黄钊的AI日报第二季」(12月1日~2月29日)。 周三(明天)晚上,会举办“抢跑群”活动,首发「早鸟票」、专栏内容及相关福利介绍,包括但不限于:…

服务器中启动和停止项目

服务器中启动和停止项目 一、前言二、使用命令启动和关闭项目1、启动项目2、停止项目 三、使用可执行脚本启动和关闭项目1、启动项目2、停止项目 一、前言 在服务器上部署项目,一般就是将项目挂在后台,如果是微服务首选docker-compose,但如果…

人工智能-优化算法之梯度下降

梯度下降 尽管梯度下降(gradient descent)很少直接用于深度学习, 但了解它是理解下一节随机梯度下降算法的关键。 例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。 同样地&#x…

二百零八、Hive——HiveSQL异常:Select查询数据正常,但SQL语句加上group by查询数据为空

一、目的 在HiveSQL的DWD层中,需要对原始数据进行去重在内的清洗,结果一开始其他数据类型的清洗工作都正常,直到碰到转向比数据。 一般的SQL查询有数据,但是加上group by以后就没数据; 一般的SQL查询有数据&#xf…