stm32f407超声波测距
时间: 2025-01-14 15:56:05 浏览: 71
### STM32F407 超声波测距 示例代码 教程
#### 使用HC-SR04超声波传感器进行测距
为了在STM32F407上实现超声波测距功能,可以参考如下方法。此过程涉及初始化GPIO引脚、配置定时器用于精确延迟以及编写具体的测距函数。
对于硬件连接部分,在STM32F407中设置特定的GPIO引脚来触发HC-SR04发出脉冲信号并接收回响信号。通常情况下,TRIG(触发)引脚应被设定为输出模式而ECHO(回显)引脚则设为输入模式[^1]。
下面展示了一个简单的C语言程序片段,它展示了如何利用STM32CubeMX工具生成的基础框架基础上完成上述操作:
```c
#include "main.h"
// 定义使用的IO口
#define TRIG_PIN GPIO_PIN_6
#define ECHO_PIN GPIO_PIN_6
#define TRIG_PORT GPIOB
#define ECHO_PORT GPIOE
void SR04_Init(void){
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能PB端口时钟
__HAL_RCC_GPIOE_CLK_ENABLE(); //使能PE端口时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置TRIG作为推挽输出
GPIO_InitStruct.Pin = TRIG_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
// 配置ECHO作为浮空输入
GPIO_InitStruct.Pin = ECHO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ECHO_PORT, &GPIO_InitStruct);
}
uint32_t sr04_get_distance(void) {
uint32_t t=0;
// 发送10微秒以上的正脉冲给TRIG引脚启动一次测量周期
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
HAL_DelayMicroseconds(10);
HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);
// 等待ECHO变为高电平表示接收到反射回来的声音信号
while(HAL_GPIO_ReadPin(ECHO_PORT,ECHO_PIN)==GPIO_PIN_RESET);
// 开始计数直到ECHO再次变低结束此次测量
while(HAL_GPIO_ReadPin(ECHO_PORT,ECHO_PIN)){
t++;
HAL_DelayMicroseconds(9); // 延迟约等于声音传播3毫米所需时间
}
// 计算实际距离并将单位转换成厘米
float distance = (t * 3 / 2)/10.0f;
return (uint32_t)(distance);
}
```
这段代码实现了基本的距离检测逻辑,并通过计算得出目标物体与传感器之间的大致距离。需要注意的是这里假设环境温度下的声速大约为340米/秒,因此每经过9μs相当于移动了3mm;最后得到的结果是以cm为单位的距离值[^5]。
此外,还可以考虑加入一些优化措施比如平均多次读取结果以减少误差影响,或是应用更复杂的滤波算法提高精度等。
阅读全文
相关推荐


















