嵌入式单片机基础篇(九)之通用定时器(三)输入捕获

本文详细介绍了STM32F1系列单片机中输入捕获的概念,通过举例解释了输入捕获如何工作。文章讲解了输入捕获的框图、相关寄存器如TIMx_CCMR1、TIMx_CCER、TIMx_DIER和TIMx_CCR1的作用,并阐述了配置输入捕获通道的步骤,包括初始化时钟、IO口、定时器参数、输入捕获功能以及中断设置。此外,还提供了相关函数的使用和中断服务函数的编写指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stm32F1输入捕获详解

1、问题:什么叫输入捕获
回答:举个例子,比如一个信号由低电平变成高电平时,cpu保存定时器的值,信号再由高电平变成低电平时,cpu又保存一次定时器的值,那么通过这两次定时器的值就可以计算出脉冲宽度
问:可否具体?
答:简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
2、输入捕获框图
在这里插入图片描述

3、输入捕获相关寄存器
需要用到的寄存器有:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1
(1)捕获/比较模式寄存器 1:TIMx_CCMR1
在这里插入图片描述

TIMx_CCMR1 是对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用于捕获/比较通道 2 的控制,因为 TIMx 还有 CCMR2 这个寄存器,所以可以知道CCMR2 是用来控制通道 3 和通道 4
在这里插入图片描述
IC1S[1:0]=01,也就是配置 IC1 映射在 TI1 上,即 CC1 对应 TIMx_CH1。
输入捕获 1 预分频器 IC1PSC[1:0],如果是 1 次边沿就触发 1 次捕获,选择 00 。
输入捕获 1 滤波器 IC1F[3:0],这个用来设置输入采样频率和数字滤波器长度。其中,fCK_INT是定时器的输入频率(TIMxCLK),一般为 72Mhz,而 fDTS 则是根据 TIMx_CR1 的 CKD[1:0]的设置来确定的,如果 CKD[1:0]设置为 00,那么 fDTS = fCK_INT,N 值就是滤波长度。
如果IC1F[3:0]=0000,只要采集到上升沿,就触发捕获。
如果IC1F[3:0]=0011,捕获到上升沿的时候,以fCK_INT的频率,连续采样8次通道 1 的电平,如果都是高电平,则说明却是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。
(2)捕获/比较使能寄存器:TIMx_CCER
Bit 1 CC1P: Capture/Compare 1 output polarity
CC1 channel configured as output:
0: OC1 active high.
1: OC1 active low.
CC1 channel configured as input:
This bit selects whether IC1 or IC1 is used for trigger or capture operations.
0: non-inverted: capture is done on a rising edge of IC1. When used as external trigger, IC1
is non-inverted.
1: inverted: capture is done on a falling edge of IC1. When used as external trigger, IC1 is
inverted.
Bit 0 CC1E: Capture/Compare 1 output enable
CC1 channel configured as output:
0: Off - OC1 is not active.
1: On - OC1 signal is output on the corresponding output pin.
CC1 channel configured as input:
This bit determines if a capture of the counter value can actually be done into the input
capture/compare register 1 (TIMx_CCR1) or not.
0: Capture disabled.
1: Capture enabled.
(3)DMA/中断使能寄存器:TIMx_DIER
如果需要用到中断来处理捕获数据,必须开启通道 1 的捕获比较中断,即 CC1IE 设置为 1。
(4)捕获/比较寄存器 1:TIMx_CCR1
该寄存器用来存储捕获发生时,TIMx_CNT
的值,我们从 TIMx_CCR1 就可以读出通道 1 捕获发生时刻的 TIMx_CNT 值,通过两次捕获(一次上升沿捕获,一次下降沿捕获)的差值,就可以计算出高电平脉冲的宽度。
4、相关函数
(1)输入捕获通道初始化函数:
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);

typedef struct
{
   
  uint16_t TIM_Channel; //捕获通道1-4   
  uint16_t TIM_ICPolarity; //捕获极性
  uint16_t TIM_ICSelection; //映射关系
  uint16_t TIM_ICPrescaler; //分频系数
  uint16_t TIM_ICFilter;  //滤波器
} TIM_ICInitTypeDef;

TIM_ICInitTypeDef TIM5_ICInitStructure;
TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1 映射到 TI1 上
TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值