stm32输入捕获

输入捕获简介

输入捕获模式可以用来测量脉冲宽度或者测量频率。

除TIM6和TIM7其他定时器都有输入捕获功能。
工作过程:

简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
上升下降沿->存值->做差求时间

所用寄存器:
TIMx_ARR

设自动重装载值

TIMx_PSC

TIMx 的时钟分频


TIMx_CCMR1|捕获/比较模式寄存器
在这里插入图片描述
**TIMx_CCMR1 **明显是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用于捕获/比较通道 2 的控制。
因为 TIMx 还有 **CCMR2 **这个寄存器,所以可以知道CCMR2 是用来控制通道 3 和通道 4。
在这里插入图片描述
输入捕获 1 预分频器 IC1PSC[1:0],这个比较好理解。我们是 1 次边沿就触发 1 次捕获,所
以选择 00 就是了。
输入捕获 1 滤波器 IC1F[3:0],这个用来设置输入采样频率和数字滤波器长度。


TIMx_CCER捕获/比较使能寄存器
在这里插入图片描述
要使能输入捕获,必须设置 CC1E=0,而 CC1P 则根据自己的需要来配置。


TIMx_DIER DMA/中断使能寄存器
前面有介绍


TIMx_CR1控制寄存器
我们只用到了它的最低位,也就是用来使能定时器的。


TIMx_CCR1捕获/比较寄存器
该寄存器用来存储捕获发生时,TIMx_CNT的值,我们从 TIMx_CCR1 就可以读出通道 1 捕获发生时刻的 TIMx_CNT 值,通过两次捕获(一次上升沿捕获,一次下降沿捕获)的差值,就可以计算出高电平脉冲的宽度。


使用过程

  1. 开启 TIM5 时钟和 和 GPIOA 时钟 ,置 配置 PA0为下拉输入。
  2. 初始化 TIM5, 设置 TIM5 的 的 ARR 和 和 PSC 。
  3. 设置TIM5的输入比较参数,开启输入捕获
  4. 使能捕获和更新中断置(设置 TIM5 的 的 DIER寄存器
  5. 设置中断分组,编写中断服务函数
  6. 使能定时器(设置 TIM5 的 的 CR1 寄存器)
//1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);  //使能 TIM5 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA 时钟
//2
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim5

//3
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)//所用函数
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; //映射到 TI1 上
TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
TIM_ICInit(TIM5, &TIM5_ICInitStructure);

//4
TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断和捕获中断

//5
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){}//判断是否为更新中断
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET){}//判断是否发生捕获事件
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);//清除中断和捕获标志位

//6
TIM_Cmd(TIM5,ENABLE ); //使能定时器 5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值