目录
1. 输入捕获简介
STM32定时器可以分为相关时钟、时基单元、输入捕获、输出比较。在上一节我们已经学习了STM32的输出PWM比较功能,本节我们将学习STM32的输入捕获功能。
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32F4系列拥有14个定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。
输入捕获功能就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如说上升沿/下降沿)的时候,将当前定时器的值TIMx_CNT存放到对应通道的捕获/比较寄存器TIMx_CCRx里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。

2. 输入捕获框图


输入捕获的过程:输入阶段对TIx输入进行采样,通过滤波器生成一个滤波信号TIxF,然后通过一个带有极性选择的边沿检测器(极性选择就是确定高电平有效还是低电平有效)生成一个信号(TIxFPx),信号一方面可以用作模式控制器的触发输入,另一方面可以捕获命令,通过分频器分频以后传给捕获/比较寄存器。
3. 输入捕获模式
在输入捕获模式下,当相应的ICx信号( ICx称作输入捕获、OCx称作输出比较 )检测到跳变沿(上升沿、下降沿)后,将会使用TIMx_CCRx捕获/比较寄存器来存储这一时候计数器的值。发生捕获事件时,会将状态寄存器TIMx_SR的CCXIF位置1,并且这一时刻在使能的状态下可以发送中断或者DMA请求。如果发生捕获事件时CCxIF标志已经处于高位1,那么会将重复捕获标志状态寄存器的CCxOF位置1。可以通过写程序的方式给CCxIF位写入0来将CCxIF位清0,或者读取存储在TIMx_CCRx寄存器中的已捕获数据。
发生输入捕获时:
发生有效跳变沿时,TIMx_CCR1寄存器会获取计数器的值,保存下来。
将CC1IF标志位置1。如果至少发生了两次连续捕获,但CC1IF标志未被清0,则CC1OF捕获溢出标志位会被置1。
根据CC1IE位生成中断。
根据CC1DE位生成DMA请求。
输入捕获测量脉宽的原理:

假定定时器工作在向上计数模式,图中的t1~t2时间,就是我们要测量的高电平时间;首先设置定时器通道x为上升沿捕获,这样在t1时刻会进行第一次捕获,记为CCRx1,记录当前计数器CNT的值;立即清0 CNT,设置定时器通道x为下降沿捕获,在t2时刻,会进行第二次捕获,记录这时的计数器值,记为CCRx2,这样,根据时钟值得到计数器的计数频率,就能算出t1~t2的时间,从而得到高电平脉宽。
如图,在t1到t2之间,可能会产生N次定时器溢出,为了防止高电平太长,导致数据不准确,需要计算CNT计数的次数:N*ARR+CCRx2,用计数次数乘以CNT的计数周期,就可以得到t2~t1的时间长度。
4. 相关寄存器
4.1 TIMx_ARR、TIMx_PSC
这两个寄存器在过去学习定时器功能时,常常用到;分别是自动重装载值寄存器和时钟预分频寄存器。
4.2 捕获/比较寄存器1:TIMx_CCMR1
捕获/比较寄存器1:TIMx_CCMR1(capture/compare mode register 1)

在PWM输出中,已经介绍了该寄存器的输出位配置;这次我们着重看输入部分:也就是第二行ICxx;
第二行的输入部分的高8位是2通道IC2

文章详细介绍了STM32的输入捕获功能,包括输入捕获的原理、模式、相关寄存器配置,以及如何使用库函数配置输入捕获以测量高电平脉冲宽度。重点讨论了TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER和TIMx_DIER等寄存器在输入捕获中的作用,并提供了实验程序示例。
3445

被折叠的 条评论
为什么被折叠?



