1. 脉冲信号检测的核心需求解析
在嵌入式系统开发中,脉冲信号时长检测是硬件接口层的基础功能之一。我曾在工业控制项目中遇到这样的需求:需要通过STM32单片机精确测量传感器输出的脉冲宽度,误差必须控制在±1微秒以内。这种需求在编码器信号处理、红外遥控解码、超声波测距等场景中极为常见。
脉冲信号的本质是电压电平的跳变事件,检测的核心在于准确捕获上升沿和下降沿的时间戳。以常见的5V TTL电平为例,当信号从低于0.8V跃升至高于2V时视为上升沿,反之为下降沿。单片机需要通过硬件定时器配合中断机制,记录这两个关键时间点的计数器值,其差值即为脉冲宽度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件方案选型与比较
2.1 输入捕获模式实战配置
以STM32F4系列为例,其高级定时器(如TIM1)的输入捕获功能最为强大。配置流程如下:
- 时钟配置:确保定时器时钟源为内部时钟(APB2),通过RCC_APB2PeriphClockCmd()使能。若需要1MHz计数频率(1μs分辨率),将APB2预分频设为不分频(168MHz),定时器预分频设为168-1。
c复制RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Prescaler = 167; // 168MHz/(167+1)=1MHz
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitStruct.TIM_Period = 0xFFFF; // 16位最大值
TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM1, &TIM_InitStruct);
- 输入捕获通道配置:选择TIM_Channel_1对应引脚PA8,设置双边沿触发:
c复制TIM_ICInitTypeDef TIM_ICInitStruct;
TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
TIM_ICInitStruct.TIM_ICPolar
