STM32_TIM_定时器

news2026/3/19 9:39:37
文章目录一、定时器二、基本定时器1、时钟源2、计数器时钟3、计数器4、自动重装载寄存器5、定时时间的计算三、高级定时器1、高级定时器框图2、高级定时器引脚分布3、高级定时器功能图1.时钟源2.控制器3.时基单元4.输入捕获5.输出比较6.断路功能一、定时器STM32 定时器是嵌入式开发中最常用的外设之一功能涵盖定时中断、PWM 输出、输入捕获、输出比较等。二、基本定时器1、时钟源定时器时钟 TIMxCLK即内部时钟 CK_INT经 APB1预分频器后分频提供如果APB1 预分频系数等于 1则频率不变 否则频率乘以 2库函数中 APB1预分频的系数是2即 PCLK136M所以定时器时钟 TIMxCLK36*272M。2、计数器时钟定时器时钟经过 PSC 预分频器之后即 CK_CNT用来驱动计数器计数。PSC是一个16 位的预分频器 可以对定时器时钟 TIMxCLK 进行 1~65536之间的任何一个数进行分频。具体计算方式为CK_CNT TIMxCLK/(PSC1)。3、计数器计数器 CNT 是一个 16 位的计数器只能往上计数最大计数值为65535。当计数达到自动重装载寄存器的时候产生更新事件并清零从头开始计数。4、自动重装载寄存器自动重装载寄存器 ARR 是一个 16位的寄存器这里面装着计数器能计数的最大数值。当计数到这个值的时候如果使能了中断的话定时器就产生溢出中断。5、定时时间的计算定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT的驱动下计一个数的时间则是 CK_CLK的倒数等于1/TIMxCLK/(PSC1)产生一次中断的时间则等于1/CK_CLK * ARR。如果在中断服务程序里面设置一个变量time 用来记录中断的次数那么就可以计算出我们需要的定时时间等于1/CK_CLK* (ARR1)*time。三、高级定时器1、高级定时器框图2、高级定时器引脚分布3、高级定时器功能图1.时钟源高级控制定时器有四个时钟源可选内部时钟源CK_INT外部时钟模式1外部输入引脚TIxx1,2,3,4外部时钟模式2外部触发输入ETR内部触发输入(ITRx)内部时钟源(CK_INT)内部时钟CK_INT即来自于芯片内部等于72M一般情况下我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR的SMS位等于000时则使用内部时钟。外部时钟模式11时钟信号输入引脚当使用外部时钟模式1的时候时钟信号来自于定时器的输入通道总共有4个分别为TI1/2/3/4即TIMx_CH1/2/3/4。具体使用哪一路信号 由TIM_CCMRx的位CCxS[1:0]配置其中CCMR1控制TI1/2CCMR2控制TI3/4。2滤波器如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话我们就需要使用滤波器对信号重新采样来达到降频或者去除高频干扰的目的具体的由TIMx_CCMRx的位ICxF[3:0]配置。3边沿检测边沿检测的信号来自于滤波器的输出在成为触发信号之前需要进行边沿检测决定是上升沿有效还是下降沿有效具体的由TIMx_CCER的位CCxP和CCxNP配置。4触发选择当使用外部时钟模式1时触发源有两个一个是滤波后的定时器输入1TI1FP1和滤波后的定时器输入2TI2FP2具体的由TIMxSMCR的位TS[2:0]配置。5从模式选择选定了触发源信号后最后我们需把信号连接到TRGI引脚让触发信号成为外部时钟模式1的输入最终等于CK_PSC然后驱动计数器CNT计数。 具体的配置TIMx_SMCR的位SMS[2:0]为111即可选择外部时钟模式1。6使能计数器经过上面的5个步骤之后最后我们只需使能计数器开始计数外部时钟模式1的配置就算完成。使能计数器由TIMx_CR1的位CEN配置。外部时钟模式21时钟信号输入引脚当使用外部时钟模式2的时候时钟信号来自于定时器的特定输入通道TIMx_ETR只有1个。2外部触发极性来自ETR引脚输入的信号可以选择为上升沿或者下降沿有效具体的由TIMx_SMCR的位ETP配置。3外部触发预分频器由于ETRP的信号的频率不能超过TIMx_CLK72M的1/4当触发信号的频率很高的情况下 就必须使用分频器来降频具体的由 TIMx_SMCR的位ETPS[1:0]配置。4滤波器如果ETRP的信号的频率过高或者混杂有高频干扰信号的话我们就需要使用滤波器对ETRP信号重新采样 来达到降频或者去除高频干扰的目的。具体的由TIMx_SMCR的位ETF[3:0]配置 其中的fDTS是由内部时钟CK_INT分频得到具体的由TIMx_CR1的位CKD[1:0]配置。5从模式选择经过滤波器滤波的信号连接到ETRF引脚后触发信号成为外部时钟模式2的输入最终等于CK_PSC然后驱动计数器CNT计数。具体的配置TIMx_SMCR的位ECE为1即可选择外部时钟模式2。6使能计数器经过上面的5个步骤之后最后我们只需使能计数器开始计数外部时钟模式2的配置就算完成。使能计数器由TIMx_CR1的位CEN配置。内部触发输入内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起 可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。2.控制器高级控制定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。触发控制器用来针对片内外设输出触发信号比如为其它定时器提供时钟和触发DAC/ADC转换。编码器接口专门针对编码器计数而设计。从模式控制器可以控制计数器复位、启动、递增/递减、计数。有关控制器部分只需熟练阅读寄存器描述即可。3.时基单元高级控制定时器时基单元功能包括四个寄存器分别是计数器寄存器(CNT)、预分频器寄存器(PSC)、自动重载寄存器(ARR)和重复计数器寄存器(RCR)。 其中重复计数器RCR是高级定时器独有通用和基本定时器没有。前面三个寄存器都是16位有效TIMx_RCR寄存器是8位有效。1. 预分频器PSC预分频器PSC有一个输入时钟CK_PSC和一个输出时钟CK_CNT。输入时钟CK_PSC就是上面时钟源的输出输出CK_CNT则用来驱动计数器CNT计数。 通过设置预分频器PSC的值可以得到不同的CK_CNT 实际计算为fCK_CNT等于fCK_PSC/(PSC[15:0]1)可以实现1至65536分频。2. 计数器CNT高级控制定时器的计数器有三种计数模式分别为递增计数模式、递减计数模式和递增/递减(中心对齐)计数模式。(1) 递增计数模式下计数器从0开始计数每来一个CK_CNT脉冲计数器就增加1直到计数器的值与自动重载寄存器ARR值相等 然后计数器又从0开始计数并生成计数器上溢事件计数器总是如此循环计数。如果禁用重复计数器在计数器生成上溢事件就马上生成更新事件(UEV) 如果使能重复计数器每生成一次上溢事件重复计数器内容就减1直到重复计数器内容为0时才会生成更新事件。(2) 递减计数模式下计数器从自动重载寄存器ARR值开始计数每来一个CK_CNT脉冲计数器就减1直到计数器值为0 然后计数器又从自动重载寄存器ARR值开始递减计数并生成计数器下溢事件计数器总是如此循环计数。如果禁用重复计数器 在计数器生成下溢事件就马上生成更新事件如果使能重复计数器每生成一次下溢事件重复计数器内容就减1直到重复计数器内容为0时才会生成更新事件。(3) 中心对齐模式下计数器从0开始递增计数直到计数值等于(ARR-1)值生成计数器上溢事件 然后从ARR值开始递减计数直到1生成计数器下溢事件。然后又从0开始计数如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。3. 自动重载寄存器ARR自动重载寄存器ARR用来存放与计数器CNT比较的值如果两个值相等就递减重复计数器。可以通过TIMx_CR1寄存器的ARPE位控制自动重载影子寄存器功能 如果ARPE位置1自动重载影子寄存器有效只有在事件更新时才把TIMx_ARR值赋给影子寄存器。如果ARPE位为0则修改TIMx_ARR值马上有效。4. 重复计数器RCR在基本/通用定时器发生上/下溢事件时直接就生成更新事件但对于高级控制定时器却不是这样高级控制定时器在硬件结构上多出了重复计数器 在定时器发生上溢或下溢事件是递减重复计数器的值只有当重复计数器为0时才会生成更新事件。在发生N1个上溢或下溢事件(N为RCR的值)时产生更新事件。4.输入捕获入捕获可以对输入的信号的上升沿、下降沿或者双边沿进行捕获常用的有测量输入信号的脉宽测量PWM输入信号的频率和占空比这两种。输入捕获的大概的原理就是当捕获到信号的跳变沿的时候把计数器CNT的值锁存到捕获寄存器CCR中把前后两次捕获到的CCR寄存器中的值相减 就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期就会发生溢出这个我们需要做额外的处理。1. 输入通道需要被测量的信号从定时器的外部引脚TIMx_CH1/2/3/4进入通常叫TI1/2/3/4在后面的捕获讲解中对于要被测量的信号我们都以TIx为标准叫法。2. 输入滤波器和边沿检测器当输入的信号存在高频干扰的时候我们需要对输入信号进行滤波即进行重新采样根据采样定律采样的频率必须大于等于两倍的输入信号。 比如输入的信号为1M又存在高频的信号干扰那么此时就很有必要进行滤波我们可以设置采样频率为2M 这样可以在保证采样到有效信号的基础上把高于2M的高频干扰信号过滤掉。滤波器的配置由CR1寄存器的位CKD[1:0]和CCMR1/2的位ICxF[3:0]控制。从ICxF位的描述可知 采样频率fSAMPLE可以由fCK_INT和fDTS分频后的时钟提供 其中是fCK_INT内部时钟fDTS是fCK_INT经过分频后得到的频率 分频因子由CKD[1:0]决定可以是不分频2分频或者是4分频。边沿检测器用来设置信号在捕获的时候是什么边沿有效可以是上升沿下降沿或者是双边沿具体的由CCER寄存器的位CCxP和CCxNP决定。3. 捕获通道捕获通道就是图中的IC1/2/3/4每个捕获通道都有相对应的捕获寄存器CCR1/2/3/4当发生捕获的时候计数器CNT的值就会被锁存到捕获寄存器中。这里我们要搞清楚输入通道和捕获通道的区别输入通道是用来输入信号的捕获通道是用来捕获输入信号的通道 一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道TI1的信号经过滤波边沿检测器之后的TI1FP1和TI1FP2可以进入到捕获通道IC1和IC2 其实这就是我们后面要讲的PWM输入捕获只有一路输入信号TI1却占用了两个捕获通道IC1和IC2。当只需要测量输入信号的脉宽时候 用一个捕获通道即可。输入通道和捕获通道的映射关系具体由寄存器CCMRx的位CCxS[1:0]配置。4. 预分频器ICx的输出信号会经过一个预分频器用于决定发生多少个事件时进行一次捕获。具体的由寄存器CCMRx的位ICxPSC配置如果希望捕获信号的每一个边沿则不分频。5. 捕获寄存器经过预分频器的信号ICxPS是最终被捕获的信号当发生捕获时第一次计数器CNT的值会被锁存到捕获寄存器CCR中 还会产生CCxI中断相应的中断位CCxIF在SR寄存器中会被置位通过软件或者读取CCR中的值可以将CCxIF清0。 如果发生第二次捕获即重复捕获CCR寄存器中已捕获到计数器值且 CCxIF 标志已置 1 则捕获溢出标志位CCxOF在SR寄存器中会被置位CCxOF只能通过软件清零。5.输出比较输出比较就是通过定时器的外部引脚对外输出控制信号有冻结、将通道Xx1,2,3,4设置为匹配时输出有效电平、 将通道X设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、PWM1和PWM2这八种模式 具体使用哪种模式由寄存器CCMRx的位OCxM[2:0]配置。其中PWM模式是输出比较中的特例使用的也最多。1. 比较寄存器当计数器CNT的值跟比较寄存器CCR的值相等的时候输出参考信号OCxREF的信号的极性就会改变其中OCxREF1高电平称之为有效电平 OCxREF0低电平称之为无效电平并且会产生比较中断CCxI相应的标志位CCxIFSR寄存器中会置位。 然后OCxREF再经过一系列的控制之后就成为真正的输出信号OCx/OCxN。2. 死区发生器在生成的参考波形OCxREF的基础上可以插入死区时间用于生成两路互补的输出信号OCx和OCxN 死区时间的大小具体由BDTR寄存器的位DTG[7:0]配置。死区时间的大小必须根据与输出信号相连接的器件及其特性来调整。 下面我们简单举例说明下带死区的PWM信号的应用我们以一个板桥驱动电路为例。在这个半桥驱动电路中Q1导通Q2截止此时我想让Q1截止Q2导通肯定是要先让Q1截止一段时间之后再等一段时间才让Q2导通 那么这段等待的时间就称为死区时间因为Q1关闭需要时间由MOS管的工艺决定。如果Q1关闭之后马上打开Q2 那么此时一段时间内相当于Q1和Q2都导通了这样电路会短路。带死区插入的互补输出 是针对上面的半桥驱动电路而画的带死区插入的PWM信号图中的死区时间要根据MOS管的工艺来调节。3. 输出控制在输出比较的输出控制中参考信号OCxREF在经过死区发生器之后会产生两路带死区的互补信号OCx_DT和OCxN_DT通道1~3才有互补信号通道4没有 其余跟通道1~3一样这两路带死区的互补信号然后就进入输出控制电路如果没有加入死区控制那么进入输出控制电路的信号就直接是OCxREF。进入输出控制电路的信号会被分成两路一路是原始信号一路是被反向的信号具体的由寄存器CCER的位CCxP和CCxNP控制。 经过极性选择的信号是否由OCx引脚输出到外部引脚CHx/CHxN则由寄存器CCER的位CxE/CxNE配置。如果加入了断路刹车功能则断路和死区寄存器BDTR的MOE、OSSI和OSSR这三个位会共同影响输出的信号。4. 输出引脚输出比较的输出信号最终是通过定时器的外部IO来输出的分别为CH1/2/3/4 其中前面三个通道还有互补的输出通道CH1/2/3N。更加详细的IO说明还请查阅相关的数据手册。6.断路功能断路功能就是电机控制的刹车功能使能断路功能时根据相关控制位状态修改输出信号电平。在任何情况下 OCx和OCxN输出都不能同时为有效电平这关系到电机控制常用的H桥电路结构原因。断路源可以是时钟故障事件由内部复位时钟控制器中的时钟安全系统(CSS)生成也可以是外部断路输入IO两者是或运算关系。系统复位启动都默认关闭断路功能将断路和死区寄存器(TIMx_BDTR)的BKE为置1使能断路功能。 可通过TIMx_BDTR 寄存器的BKP位设置设置断路输入引脚的有效电平设置为1时输入BRK为高电平有效否则低电平有效。发送断路时将产生以下效果TIMx_BDTR 寄存器中主输出模式使能(MOE)位被清零输出处于无效、空闲或复位状态根据相关控制位状态控制输出通道引脚电平当使能通道互补输出时会根据情况自动控制输出通道电平将TIMx_SR 寄存器中的 BIF位置 1并可产生中断和DMA传输请求。如果 TIMx_BDTR 寄存器中的 自动输出使能(AOE)位置 1则MOE位会在发生下一个UEV事件时自动再次置 1。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…