STM32-一文搞懂通用定时器捕获/比较通道

发布者:MysticalDreamer最新更新时间:2022-04-23 来源: eefocus关键字:STM32  比较通道 手机看文章 扫描二维码
随时随地手机看文章

捕获和比较

捕获

什么是捕获

所谓捕获就是通过检测捕获通道上的边沿信号。在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCR)里面,完成一次捕获。


捕获的应用

STM32支持一下捕获模式:


输入捕获模式

PWM输入模式

输入捕获模式可以用来测量脉冲宽度或者测量频率。下图是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 时间,就是需要测量的高电平时间。

测量方法如下:首先设置定时器通道 x 为上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。


比较

什么是比较

所谓比较就是计数器的值和与装载的值进行比较。


比较的应用

STM32支持一下比较模式:


强置输出模式

输出比较模式

PWM模式

单脉冲模式

最近本的应用就是PWM模式了!

上图是输出PWM的原理,假定定时器工作在向上计数 PWM模式,且当 CNT=CCRx 时输出 1。当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。


捕获/比较通道概述

捕获/比较通道与定时器密切相关,密不可分,水乳交融,使用不同的功能要使用到不同的寄存器,这里只列举与输入捕获、PWM相关的寄存器。如果使用到其他功能,详细的相关的寄存器在《STM32中/英文参考手册》的14.4章节。通用定时器框图如下所示,红色框是计数器部分,在计数器的基础上,还有下方的4个独立的捕获/比较通道,主要用于


输入捕获

输出比较

PWM生成(边缘或中间对齐模式) 

单脉冲模式输出

每一个捕获/比较通道都是围绕着一个捕获/比较寄存器,包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。捕获/比较通道的的主电路如下图所示(通道1为例)

捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。


在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。

在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。


输入通道

捕获/比较通道的输入通道1如下图所示。

输出通道

捕获/比较通道的输出通道1如下图所示。

捕获/比较相关寄存器

捕获/比较模式寄存器 1 (TIMx_CCMR1)

通道可用于输入(捕获模式)或输出(比较模式),通道的方向由相应的CCxS[1:0]定义。以CC1S[1:0]为例


CC1S[1:0]:捕获/比较1 选择,这2位定义通道的方向(输入/输出),及输入脚的选择:

00:CC1通道被配置为输出;

01:CC1通道被配置为输入,IC1映射在TI1上;

10:CC1通道被配置为输入,IC1映射在TI2上;

11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由

TIMx_SMCR寄存器的TS位选择)。

注:CC1S仅在通道关闭时(TIMx_CCER寄存器的CC1E=’0’)才是可写的。


其中IC1和TI1的关系在上面系统图中可以看到,下图可见,IC1是可以接到TI1或TI2或TRC上的,这个位就是配置这里的!

该寄存器其它位的作用在输入和输出模式下不同,OCxx(第一行)描述了通道在输出模式下的功能,ICxx(第二行)描述了通道在输出模式下的功能。该寄存器是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用于捕获/比较通道 2 的控制。CCMR2 是用来控制通道 3 和通道 4。


输入模式


每个通道的位相同,这里是看其中一个通道的相关位

f_{CKINT} 是定时器的输入频率,一般是72MHz。f_{DTS}是根据TIMx_CR1的CKD[1:0]的设置来确定,一般为00,f_{DTS}=f_{CKINT}


另外关于滤波器的长度要特别解释一下,我们知道边沿信号的跳变可能不是完美的。比如我们在处理按键的跳变信号的时候都有一个“消抖”的过程,而消抖有两种方式:1.等待稳定  2.数字滤波;第一种方式就是所谓的“延时消抖”,第二种方式就是在定时器中断的方式获取按键的状态(以采样周期T对按键状态进行采样),如果连续采集到N次按键的状态是“按下”的状态就认为是按下的状态,如果连续的N次采集中至少有一次不是“按下”的状态就不认为按键被按下,也就是说只有等按键按下之后的波形稳定之后才能被连续采集到N次“按下”状态,以此达到滤波的目的。


