基于STM32F103C8T6的超声波测距——串口输出

本文介绍了如何使用STM32CubeMX配置STM32F103C8T6驱动HC-SR04超声波模块进行距离测量,并将结果显示在串口助手上。文章详细阐述了超声波模块的工作原理,配置工程的步骤,以及关键代码实现,包括触发测距、捕获回波时间和滤波处理。最后,文章提到了在实际操作中遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

环境:
1、硬件:stm32f103c8t6 核心板
2、软件:STM32CubeMX 6.4.0
3、软件:keil5 mdk
4、超声波模块:HC_SR04
要求:
使用 stm32f103c8t6 核心板驱动 超声波检测模块(HC_SR04 ),并将所测得数据显示到串口助手上,并对数据进行一定的滤波。


一、超声波模块介绍

1、产品特点

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
基本工作原理:

(1)采用IO口 TRIG触发测距,给最少10us的高电平信呈。
(⑵)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

在这里插入图片描述

2、超声波模块的时序图

在这里插入图片描述

以上时序图表明你只需要提供一个10uS 以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度即(信号持续的高电平时间)与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

二、STM32CubeMx创建工程

1、配置项目

这里跳过了创建工程的步骤,具体可看前面的博客,直接进入配置。

  • RCC配置:
    在这里插入图片描述
  • SYS配置:
    在这里插入图片描述
  • GPIO设置:

将PA1自定义为TRIG

在这里插入图片描述

  • 串口设置:
    在这里插入图片描述
  • 定时器设置:
    在这里插入图片描述
    在这里插入图片描述
  • 时钟树设置:
    在这里插入图片描述

2、keil代码设置

  • 设置允许使用微库:
    在这里插入图片描述
  • 添加SR04.c和SR04.h文件到工程中(具体看前面RT-thread Nano的移植过程):
  • SR04.h
#ifndef __SR04_H
#define __SR04_H
#include "main.h"
#include "tim.h"
#include "stdio.h"

#define TRIG_H  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET)
#define TRIG_L  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET)

void delay_us(uint32_t us);
void SR04_GetData(void);
#endif
  • SR04.c
#include "SR04.h"

float distant;      //测量距离
uint32_t measure_Buf[3] = {
   
   0};   //存放定时器计数值的数组
float distances[5]={
   
   0};
uint8_t  measure_Cnt = 0;    //状态标志位
uint32_t high_time;   //超声波模块返回的高电平时间
uint8_t n=0;


//===============================================读取距离
void SR04_GetData(
<think>嗯,用户想了解超声波模块相关的技术栈,包括硬件接口、软件库和开发平台。首先,我需要回忆一下常见的超声波模块,比如HC-SR04,这是最常用的模块之一。然后,硬件接口方面,HC-SR04通常使用GPIO来触发和接收回波信号,可能需要通过微控制器的GPIO引脚来控制。另外,有些模块可能支持I2C或UART接口,比如一些较新的型号,这样能简化接线和编程。 接下来是软件库部分,针对不同的开发平台,比如Arduino、STM32或者树莓派,会有相应的库函数。比如Arduino有现成的Ultrasonic库,STM32可能需要自己编写定时器来测量回波时间。另外,实时操作系统(RTOS)中的任务调度也可能涉及到超声波模块的驱动开发,需要考虑到多任务环境下的资源管理。 开发平台方面,常用的有Arduino、STM32CubeIDE、树莓派的Python环境,以及嵌入式Linux系统。每种平台有不同的工具链和开发流程。例如,STM32可能需要使用HAL库或者LL库来操作硬件,而嵌入式Linux可能需要编写内核模块或用户空间的驱动程序。 用户提供的引用中提到了STM32F103和Modbus通信,这可能涉及到如何将超声波数据通过RS485传输,需要了解Modbus协议栈的实现,可能使用现有的库如FreeModbus。另外,硬件抽象层(HAL)的设计也很重要,这样上层应用可以更容易地移植到不同的硬件平台上。 可能还需要考虑噪声过滤、温度补偿等软件算法,特别是在车载环境中,温度变化可能影响声速,进而影响测距精度。此外,多路复用技术对于12路系统来说也是关键,如何通过分时复用或使用多路选择器来管理多个超声波模块。 最后,用户可能需要了解相关的开发工具,比如示波器调试信号,逻辑分析仪检查时序,以及使用IDE进行代码调试。测试和验证也是技术栈的一部分,包括单元测试和集成测试方法。</think>### 超声波模块技术栈详解 #### 一、硬件接口 1. **基础接口类型** - **GPIO**(通用输入输出):用于触发信号(Trig)和接收回波信号(Echo),例如HC-SR04模块需要至少2个GPIO引脚[^1]。 - **PWM/定时器**:通过微控制器的定时器模块(如STM32的TIM)精确测量回波时间,计算公式为: $$ \text{距离} = \frac{\text{高电平时间} \times \text{声速}}{2} $$ - **I2C/UART**:高端模块(如US-100)支持串口协议,直接输出距离数据,简化编程复杂度[^2]。 2. **多路扩展技术** - **模拟开关(如CD74HC4067)**:通过多路复用器扩展12路超声波模块,分时读取数据。 - **RS485总线**:支持长距离通信,结合Modbus协议实现多节点数据汇总[^1]。 #### 二、软件库与算法 1. **驱动开发** - **裸机驱动**:基于HAL库(STM32CubeMX)或寄存器操作,实现触发信号生成和回波时间捕获。 ```c // STM32示例:触发信号 HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET); delay_us(10); HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET); ``` - **RTOS支持**:在FreeRTOS中创建独立任务管理超声波模块,避免阻塞其他进程。 2. **数据处理库** - **中值滤波**:消除偶发噪声干扰,例如取连续5次测量的中间值。 - **温度补偿**:根据温度传感器数据修正声速(公式:$v = 331.4 + 0.6T$,$T$为摄氏度)。 #### 三、开发平台与工具链 1. **嵌入式平台** - **STM32系列**:使用STM32CubeIDE开发,依赖HAL库实现硬件抽象。 - **Arduino**:借助现成库(如`NewPing`)快速原型开发。 - **树莓派**:通过Python的RPi.GPIO库或C语言驱动开发。 2. **通信协议栈** - **Modbus实现**:使用开源库(如FreeModbus)将超声波数据封装为Modbus-RTU帧。 - **CAN总线**:车载场景下与ECU通信需集成CAN协议栈(如STM32的CAN外设驱动)。 #### 四、调试与测试工具 1. **硬件工具** - 示波器:验证Trig/Echo信号时序是否符合模块规格(如HC-SR04要求Trig脉冲≥10μs)。 - 逻辑分析仪:捕获多路信号时序,分析并发测量冲突。 2. **软件工具** - **串口调试助手**:实时查看模块原始数据。 - **STM32CubeMonitor**:可视化传感器数据曲线,优化滤波参数[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

混子王江江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值