【STM32】TIM定时器

第一部分:定时器基本定时的功能;

第二部分:定时器的输出比较功能;

第三部分:定时器输入捕获的功能;

第四部分:定时器的编码接口。

1 TIM简介

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

1.1 定时器类型

类型

编号

总线

功能

高级定时器

TIM1TIM8

APB2

拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能

通用定时器

TIM2TIM3TIM4TIM5

APB1

拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能

基本定时器

TIM6TIM7

APB1

拥有定时中断、主模式触发DAC的功能

STM32F103C8T6定时器资源:TIM1TIM2TIM3TIM4

1.1.1 基本定时器

基本定时器框图:拥有定时中断、主模式触发DAC的功能

下面三部分预分频器计数器自动重装载寄存器构成最基本的计数计时电路,因此叫时基单元。

预分频器之前连接的是基准计数时钟的输入,可以认为连接到了输入端,也就是CK_INT(72MHz)

预分频器对72MHz的计数时钟进行分频,预分频器写0就是不分频,写1就是二分频36MHz......,所以预分频器的值和实际的分频系数相差1,即实际分频系数=预分频器的值 + 1。这个预分频器是16位的,所以最大值是65535,也就是65536分频。

然后是计数器,计数器可以对预分频器后的计数时钟进行计数,计数时钟每来一个上升沿,计数器就加1,这个计数器也是16位的,所以里面的值可以从0一直加到65535,再加的话,计数器就会从0开始。所以计数器的值在计时过程中会不断的自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务,所以还需要一个存储目标值的寄存器,那就是自动重装载寄存器。

自动重装载寄存器也是16位的,它存储的就是我们写入的计数目标,在运行过程中,计数器值不断自增,自动重装载寄存器的值是固定的,当计数值等于自动重装值时,也就是计时时间到了,此时会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。

UI那里向上的折线,代表这里会产生中断信号,像这种计数值等于重装值产生的中断,称为"更新中断",这个更新中断会通往NVIC,再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。

U向下的折线,代表这里会产生一个事件,这里对应的事件称为"更新事件",更新事件不会触发中断,但是可以触发内部其它电路的工作。

总结:从基准时钟,到预分频器,再到计数器,计数器自增,同时不断与自动重装寄存器进行比较,它俩值相等时,即计时时间到,这时会产生一个更新中断和更新事件,CPU响应更新中断,就完成定时中断的任务了。

主模式触发DAC(数字/模拟转换模块)功能:它能让内部的硬件在不受程序的控制下实现自动运行。

用途:在使用DAC的时候,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。如果用正常的思路实现,就是先设置一个定时器产生中断,每隔一段时间在中断函数中调用代码手动触发一次DAC转换,然后DAC输出,这样也是没问题的,但是会使主程序处于频繁被中断的状态,会影响主程序的运行和其它中断的响应,所以定时器设置了一个主模式,使用这个主模式可以把定时器的更新事件映射到触发输出(Trigger Out, TRFO)的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接去触发DAC了,整个过程不需要软件的参与,实现了硬件的自动化,这就是主模式的作用。

1.1.2 通用定时器

复杂很多,中间部分还是时基单元

通用计数器那种模式是向上计数,即自增;通用定时器和高级定时器还支持向下计数模式(向下自减,减到0,再回到重装值申请中断)和中央对齐模式(先向上自增到重装值,申请中断,再向下自减,减到0,申请中断)

这部分是内外时钟源选择和主从触发模式的结构了。对于基本定时器而言,定时只能选择内部时钟,也就是系统频率72MHz;到了通用定时器这里,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟。第一个外部时钟来自TIMx_ETR引脚上的外部时钟,这个ETR(External)引脚的位置,参考引脚定义表。

TIM2_CH1_ETR的意思是TIM2的CH1和ETR都是复用在这个位置,即PA0引脚。

这里就可以在TIM2的ETR引脚,也就是PA0上接一个外部方波时钟,然后配置一下内部的极性选择、边沿检测和预分频器电路,再配置一下输入滤波电路(对输入波形进行滤波),滤波后的信号,兵分两路,上面一路ETRF进入触发控制器,紧跟着就可以选择作为时基单元的时钟了,这一路电路称为"外部时钟模式2"。