举个栗子:假设一个包含毛刺的上升沿跳变信号的采样如下(时间从左到右)


0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 


如果我们用N=4进行滤波的话,红色部分就会被认为没有上升沿跳变,绿色部分才被认为跳变!


0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 


如果用N=2进行滤波的话,红色部分会被认为没有上升沿跳变,绿色部分被认为有上升沿跳变!但是由于这个边沿信号抖动太厉害,N=2的滤波没能有效滤波,误认为有两次跳变!因此,对不同的跳变信号,要选用合适的滤波长度,滤波长度要能覆盖最长的边沿信号抖动!


0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 


输出模式

这三位定义了输出参考信号OC1REF的动作,而OC1REF决定了OC1的值。OC1REF是高电平有效,而OC1的有效电平取决于捕获/比较使能寄存器TIMx_CCER的CC1P位。

共可以配置成 7 种模式,为110或111时为PWM模式。这两种 PWM 模式的区别就是输出电平的极性相反。其中有效电平可以设置为高电平有效或者低电平有效。


电路中的极性就是电压的方向,两个PWM的一个周期的电平正好相反(0和非0)就是极性相反。


输入捕获相关寄存器

需要用到的寄存器有:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1等


TIMx_ARR 和 TIMx_PSC用来设定时器x的自动重装载值和 TIMx 的时钟分频,在《STM32-定时器系统原理》中已经说到,TIMx_CCMR1和TIMx_CCMR2前文已经说到,不再赘述。


捕获/比较使能寄存器 (TIMx_CCER)

这个寄存器包含了4个通道,每个通道两个(CCxE和CCxP)的使能位。


以第一个通道为例

要使能输入捕获,必须设置 CC1E=0,而 CC1P 则根据自己的需要来配置。


DMA/中断使能寄存器 (TIMx_DIER)

CCxIE:允许捕获/比较x中断 (Capture/Compare 1 interrupt enable) 

0:禁止捕获/比较x中断;

1:允许捕获/比较x中断。

如果用到中断来处理捕获数据,必须开启通道 1 的捕获比较中断,即 CC1IE 设置为 1。


控制寄存器 1 (TIMx_CR1)

前文《STM32-定时器系统原理》介绍过这个寄存器,所有与定时器相关的应用都要通过置位它的最低位来使能定时器。


捕获/比较寄存器 1~4 (TIMx_CCR1~4)

这四个寄存器分别是四个通道的,功能相似!这里仅以通道1的为例。

若CC1通道配置为输出:

CCR1包含了装入当前捕获/比较1寄存器的值(预装载值)。

如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载特性,写入的数值会被立即传输至当前寄存器中。否则只有当更新事件发生时,此预装载值才传输至当前捕获/比较1寄存器中。当前捕获/比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。

若CC1通道配置为输入:

CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。


PWM输出相关的寄存器

所有PWM相关寄存器都在上文提到,PWM输出一般不需要触发中断,因此用不到DMA/中断使能寄存器 (TIMx_DIER)。

关键字:STM32  比较通道 引用地址:STM32-一文搞懂通用定时器捕获/比较通道

上一篇:STM32-快速上手PWM输出
下一篇:STM32-定时器系统原理

推荐阅读最新更新时间:2024-11-12 20:22

