【STM32】定时器输入捕获

STM32 定时器输入捕获功能笔记

一、什么是输入捕获(Input Capture)

输入捕获是利用定时器的输入通道,在检测到信号电平变化(如上升沿或下降沿)时,立即将当前计数器的值捕获并保存到捕获寄存器(CCR)中 。这一过程由硬件完成,不会受程序运行延迟影响,可用于精确测量信号的时间特性。

典型应用场景:测量脉冲宽度、频率、信号周期等。


二、输入捕获的基本原理

  • STM32 的通用定时器和高级定时器都支持输入捕获功能。

  • 每个输入通道(TIx)都对应一个捕获寄存器 CCRx。

  • 捕获过程:
    TIx → 滤波器 → 边沿检测 → 捕获事件 → CCRx记录当前CNT值

当配置为上升沿捕获 时:

→ 信号从低跳高时,CCRx 记录当前定时器 CNT 的值。

当配置为下降沿捕获 时:

→ 信号从高跳低时,CCRx 同样记录 CNT 值。

📌 一个通道只能设置为上升沿或下降沿捕获,不能同时捕获两个。


三、直接模式与间接模式(重点)

输入捕获支持 直接模式间接模式,用于灵活地测量信号宽度或周期。

模式 捕获通道 检测通道 用途举例
直接模式 CCR1 记录 TI1FP1 的边沿 用于周期或频率测量
间接模式 CCR1 记录 TI2FP1 的边沿 用于测量高/低电平宽度(PWM输入)

⚠️ TI1/TI2 是一对可互相借用输入的通道,TI3/TI4 亦同理。

例如 CCR1 可以捕获 TI2(间接模式)输入的边沿,而不是 TI1。

示例说明:
  • PWM输入测量

    • CCR1 配置为捕获上升沿(周期起点)

    • CCR2 配置为捕获下降沿(占空比终点)

    • 得到的两次捕获值之差即可算出高电平持续时间或周期


四、通道映射说明

text 复制代码
TI1  --> TI1FP1 → 捕获寄存器1(CCR1)
TI2  --> TI2FP2 → 捕获寄存器2(CCR2)
TI1  --> TI1FP2 → 捕获寄存器2(间接模式)
TI2  --> TI2FP1 → 捕获寄存器1(间接模式)

TI3、TI4同理,支持直接与间接映射

五、CubeMX 设置步骤(以 TIM2 CH1 CH2 为例)

1.选择定时器 TIM2

2.选择 Channel 1 → Input Capture Direct Mode(上升沿)

3.选择 Channel 2 → Input Capture Indirect Mode(下降沿)

4.设置输入极性(上升沿/下降沿)

5.设置采样频率与滤波器(一般默认即可)

6.勾选 TIM2 global interrupt

7.生成代码并编辑中断回调函数


六、HAL库相关函数与代码示例

1. 启动捕获:

c 复制代码
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 启动通道1输入捕获(中断方式)
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); // 启动通道2输入捕获

2. 中断回调处理:

c 复制代码
uint32_t capture1 = 0, capture2 = 0, pulse_width = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
    {
        capture1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 上升沿时间
    }
    else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
    {
        capture2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // 下降沿时间

        if(capture2 > capture1)
            pulse_width = capture2 - capture1;
        else
            pulse_width = (0xFFFF - capture1 + capture2); // 溢出处理
    }
}
1;
        else
            pulse_width = (0xFFFF - capture1 + capture2); // 溢出处理
    }
}
相关推荐
ye1501277745513 分钟前
220V转5V1A隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
ye150127774552 小时前
DC24V-100V转3.3V500mA隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
Lumos6fly2 小时前
51单片机从零到实战(15)——数字时钟温度计
单片机·嵌入式硬件·51单片机
放学校门口见4 小时前
vscode部署stm32开发调试环境
ide·vscode·stm32
碎光拾影6 小时前
I2C总线通信全解析:从原理到实战
单片机·嵌入式硬件
愈心凌6 小时前
SSI 绝对值编码器通信 - 单片机TM32Cubemax配置教程
单片机·嵌入式硬件
科芯创展6 小时前
1.5A,5.5VIN,单灯,XZ4059A/D,4.2V/4.34V
单片机
江哥工作室7 小时前
几分钱的 LM358 采集心电
单片机·lm358·心电·小信号
z20348315207 小时前
CLion开发STM32——文件管理
stm32·单片机·嵌入式硬件·clion
weixin_452077648 小时前
STM32 烧录程序后上电不工作问题集合
stm32·单片机·嵌入式硬件