通用定时器输入捕获实验

文章介绍了STM32如何使用输入捕获模式来测量脉冲宽度,主要涉及TIM5_Channel1的配置,包括设置上升沿捕获、中断/DMA触发和捕获值存储。提供了相关的初始化函数、中断服务函数和主函数代码示例。

输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。 STM32 的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值( TIMx_CNT)存放到对应的通道的捕获/比较寄存器( TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。

通用定时器的输入捕获计时原理如下。以捕获测量高电平脉宽、递增计数模式为例,当我们捕捉到高电平脉冲的上升沿触发信号,则将时间数据计入CRRx1寄存器,将电平触发模式修改为下降沿触发,并且重置CNT计数器使之从0重新计数。随后,我们记录有N次溢出(CNT计数器达到了ARR自动重装载寄存器数据系数的数值)。当输入接收到下降沿输入信号后,将时间计入CRRx2,结束捕获部分。最后计算时间为Time=(Arr+1)*N+CRRx2,其中ARR=Tout/(PSC+1)。

 接下来介绍实验代码。

实验要求:通过TIM5_Channel1捕获按键高电平脉宽时间,并通过串口打印或LED状态转变。以1MHz为例,Tout=(ARR+1)*(PSC+1)/Ft,可以计算得PSC=71,ARR=65535。

在我们之前的gtim.h的基础上进行编写。

首先编写函数头文件代码gtim.h:

#ifndef __GTIM_H
#define __GTIM_H
 
#include "./SYSTEM/sys/sys.h"
 
extern TIM_HandleTypeDef g_timx_pwm_chy_handle;
extern uint8_t g_timxchy_cap_sta = 0;
extern uint16_t g_timxchy_cap_val 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值