STM32定时器输入捕获测频时,如何用从模式+复位模式消除软件清零带来的±1计数误差?

· 2 浏览

回答(4)

实测时可在中断里用DMA搬运CCR1,减少CPU干预。若频率极低,可改用溢出中断累加计数,再配合复位模式。
硬件攻城狮 · 2026-09-22
注意从模式复位会清空CNT,若同时用其他通道捕获,需确认不会互相干扰。PWM输入模式是双通道捕获的推荐方案。
STM32小王子 · 2026-09-22
补充:若信号频率较高,可先用预分频器降低定时器时钟,避免CCR1溢出。建议CCR1值在1000~60000之间,兼顾精度与量程。
嵌入式老张 · 2026-09-22
核心思路是让硬件在每次捕获到上升沿时自动复位计数器,从而消除软件读-清零-再读之间的时间窗口误差。配置步骤:1) 将输入通道(如TI1)配置为输入捕获模式,映射到TI1FP1;2) 将从模式控制寄存器SMCR的SMS位设为100(复位模式),触发源TS选择TI1FP1;3) 使能捕获中断,在中断中读取CCR1值。此时每个上升沿到来时,硬件先复位CNT,再将当前计数值锁存到CCR1,因此CCR1就是完整的一个信号周期内的计数。频率=定时器时钟/(PSC+1)/CCR1。注意:捕获极性要选上升沿,且触发信号必须与捕获信号同源;若测占空比,需用PWM输入模式同时捕获两个边沿。这样无需软件清零,彻底消除±1误差。
mcuku 阿沐 · 2026-09-22

🧰 配套工具

⏱️ 定时器计算器