1. STM32通用定时器输入捕获模式详解
在嵌入式系统开发中,精确测量外部信号的周期和频率是一项常见需求。STM32系列微控制器的通用定时器提供了强大的输入捕获功能,能够高效完成这类任务。本文将深入讲解如何使用STM32F103的TIM4定时器测量PWM信号的周期和频率。
1.1 输入捕获基本原理
输入捕获的工作原理其实很直观:当检测到指定边沿(上升沿或下降沿)时,定时器会立即将当前计数器值(CNT)锁存到捕获/比较寄存器(CCRx)中。通过记录两个相邻上升沿之间的时间差,就能计算出信号的周期。
具体实现流程:
- 配置定时器基础时钟(本例设为1MHz,即每个计数代表1μs)
- 设置捕获通道为上升沿触发
- 第一个上升沿到来时:
- 产生捕获中断
- CNT值存入CCR1
- 清零CNT重新计数
- 第二个上升沿到来时:
- 新的CNT值即为信号周期(单位μs)
- 再次清零CNT开始新周期测量
1.2 硬件连接要点
实验中使用TIM2_CH2(PA1)产生PWM信号,TIM4_CH1(PB6)进行捕获测量。实际连接时需注意:
重要提示:PWM输出引脚和捕获输入引脚需要通过杜邦线物理连接,不可直接短接芯片引脚!
推荐连接方式:
- 使用示波器探头同时监测PA1输出和PB6输入信号
- 确保地线共用,避免测量误差
- 信号线长度尽量短(<10cm)以减少干扰
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 定时器配置关键解析
2.1 定时器基础参数设置
c复制TIM4->PSC = 71; // 72MHz/(71+1)=1MHz
TIM4->ARR = 65535; // 最大计数值
TIM4->CR1 &= ~TIM_CR1_DIR; // 向上计数
参数设计考量:
- 预分频值PSC=71:将72MHz主频分频为1MHz,每个计数周期对应1μs
- ARR设为最大值65535:实现最长65.535ms的测量周期(对应最低约15Hz)
- 测量范围计算:
- 最高频率:1MHz(理论极限,实际受中断处理速度限制)
- 最低频率:1/65535≈15Hz
2.2 输入捕获通道配置
c复制// 输入捕获关键配置
TIM4->CCMR1 &= ~TIM_CCMR
