引言
输入捕获是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/CKCNT)
其中:
- 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
228

被折叠的 条评论
为什么被折叠?



