1. STM32F103基本定时器实现超声波测距详解
1.1 项目背景与核心需求
在嵌入式系统开发中,定时器是最基础也最重要的外设之一。STM32F103系列单片机提供了丰富多样的定时器资源,其中基本定时器虽然功能简单,但在很多实际应用中都能发挥关键作用。本次我们要实现的是基于基本定时器的非阻塞式超声波测距功能。
为什么要选择非阻塞式实现?在嵌入式系统中,阻塞式代码会占用CPU资源,导致系统无法及时响应其他任务。而非阻塞式设计通过状态机和中断机制,可以让CPU在等待超声波返回的过程中处理其他任务,显著提高系统效率。
1.2 硬件选型与连接
我们选用HC-SR04超声波模块,这是市面上最常见且性价比极高的测距模块。它有四个引脚:
- VCC:5V供电
- GND:地线
- Trig:触发信号输入
- Echo:回波信号输出
模块工作时序如下:
- 给Trig引脚至少10us的高电平触发信号
- 模块自动发送8个40kHz的超声波脉冲
- 模块检测回波,Echo引脚输出高电平
- 高电平持续时间与距离成正比
注意:HC-SR04的测量范围是2cm-400cm,超出此范围可能得到不准确的结果。实际应用中建议增加范围校验逻辑。
1.3 测距原理与公式推导
超声波测距的基本原理是利用声波在空气中的传播速度和时间差来计算距离。具体公式推导如下:
-
基础物理公式:
距离 = 速度 × 时间 -
超声波测距是往返距离,所以单程距离为:
单程距离 = (声速 × 高电平时间) / 2 -
单位换算(转换为cm/us):
声速 = 340m/s = 34000cm/s = 0.034cm/us -
最终计算公式:
距离(cm) = 高电平时间(us) × 0.017 -
优化为整数运算(避免浮点运算):
距离(cm) ≈ 高电平时间(us) / 58
这个公式优化对于没有FPU的STM32F103来说尤为重要,可以显著减少CPU开销。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统设计与配置
2.1 硬件接口配置
使用STM32CubeMX进行引脚配置:
- PF11:推挽输出模式,连接Trig引脚
- PF12:外部中断模式,双边沿触发,连接Echo引脚
配置要点:
- Trig引脚配
