HC-SR04是一款广泛使用的超声波传感器,它通过发射和接收超声波来测量距离。本文将详细介绍HC-SR04的工作原理、引脚描述、STM32的接线方式以及如何通过STM32控制HC-SR04来测量距离。
一、HC-SR04传感器介绍
HC-SR04超声波传感器的主要参数如下:
- 工作电压:DC 5V
- 工作电流:3.3mA
- 工作温度:-40~85℃
- 输出方式:GPIO
- 探测距离:2cm~600cm
- 探测精度:3mm
二、传感器原理
HC-SR04模块包括一个超声波发射器和一个接收器。发射器向一个方向发射超声波,当超声波碰到障碍物后会反射回来,接收器接收反射波。通过计算发射到接收的时间差,结合声速,可以计算出距离。
三、硬件连接
HC-SR04与STM32的连接如下:
- VCC:连接到STM32的3.3V或5V电源。
- GND:连接到STM32的地。
- TRIG(触发):连接到STM32的一个GPIO引脚,用于发送触发信号。
- ECHO(回声):连接到STM32的另一个GPIO引脚,用于接收回声信号。
四、软件编程
1. 初始化GPIO
首先,需要初始化STM32的GPIO引脚,用于控制TRIG和读取ECHO信号。
#include "stm32f1xx_hal.h"
#define TRIG_PIN GPIO_PIN_6
#define ECHO_PIN GPIO_PIN_7
#define TRIG_PORT GPIOA
#define ECHO_PORT GPIOA
void GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = TRIG_PIN | ECHO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
}
2. 测量距离函数
实现测量距离的函数,通过控制TRIG引脚发送触发信号,并通过ECHO引脚读取回声信号。
#include "stm32f1xx_hal.h"
#include "tim.h"
uint32_t HCSR04_GetDistance(void) {
uint32_t distance;
uint32_t pulse_time = 0;
// 发送触发信号
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
HAL_Delay(10); // 至少10us的高电平
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);
// 等待ECHO引脚变为高电平
while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET);
// 记录高电平开始时间
uint32_t start_time = HAL_GetTick();
// 等待ECHO引脚变为低电平
while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET);
// 记录高电平结束时间
uint32_t end_time = HAL_GetTick();
// 计算高电平持续时间
pulse_time = end_time - start_time;
// 计算距离
distance = (pulse_time * 34300) / 2; // 声速约为34300cm/s
return distance;
}
3. 主函数
在主函数中,初始化硬件并循环测量距离。
int main(void) {
HAL_Init();
SystemClock_Config();
GPIO_Init();
TIM2_Init(); // 初始化定时器,用于测量时间
while (1) {
uint32_t distance = HCSR04_GetDistance();
printf("Distance: %lu cm\n", distance);
HAL_Delay(1000);
}
}
五、注意事项
- 触发信号:确保TRIG引脚发送的触发信号至少持续10us。
- 回声信号:ECHO引脚读取的是回声信号的高电平持续时间,用于计算距离。
- 声速:声速在不同介质中的速度不同,本例中假设声速为34300cm/s。
通过上述步骤,我们可以在STM32上成功驱动HC-SR04超声波传感器,并实现距离的测量。这为开发需要距离测量功能的嵌入式系统提供了基础。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
标签:SR04,HAL,PIN,引脚,TRIG,ECHO,STM32,GPIO,HC From: https://blog.csdn.net/weixin_66608063/article/details/143609085