STM32的NVIC中断优先级
一、STM32 NVIC 中断优先级管理 1,中断: CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。 STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。 在 STM32F103 系列 上面,又只有 60 个(在 107 系列才有 68 个)可屏蔽中断。如下: 2,中断管理方法: 首先,对 STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。 分组配置是在寄存器SCB- A
[单片机]
<font color='red'>STM32</font>的NVIC中断优先级
STM32的串口通信原理介绍
介绍串口通信 按照数据传送方向分类 单工:数据传输只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端 按照通信方式分类 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时
[单片机]
stm32 spi从模式配置解答
目标:stm32(战舰) 和 stm32(迷你)的spi对传(战舰做从,迷你做主) 结果:对传成功 代码不写,你网上搜索到的可以用; 但提示:我用的是(主从片选都是软件配置); 关键点介绍:重要的是极性和相位的配置(stm32的spi对传有问题); 我stm32迷你用的极性和相位选的都为0(即Low和边沿1触发);stm32战舰极性和相位选的为1(即High和边沿2触发) 过程介绍:开始我配置着相同的极性和相位,发现Master发送4bytes数据,A1,A2,A3,A4,slave接收到的数据是D0,D1,51,D2; 经如下计算: A1 A2 A3 A4 1010 0001 1010 0010
[单片机]
STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能
基本方法 1.设置TIM2 CH1为输入捕获功能; 2.设置上升沿捕获; 3.使能TIM2 CH1捕获功能; 4.捕获到上升沿后,存入capture_buf ,改为捕获下降沿; 5.捕获到下降沿后,存入capture_buf ,改为捕获上升沿; 6.捕获到上升沿后,存入capture_buf ,关闭TIM2 CH1捕获功能; 7.计算:capture_buf - capture_buf 就是周期,capture_buf - capture_buf 就是高电平所占时间。 时钟配置: 引脚看是否需要上拉 做项目中的一个例子: /** * 函数功能: TIM_IC配置 * 输入参数:
[单片机]
<font color='red'>STM32</font> HAL库学习系列第7篇---<font color='red'>定时器</font>TIM 输入<font color='red'>捕获</font>功能
STM32 与 ST-Link V2仿真器 接线与烧录
STM32下载器 ST-Link V2仿真器 STM8编程器 自动升级 3.3V 5V可用 驱动下载地址:https://pan.baidu.com/s/1CM8z0W1BkYlX_Ek-iauCmw 资料下载地址:https://pan.baidu.com/s/1Mcjco71s14jlcAkVqE1-yQ 迷你ST-LINK / V2,功能与官方完全一致,支持自动升级,支持全系列STM32 SWD 和全系列 STM8 SWIM的下载和调试。 本店ST-LINK V2 八大靓点: 1、使用U盘外壳安装内部主板,携带方便,安全可靠! 2、接口定义直接在外壳上标注,一目了然,方便实用! 3、5V、3.3V同
[单片机]
<font color='red'>STM32</font> 与 ST-Link V2仿真器 接线与烧录
重返STM32之---STM32定时器的误解
说是接触STM32都快3年了,说来也惭愧,很多东西都还没搞明白;应该也是因为英文水平有待提到的原因,不能正确的理解英文的含义,毕竟我们的语言思维是不一样的(找个借口吧哈哈)。 最近在用STM32的定时器,以前都是匆匆走过,由于自己想标准化自己的编程代码,所以这次很用心的用通用定时器写通用的延时函数,网上很多都是用的系统滴答时钟(SysTlck)来做的,但是想着自己要向操作系统方向发展,就不能用这个定时器了。 平时因为用的是滴答时钟来做的延时函数,就没怎么去深究;这次用通用定时来做的时候,发现问题一大把。首先就是定时器的时钟分频,第二个就是如何不用中断来实现定时。因为自己觉得对STM32很了解,所以就范范的写了代码,觉得自己肯定没问
[单片机]
重返<font color='red'>STM32</font>之---<font color='red'>STM32</font><font color='red'>定时器</font>的误解
判断STM32 GPIO输入口的输入状态(高电平或低电平)
在学习STM32中的过程中,经常会遇到“高电平有效”,“低电平有效”等字眼,初看时很多时候就会从字面上理解,认为高电平有效的意思就是有效电平是高电平,低电平有效的意思就是有效电平是低电平的意思。而实际上,这样的理解是有误的。下面咱们以STM32的定时器中输出比较通道为例: 这幅图实际上就是一个pwm波产生的过程,对定时器不了解的可以去查阅相关手册,现在我们先看图中标号1的输出模式控制器,这里模式是指pwm模式,他的意思就是可以通过配置寄存器TIMx_CCMR1的OC1M两位,来选择pwm的模式,但是关于模式选择,手册中有这样一句话:在向下计数时,一旦TIMx_CNT TIMx_CCR1时通道1为无效电平(OC1REF=0),
[单片机]
判断<font color='red'>STM32</font> GPIO输入口的输入状态(高电平或低电平)
STM32-嵌入式学习笔记02-中断应用概述
STM32中断非常强大,每个外设都能产生中断 中断的优先级数值越小,说明他的中断优先级越高 配置中断需要了解NVIC寄存器: NVIC是嵌套向量中断控制寄存器,控制中断的相关功能;它与内核紧密结合,是内核里的一个外设。管理着包括内核和片上的所有外设的中断相关功能。 因此配置中断需要参考下面两个头文件:core_cm3.h 和 misc.h 在配置中断的时候我们一般只配置ISER和ICER IP这3个寄存器: 1)ISER使能中断 2)ICER清除中断 3)设置中断的优先级 给出官方手册寄存器的资料 编程要领: 1)使能中断请求(外设中某个中断) 2)配置优先级分组 3)配置
[单片机]
STM32-嵌入式学习笔记02-中断应用概述

推荐帖子

设计软件软件打不开是什么原因
WIN1064位软件,安装了KEIL5后KEIL5运行正常,这后再安装KEIL4,安装完毕后,以管理员权限运行KEIL4,没有任何反应,根本就不运行,请问如何解决?是KEIL4在WIN1064位下根本就不能用,还是KEIL4和KEIL5有冲突?设计软件软件打不开是什么原因不要安装到同一个目录 非常感谢。但是,并没有安装在同一个目录呀。 那估计是下载的软件有问题,重新下一个。
深圳小花 单片机
【颁奖礼】我用“ADI实验室电路“讲故事
经过为期两周的放飞创意,最终选出本期活动的”故事大王“为tiankai001,将获得价值500元的购物机会一次。感谢大家对本次活动及ADI实验室电路的支持,希望通过这个小小的活动,使得大家的设计工作中充满开心、快乐、趣味。其中参与网友常见泽1、欣之、莫妮卡、ddllxxrr、jjkwz、taburiss001、yujiyuan1984、785180572、eeleader、llllll111、jishuaihu可获赠10元手机
EEWORLD社区 ADI参考电路
LPC1768资料大放送
此内容由EEWORLD论坛网友cxmdz原创,如需转载或用于商业用途需征得作者同意并注明出处LPC1768资料大放送这么多资料应该上传到下载中心线 主要是太麻烦了,而且这些文件都不大,下载速度很快。谢谢共享,学习了
cxmdz NXP MCU
利用MSP430F149对光电码盘进行计数
求助该电路图和软件设计程序利用MSP430F149对光电码盘进行计数有啥问题,说明白点 现在要利用这种单片机对光电码盘送来的脉冲进行计数,我是新手,不太懂,所以想问问可不可以帮忙把这个电路图弄出来,还有编程的程序,谢谢脉冲直接用定时器捕获即可,电路简单,可以直接接到捕获引脚 好的,谢谢可以搜索找找现成的例子学习一下 没搜到电路图:Cry:直接使用计数器就好了,16位的定式/计数器可以计数到六万五千多
luhao19920818 微控制器 MCU
上下拉电阻的作用?
上下拉电阻的作用是什么?不仅仅是在集电极或者射击输出这样的输出电路结构上,在串口通信电路中和外围电路到芯片之间的电路之间也有上下拉电阻,这个上下拉电阻究竟是起到一个什么作用?能否具体介绍。上下拉电阻的作用?上拉电阻:把一个信号引脚拉高到逻辑高电平,以确保信号始终处于逻辑高电平状态。在未连接设备或传感器时,保持信号稳定。为晶体管提供基极偏置电压。提高输出高电平值,例如TTL电路驱动CMOS电路时,或OC门电路应用中。加大输出引脚的驱动能力及提高芯片输入信号的噪声容限,增强抗干扰能力
乱世煮酒论天下 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved