输入捕获的核心不是“中断来了就读一下计数器”,而是让硬件在指定边沿到来时锁存计数值,从而测量边沿之间的时间。面试官通常会继续追问:如何区分周期和高电平宽度、计数器溢出怎么办、输入滤波会不会影响测量精度。

先把测量量定义清楚
定时器计数频率
fcnt = fTIM / (PSC + 1)
周期与占空比
T = Nperiod / fcnt;f = 1/T;D = Nhigh / Nperiod
公式中的计数差要考虑计数器回绕、捕获边沿配置和具体芯片的计数规则。
实战测量流程
将输入信号接到支持输入捕获的定时器通道,确认引脚复用、输入电压范围和边沿极性。
捕获相邻两个同类边沿的计数值,得到周期计数;再捕获上升沿到下降沿的计数差,得到高电平宽度。
根据定时器输入时钟和预分频计算计数频率,再换算输入频率与占空比。预分频越大,计数范围更长,但时间分辨率会降低。
若计数器可能在两次捕获间溢出,需要用溢出中断扩展计数,或使用正确的模运算处理回绕;不能直接对两个无符号数相减后就假设结果正确。
输入滤波可抑制毛刺,但滤波窗口太长可能漏掉窄脉冲或引入边沿延迟。要结合信号频率、最小脉宽和芯片定时器时钟选择。
中断服务函数应尽量短,保存捕获值后再在主循环或任务中计算;如果输入频率变化很快,需考虑捕获寄存器被新值覆盖、DMA缓冲深度和数据处理速度。
“我会用硬件输入捕获锁存边沿时刻。两个同向边沿的计数差用于算周期,上升沿到下降沿的计数差用于算高电平宽度,再结合定时器实际计数频率换算频率和占空比。若计数器可能溢出,要扩展计数或处理回绕;输入滤波则根据最小脉宽和抗毛刺要求设置,不能盲目开大。”
面试官可能继续问
为什么输入捕获比软件轮询GPIO更适合测高频脉冲?
预分频过大和过小分别会带来什么问题?
如果占空比偶尔跳变,怎样区分输入毛刺、捕获覆盖和计算溢出?
本文用于电子工程师技术学习与面试准备,具体设计应结合器件数据手册、产品规范、仿真和实测结果确认。

扫码关注






























