1. 项目概述与硬件准备
大家好,今天我来分享一个基于STM32F103ZET6的超声波测距项目。这个项目使用HAL库驱动HC-SR04超声波模块,实现高精度距离测量,并通过OLED屏幕实时显示测量结果。这个方案非常适合智能小车避障、工业测距等对实时性要求较高的场景。
我选择STM32F103ZET6是因为它性能稳定,资源丰富,有足够的GPIO和定时器来满足我们的需求。HC-SR04是一款性价比很高的超声波测距模块,测量范围2-400cm,精度可达3mm。OLED显示屏我选用的是0.96寸的SSD1306,通过I2C接口与主控通信,显示效果清晰且功耗低。
在实际项目中,我发现硬件连接有几个需要注意的地方。HC-SR04的VCC最好接5V,这样测量距离更远,虽然STM32的GPIO是3.3V电平,但Echo引脚返回的信号是5V,需要电平转换或者串联电阻分压。我建议在Echo引脚和STM32的输入引脚之间加一个1kΩ和2kΩ的电阻进行分压,避免损坏STM32的IO口。
2. CubeMX工程配置
使用STM32CubeMX可以大大简化我们的初始化工作。首先新建工程,选择STM32F103ZET6型号。在Pinout界面中,我们需要配置以下几个部分:
系统时钟配置很关键,我将系统时钟设置为72MHz,这样定时器的计数频率可以达到最高精度。在RCC设置中,选择HSE作为时钟源,PLL倍频到72MHz。
定时器的配置是本次项目的核心。我使用TIM1的通道3和通道4来捕获超声波模块的 Echo 信号。具体配置为:时钟源选择内部时钟,通道3设置为输入捕获直接模式,上升沿触发;通道4设置为输入捕获间接模式,下降沿触发。预分频器设置为71,这样定时器的计数频率就是1MHz(72MHz/(71+1)),每个计数代表1微秒,非常适合时间测量。
对于OLED显示,我配置了I2C1接口。STM32F103ZET6的I2C1默认在PB6(SCL)和PB7(SDA),需要将这两个引脚配置为开漏输出模式,并启用I2C功能。I2C的时钟速度设置为400kHz,这是SSD1306支持的标准速度。
最后配置一个GPIO引脚用于Trig信号输出。我选


1131

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