除了外部ETR引脚可以提供时钟外,下面还有一路可以提供时钟,就是TRGI(Trigger In),它主要的作用是用作触发输入来使用的,这个触发输入可以触发定时器的从模式。暂时可以把TRGI看作外部时钟的输入来看,这一路称为"外部时钟模式1"。通过这一路的外部时钟有ETR引脚的信号ITR信号(ITR信号来自其他定时的TRGO处,连接方式见下图:TIM2的ITR0连到TIM1的TRGO上,TIM2的ITR1连到TIM8的TRGO上,TIM2的ITR2连到TIM1的TRG3上,TIM2的ITR3连到TIM4的TRGO上)可以实现定时器级联的功能。

通过这一路的外部时钟有TI1F_ED这里连接的是输入捕获单元的CH1引脚,也就是从CH1引脚获得时钟,后面加ED,是边沿的(Edge)意思,也就是通过这一路输入的时钟,上升沿和下降沿均有效。

最后还能通过TI1FP1TI2FP2获得。其中TI1FP1连接到CH1引脚的时钟,其中TI2FP2连接到CH2引脚的时钟。

总结:外部时钟模式1的输入可以是ETR引脚、其他定时器、CH1引脚的边沿、CH1引脚和CH2引脚;一般情况外部时钟通过ETR引脚就可以了。

如果使用外部时钟,首选ETR引脚外部时钟模式2的输入。

定时的编码器接口,可以读取正交编码器的输出波形。

再看下面的电路,主要是两部分:

输出比较电路:总共有4个通道,分别对应CH1-CH4的引脚,可以用于输出PWM波形,驱动电机

输入捕获电路:总共有4个通道,分别对应CH1-CH4的引脚,可以用来测量输入方波的频率等

中间寄存器是捕获/比较寄存器,是输入捕获和输出比较共用的电路。输入捕获和输出比较不能同时使用。

1.1.3 高级定时器

和通用定时器相比多的地方,第一个是申请中断的地方,增加了重复次数计数器,实现每个几个计数周期才发生一次更新事件和更新中断(原来是每个计数周期都会发生更新),相当于对输出的更新信号又做了一次分频(59s*65536)

下面的是高级定时器对输出比较模块的升级了

DTG(Dead Time Generate)死区生成电路,右边的输出引脚由原来的一个变为两个互补的输出,可以输出一对互补的PWM波,这些电路是为了驱动三相无刷电机的(四轴飞行器、电动车的后轮、电钻等)

最后一部分就是刹车输入功能,为了给电机驱动提供安全保障的。如果外部引脚TIMx_BKIN(break in)产生刹车信号或者内部时钟失效,产生了故障,那么控制电路就会自动切断电机的输出,防止意外的发生。

1.2 定时中断基本结构

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

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

相关文章

STM32GPIO速度配置究竟改变了什么-笔记

STM32GPIO速度配置究竟改变了什么-笔记 摘要STM32引脚内部框图STM32时钟树端口寄存器I/O交流特性定义 摘要 一般有 Low、Medium、High,三种速度选择。速度配置变了硬件什么状态? 对 GPIO 的输入输出信号有什么影响? 编程时如何选取速度参数&…

【网络】传输层 -- 详解IP协议及IP协议的分片原理

目录 一、IP协议基本概念二、IP协议头格式1、报头和有效载荷如何分离2、有效载荷是如何向上交付(分用)的3、具体IP报头 三、网段划分1、什么是网段划分2、如何进行子网划分?再次理解子网划分及如何划分 3、私有IP地址和公网IP地址4、路由 四、…

虚拟机备份数据自动化验证原理

备份数据成功备份下来了,但是备份数据是否可用可靠?对于这个问题,最好最可靠的方法是将备份数据实际恢复出来验证。 但是这样的方法,不仅费时费力,而且需要随着备份数据的定期产生,还应当定期做备份数据验…

opencv知识库:利用cv2.resize()函数进行图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

Java面试题(每天10题)-------连载(41)

目录 Spring篇 1、什么是Spring框架?Spring框架主要有哪些模块? 2、使用Spring框架能带来哪些好处? 3、什么是控制反转(IOC)?什么是依赖注入? 4、解释下Spring中的IoC? 5、BeanFactory和…

Fiddler抓包工具之fiddler设置弱网测试

