教你学会如何使用STM32的输入捕获功能

引言

输入捕获是STM32微控制器上可用的高级定时器功能之一。本文指导您了解输入捕获的理论方面,提供一个实际示例,并讨论常见问题的故障排除。在本文中,我们使用 STM32H563微控制器。

1, 输入捕获基础

输入捕获是一项允许定时器记录外部事件发生时间的特性。这对于测量输入信号的频率、周期或脉冲宽度特别有用。定时器在特定输入引脚上检测到边沿(上升沿或下降沿)的时刻,会捕获其计数器的值。

2, 关键组件

  • 定时器计数器 (Timer counter):一个根据定时器时钟递增(或递减)的寄存器。
  • 捕获/比较寄存器 (CCR):存储输入捕获事件发生时计数器的值。
  • 输入捕获通道 (Input capture channel):用于检测输入信号的特定引脚及相关电路。

3, 配置参数

  • 边沿选择 (Edge selection):确定捕获发生在上升沿、下降沿还是两者都捕获。
  • 预分频器 (Prescaler):分频定时器时钟以调整计数器频率。
  • 滤波器 (Filter):通过在捕获前要求信号在指定持续时间内保持稳定来滤除噪声。

4, 实际示例

本示例旨在使用STM32H563上的定时器2测量外部信号的频率

硬件设置:将外部信号连接到定时器2通道1的输入引脚 (PA0)。

步骤 1:配置时钟

在本示例中,HCLK时钟设置为125MHz。定时器2连接到APB1(请参考数据手册中的框图来检查定时器时钟)。

步骤 2:配置定时器设置

  • 单击Configuration (配置) 选项卡。
  • 选择TIM2并为Channel 1 (通道1) 选择 Input capture direct mode (输入捕获直接模式)。

以下公式确定定时器的计数器时钟频率 (CK_CNT):

CK_CNT = HCLK / (PSC + 1)

其中:

  • HCLK是系统时钟频率(本例中为125MHz)。
  • PSC是预分频器值。

定时器周期由自动重载寄存器 (ARR)值和计数器时钟频率决定,公式为:

周期=(ARR+1)∗(1/CKC​NT)

其中:

  • ARR是自动重载寄存器值。
  • CK_CNT是计数器时钟频率。

例如,对于期望的1 ms周期,且CK_CNT=1MHz,我们可以选择PSC=124,这将时钟除以125。使用周期公式,ARR=1000-1=999。

步骤 3:使能定时器中断

步骤 4:配置GPIO引脚

  • 在Pinout & Configuration (引脚分配和配置) 选项卡中,选择连接到输入信号的引脚(TIM2_CH1的PA0)。
  • 确保引脚配置为Alternate Function PP (复用功能推挽) 并设置为正确的定时器通道。

步骤 5:生成项目代码

在中断模式下启动输入捕获

void TIM2_Start_IC(void)
{
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
}

我们使用的变量是:

captureValue:存储定时器计数器的当前捕获值

previousCaptureValue:存储定时器计数器的先前捕获值。用于计算两个连续捕获事件之间的时间差。

frequency:根据捕获值存储计算出的输入信号频率

处理输入捕获中断

uint32_t captureValue = 0;
uint32_t previousCaptureValue = 0;
uint32_t frequency = 0;
 
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
        captureValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
        frequency = HAL_RCC_GetPCLK1Freq() / (captureValue - previousCaptureValue);
        previousCaptureValue = captureValue;
    }
}

5, 已知问题故障排除

以下是用户最可能遇到的问题及其最可能的原因。

5.1. 未检测到捕获事件

  • 检查引脚配置:确保输入引脚已正确配置为定时器的复用功能。
  • 验证信号完整性:确保输入信号干净且满足微控制器要求的电压水平。如果信号有噪声,请考虑使用滤波器。

5.2. 频率测量不正确

  • 调整预分频器:如果测量的频率过高或过低,请调整预分频器以使计数值处于可测量范围内。
  • 对输入信号进行消抖:使用输入滤波器功能对噪声信号进行消抖。

5.3. 中断未触发

  • 启用 NVIC:确保 NVIC 已配置为处理定时器中断。
  • 检查定时器时钟:验证定时器时钟已启用且正在运行。

5.4. 溢出和回绕

  • 处理溢出:如果输入信号周期长于定时器周期,则需实现逻辑来处理计数器溢出。

本篇作者-友尚集团-Jyet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值