1. 输入捕获模式基础:从零理解测量原理
我第一次接触STM32输入捕获功能时,也是一头雾水。后来在实际项目中才发现,这简直就是测量频率和占空比的神器!简单来说,输入捕获就像是给定时器装了个"抓拍相机",每当检测到信号边沿时,就会立即拍下当前计数器的值。
核心工作原理其实很直观:定时器CNT计数器一直在后台嘀嗒计数,当我们配置好输入捕获通道后,一旦检测到指定的信号边沿(上升沿或下降沿),就会立即把当前的CNT值"抓拍"保存到CCR寄存器中。这样我们通过计算两次抓拍之间的时间差,就能精确算出信号的周期和频率。
这里有个实用技巧:测频法 vs 测周法的选择。高频信号适合用测频法(固定时间内计数脉冲个数),低频信号适合用测周法(测量一个完整周期的时间)。我在电机控制项目中就深有体会——当信号频率超过10kHz时,测周法的误差会明显增大,而测频法则稳定得多。
2. 硬件连接与配置:避开那些坑
实际接线时要注意,STM32的定时器通道与GPIO引脚有固定的映射关系。以TIM3_CH1为例,它对应PA6引脚(部分型号可能支持重映射)。我建议先用万用表确认引脚连接,曾经就因为一个虚焊点折腾了大半天!
关键配置步骤:
- 开启对应定时器和GPIO时钟
- 配置GPIO为上拉输入模式(避免浮空状态误触发)
- 设置时基单元:预分频器PSC和自动重装载值ARR
- 配置输入捕获参数:极性、分频、滤波器等
这里有个容易踩的坑:滤波器设置。如果输入信号有毛刺,可以适当增大滤波器值。但要注意,滤波器会引入少量延迟,对于高频测量需要权衡取舍。我一般从较小值开始调试,逐步增加直到信号稳定。
// GPIO初始化示例
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitSt


345

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