弱网测试 概念:弱网看字面意思就是网络比较弱,我们通称为信号差,网速慢。 意义:模拟在地铁、隧道、电梯和车库等场景下使用APP ,网络会出现延时、中断和超时等情况。 Fiddler弱网测试流程: 一、限速操作…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602移屏显示应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602移屏显示应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介绍掉电保…

使用Python免费调用通义千问大模型

Qwen-72b开源模型 模型的主要用途是预测或描述一个系统或现象的行为模式。它可以帮助人们更好地理解这个系统或现象,例如预测股市变化、天气预报、地震预警、交通流量等。模型也常用于设计和优化产品和工艺。在科学研究中,模型也是一种方法,用…

仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能

仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能 一、引言 随着电子商务的快速发展,用户体验成为了竞争的关键因素。在众多的电商网站中,如京东和淘宝,商品列表筛选功能为用户提供了便捷的途径来找到心仪的商品。本…

使用JSP+Servlet+MySQL实现登录注册功能

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

【电路笔记】-并联电阻

并联电阻 文章目录 并联电阻1、概述2、并联电阻示例13、并联电阻示例24、并联电阻电路中的电流5、并联电阻器示例36、总结 当电阻器的两个端子分别连接到另一个或多个电阻器的每个端子时,电阻器被称为并联连接在一起。 1、概述 与之前的串联电阻电路不同&#xff0…

神经网络 模型表示2

神经网络 模型表示2 使用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值: 我们令 z ( 2 ) θ ( 1 ) x {{z}^{\left( 2 \right)}}{{\theta }^{\left( 1 \right)}}x z(2)θ(1)x,则 a ( 2 ) g ( z ( 2 ) ) {{a}…

动态规划 | 打家劫舍1、2、3

198. 打家劫舍 https://leetcode.cn/problems/house-robber/description/ dp[i] 表示 考虑到下标为 i (包括i)的房子,可以偷到的最大金额。 dp[i] 有两个状态,分别是 偷 和 不偷。 偷,则需要考虑前 i-2 天的最大金额…

Linux常见指令大全及周边知识:让你的命令行变得更加强大

文章目录 目录 文章目录 前言 一,Linux操作系统是啥? 二,Linux操作系统具有以下特点 三,指令的学习 1,指令是什么? 2,ls 指令及其常用的衍生指令: 周边知识: ls…

Selenium page object模式Python

目录 概述 优点 示例 项目结构: 基础页面类BasePage 业务页面类BaiduHomePage 测试类test_baidu: 文件工具类file_util 运行日志: 测试结果: 概述 在web应用程序的UI中,有一些区域可以与测试交互。页面对象…

【虚拟机】Docker基础 【二】

2.2.数据卷 容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题: 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了&#x…

微信小程序实现打分效果代码整理

一、微信小程序点击对应点击高亮 js代码 Page({data: {list: [1, 2, 3, 4, 5],active: 0},itemClickOne(e){var nume.currentTarget.dataset.value;this.setData({active:num});}, }) wxml代码 <view class"list"><view class"item {{itemactive?…

IDC MarketScape2023年分布式数据库报告:OceanBase位列“领导者”类别,产品能力突出

12 月 1 日&#xff0c;全球领先的IT市场研究和咨询公司 IDC 发布《IDC MarketScape:中国分布式关系型数据库2023年厂商评估》&#xff08;Document number:# CHC50734323&#xff09;。报告认为&#xff0c;头部厂商的优势正在扩大&#xff0c;OceanBase 位列“领导者”类别。…

C#语言高阶开发

目录 数据结构 集合 动态数组ArrayList 习题&#xff1a;声明一个Monster类&#xff0c;有一个Attack方法,用一个ArrayList去封装Monster的对象,装10个&#xff0c;遍历monster的list让他们释放攻击方法 哈希表HashTable 创建一个武器类&#xff0c;有一个属性叫做id,每个…

【数据中台】开源项目(3)-Linkis

关于 Linkis Linkis 在上层应用程序和底层引擎之间构建了一层计算中间件。通过使用Linkis 提供的REST/WebSocket/JDBC 等标准接口&#xff0c;上层应用可以方便地连接访问MySQL/Spark/Hive/Presto/Flink 等底层引擎&#xff0c;同时实现统一变量、脚本、用户定义函数和资源文件…