stm32平衡小车超声波避障模块
时间: 2025-04-24 10:57:28 浏览: 42
### STM32平衡小车超声波避障模块使用教程
#### 硬件连接
对于STM32平衡小车上的超声波避障模块,硬件连接方式如下:
- VCC 接到 STM32 开发板的 3.3V 至 5V 电源引脚[^1]。
- GND 连接到 STM32 开发板的地线 (GND)。
- Trig(触发信号输入端)连接至单片机 PB6 引脚。
- Echo(回响信号输出端)则应连接到 PA0 引脚上。
这种配置允许通过 HAL 库来控制 GPIO 口实现对 HC-SR08/HC-SR04 超声波传感器的操作。
#### 初始化设置与驱动程序编写
为了使能并操作这些外设,在初始化阶段需完成必要的寄存器设定工作。这通常涉及到启用相应的时钟树分支以及配置指定 I/O 的模式为推挽输出或开漏输出等特性。具体来说就是调用 `HAL_GPIO_Init()` 函数来进行初始化过程中的参数传递。
```c
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置PB6作为Trig引脚, 输出模式
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置成推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// 配置PA0作为Echo引脚, 输入模式
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
```
上述代码片段展示了如何利用 HAL 库函数去定义两个不同功能的 GPIO 引脚——一个是用于发送脉冲信号给超声波发射头;另一个用来接收反射回来的时间差信息以便计算距离值。
#### 测距算法逻辑描述
当一切准备就绪之后就可以着手于测距部分了。这里采用的是标准方法:先向 Trig 发送至少 10us 宽度以上的正脉冲启动测量周期,随后等待 Echo 上升沿到来表示检测开始直到下降沿结束为止这段时间即代表往返时间 t 。最后依据公式 d=ct/2 来求得目标物体离探头的实际间距 c 表示声音传播速度约为 340m/s 或者更精确些可以考虑温度补偿因素调整此常数值。
```c
float measure_distance(void){
uint32_t start_time,end_time,duration;
// 启动一次测量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
__NOP(); // 插入短延时指令确保宽度大于等于10微秒
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==RESET){} // 等待上升沿
start_time = HAL_GetTick();
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)!= RESET){}// 等待下降沿
end_time = HAL_GetTick();
duration=(end_time-start_time)*1000;// 计算持续时间为毫秒级单位
float distance = ((duration * 0.034)/2); // 基础声速约34cm/ms
return distance;
}
```
这段 C 语言源码实现了完整的超声波感应流程,并返回所测算出来的障碍物间的直线距离。
阅读全文
相关推荐


















