STM32的输入捕获

本文详细介绍了STM32的输入捕获功能,包括设置捕获滤波器、捕获极性、通道映射、分频器和中断开启。通过具体的代码实例展示了如何配置定时器、初始化IO口、设置输入捕获通道、配置中断以及编写中断服务函数,以实现输入信号的有效捕获和处理。最后,通过串口通信在电脑上显示捕获时间。

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

输入捕获就是常说采集,工作流程一般包括以下5个步骤:
(1)设置输入捕获滤波器
(2)设置捕获极性
(3)设置捕获通道映射
(4)设置捕获分频器
(5)开启中断
结合下图具体说明
在这里插入图片描述

(1)设置捕获滤波器
通过设置TIMx_CCMR1的ICF位,设置采样频率和数字滤波长度,图中fDTS是通过设置TIMx_CR1的CDK[1:0]来确定的,如果CDK[1:0]为00,则fDTS=fCK_INT,fCK_INT就是定时器的输入频率。
在这里插入图片描述

假如设置IC1F为0011,则采样频率和定时器输入频率一样,N则是滤波长度,如果设置上升沿触发,则其在捕获到上升沿的时候再连续采样8次,如果都是高电平则是一个有效的电平,这样就会滤除波形时常不足8*1/fCK_INT的高电平,达到滤波效果,此时就会触发捕获中断。

(2)通过设置TIMx_CCER的CC1P位来设置触发信号。

(3)设置捕获映射通道,一般通道x映射ICx

(4)分频器就是设置多少次触发一次中断,如果设置IC1PSC为00,

### STM32 输入捕获实现方法 #### 基本原理 STM32输入捕获模式允许通过定时器捕捉外部信号的边沿事件,从而可以测量脉冲宽度或者频率。这种模式广泛应用于电机控制、编码器读取和其他需要精确时间测量的应用场景中[^1]。 为了配置输入捕获功能,通常涉及以下几个方面: - **选择触发源**:指定哪个通道作为输入捕获使用的触发源。例如,在 `TIM3` 中可以选择 `TI1FP1` 作为触发源。 ```c // 设置 TIM3 使用 TI1FP1 作为触发源 TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); ``` - **初始化定时器参数**:设置自动重装载寄存器 (ARR) 和预分频器 (PSC),这些决定了计数周期和分辨率。这一步骤可以通过定义头文件中的宏来简化配置过程[^3]。 ```c #ifndef _TIMER_H_ #define _TIMER_H_ #include "sys.h" void TIM_CAPTURE_InitConfig(uint16_t ARR, uint16_t PSC); #endif /* _TIMER_H_ */ ``` 实际应用时还需要编写具体的初始化函数用于设定上述提到的各项参数,并开启相应的中断服务程序以便于处理捕获到的数据。 #### 示例代码说明 下面是一个简单的例子展示如何利用 HAL 库完成基本的输入捕获操作: ```c /* 定义全局变量存储捕获值 */ uint32_t Capture_Value; /* 初始化定时器并启动输入捕获 */ static void MX_TIM3_Init(void) { __HAL_RCC_TIM3_CLK_ENABLE(); htim3.Instance = TIM3; // 配置定时器工作在输入捕获模式下 TIM_IC_ConfigTypeDef sConfigIC = {0}; sConfigIC.ICFilter = 0x0A; // 滤波系数 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } } /* 获取当前捕获值 */ void GetCaptureValue(void) { HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1); } ``` 此段代码展示了如何基于硬件抽象层(HAL)库对 `TIM3` 进行初始化以执行上升沿检测的任务。当发生有效的电平变化时会触发一次中断请求,进而可以在回调函数里获取最新的捕获数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值