在嵌入式系统的近距离测距应用中,STM32微控制器与
超声波模块的组合凭借低成本、易实现、精度适中等优势,成为智能小车避障、机器人定位、液位检测等场景的主流方案。其核心逻辑是通过STM32控制超声波模块发射声波信号,利用定时器捕获反射信号的时间差,结合声速计算距离,整个过程涉及GPIO控制、定时器输入捕获、中断处理等多重硬件功能的协同,而对细节的精准把控直接决定了测距的稳定性与精度。
STM32驱动超声波测距的硬件基础是模块与控制器的信号交互,以最常用的HC - SR04模块为例,其与STM32的连接仅需两根GPIO引脚:Trig引脚负责接收STM32的触发信号,Echo引脚则向STM32反馈反射波的时间信息。Trig引脚通常连接STM32的通用输出引脚(如PA0),STM32通过向该引脚输出至少10μs的高电平脉冲,触发HC - SR04内部的振荡器产生40kHz的超声波信号,经压电换能器转换为机械波发射出去。Echo引脚则连接STM32支持输入捕获功能的引脚(如PA1),当超声波遇到障碍物反射回来时,HC - SR04会通过Echo引脚输出高电平,高电平的持续时间恰好等于超声波往返的时间差,这一信号将被STM32的定时器捕获,作为距离计算的关键依据。此外,模块还需稳定的5V电源供电,接地端需与STM32共地,避免电位差导致的信号干扰。
软件实现的核心是通过STM32的定时器输入捕获功能精准测量Echo引脚的高电平 duration。通常选择高级定时器(如TIM1)或通用定时器(如TIM2)的输入捕获通道,配置步骤需兼顾时间精度与响应速度。首先初始化定时器时钟,将预分频器(PSC)设置为合适的值,例如STM32F1系列主频72MHz时,若PSC设为71,则定时器计数频率为1MHz(即每个计数单位代表1μs),可满足大多数场景的时间测量精度需求。接着配置输入捕获模式,设置Echo引脚对应的通道为上升沿触发,当检测到Echo引脚从低电平跳变为高电平时,定时器会立即锁存当前计数值(记为CNT1),同时触发中断;在中断服务函数中,需迅速将捕获边沿切换为下降沿,等待反射波结束时的电平跳变。当Echo引脚从高电平跳变为低电平时,定时器再次锁存计数值(记为CNT2),此时两次计数值的差值(ΔCNT = CNT2 - CNT1)即为超声波往返的时间(单位μs)。
距离计算需结合声速公式与时间差,标准状态下(25℃)声速约为343m/s,即0.0343cm/μs,由于超声波需往返一次,实际距离公式为:距离(cm)=(ΔCNT × 0.0343)/ 2。但实际应用中,温度对声速的影响不可忽视,需通过集成温度传感器(如DS18B20)进行补偿,声速与温度的关系可近似为:声速(m/s)= 331.5 + 0.6 × 温度(℃),将实时温度代入公式可显著提升测距精度。例如,当环境温度为0℃时,声速降至331.5m/s,若仍使用343m/s计算,100cm的实际距离会被误算为103.5cm,误差超过3%。
在实际调试中,需解决多个影响稳定性的问题。超声波模块存在测距盲区(通常2 - 4cm),当障碍物过近时,发射的强信号会直接干扰接收电路,导致Echo引脚输出异常高电平,此时需通过软件判断,若ΔCNT小于某个阈值(如200μs,对应约3.4cm),则判定为无效数据。另外,环境中的杂物反射、声波扩散等因素可能导致虚假触发,可通过连续多次测量取平均值的方式滤波,例如连续测量5次,剔除最大值和最小值后计算平均,减少偶然误差。对于定时器溢出问题,若测量距离过远(如HC - SR04最大测距4m,对应往返时间约23529μs),16位定时器在1MHz计数频率下最大计数值为65535,可覆盖约11m的测距范围,足够满足多数场景,但若需更远测距,需在定时器溢出中断中记录溢出次数,确保ΔCNT计算准确。
STM32的中断机制在超声波测距中起到关键的实时响应作用。当Echo引脚出现边沿跳变时,输入捕获中断能在微秒级时间内触发,避免软件查询导致的延迟误差。但中断服务函数需保持精简,仅完成计数值读取、边沿切换、溢出判断等核心操作,将距离计算、数据滤波等耗时任务交给主循环处理,防止中断阻塞影响其他系统功能。例如,在中断中仅存储CNT1和CNT2的值,设置“测量完成”标志位,主循环检测到标志位后再进行距离计算与补偿,既保证了捕获的实时性,又避免了中断耗时过长。
除基础测距功能外,结合STM32的丰富外设还可拓展更多应用。例如,通过DMA传输定时器计数值,减少CPU在数据读取上的开销;利用LCD或OLED屏幕实时显示测量距离,配合按键实现测距模式切换;在智能小车中,将测距数据与PWM电机控制结合,实现遇障自动减速或转向。这些拓展应用的核心仍在于对超声波时间差测量的精准把控,而STM32的定时器输入捕获与GPIO控制能力,为这种精准性提供了坚实的硬件支撑。
STM32超声波测距的实现是硬件特性与软件逻辑的深度融合:HC - SR04模块提供声波收发的物理基础,STM32的定时器输入捕获实现时间差的高精度测量,中断机制保障实时响应,温度补偿与软件滤波则提升了测量的可靠性。从触发信号的输出到反射时间的捕获,再到距离的计算与优化,每个环节的细节处理都影响着最终效果,这也体现了嵌入式开发中“硬件为基、软件赋能”的核心思想——只有充分理解外设特性与控制器功能,才能构建出稳定、精准的
超声波测距系统,满足各类嵌入式应用的需求。