hc-sr04超声波测距stm32g431rbt6怎么配置
时间: 2025-06-06 10:38:13 浏览: 17
### STM32G431RBT6 配置 HC-SR04 超声波测距
#### 项目概述
为了在 STM32G431RBT6 上配置 HC-SR04 超声波模块以实现测距功能,需要完成硬件连接、软件初始化以及定时器中断处理等工作。以下是具体的设计方法和技术细节。
---
#### 硬件连接
HC-SR04 模块具有四个引脚:VCC、Trig(触发)、Echo(回响)和 GND。这些引脚需与 STM32G431RBT6 进行如下连接:
| **HC-SR04 引脚** | **STM32G431RBT6 GPIO 引脚** |
|------------------|-------------------------------|
| VCC | 3.3V 或 5V |
| Trig | PA8 (或其他可配置为输出的 GPIO)[^1] |
| Echo | PB9 (或其他可配置为输入并支持外部中断的 GPIO)[^1] |
| GND | 地 |
注意:由于 HC-SR04 工作电压通常为 5V,而 STM32G431RBT6 的 I/O 口最大耐压可能低于此值,建议使用逻辑电平转换电路保护 MCU 输入端口[^2]。
---
#### 软件设计
##### 初始化部分
1. **GPIO 配置**
- 将 `PA8` 设置为推挽输出模式用于发送触发信号。
- 将 `PB9` 设置为浮空输入模式以便读取回响信号。
```c
// GPIO 初始化函数
void HCSR04_GPIO_Init(void) {
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOBEN; // 启用 GPIOA 和 GPIOB 时钟
// 配置 PA8 作为 Trig 输出
GPIOA->MODER &= ~(GPIO_MODER_MODE8_Msk);
GPIOA->MODER |= GPIO_MODER_MODE8_0;
// 配置 PB9 作为 Echo 输入
GPIOB->MODER &= ~(GPIO_MODER_MODE9_Msk);
}
```
2. **定时器配置**
使用 STM32 的高级定时器来捕获高电平持续时间。这里选择 TIM2 定时器为例说明设置过程。
```c
// 定时器初始化函数
void HCSR04_TIM_Init(void) {
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM2EN; // 启用 TIM2 时钟
TIM2->PSC = 83; // 预分频系数设为 83, 即计数频率约为 1MHz (假设系统时钟为 84 MHz)
TIM2->ARR = 0xFFFF; // 自动重装载寄存器设定上限值
TIM2->CR1 |= TIM_CR1_CEN; // 开启定时器
}
```
3. **NVIC 中断配置**
当检测到上升沿或下降沿事件时,会触发相应的中断服务程序计算脉宽。
```c
// NVIC 配置函数
void HCSR04_NVIC_Config(void){
EXTI->IMR1 |= EXTI_IMR1_IM9; // 解锁线 9 中断屏蔽位
EXTI->RTSR1 |= EXTI_RTSR1_RT9; // 上升沿触发
EXTI->FTSR1 |= EXTI_FTSR1_FT9; // 下降沿触发
SYSCFG->EXTICR[2] |= SYSCFG_EXTICR3_EXTI9_PB; // 绑定 EXTI9 到 PB9
NVIC_EnableIRQ(EXTI9_5_IRQn); // 允许 EXTI9_5 中断向量表项
}
// 外部中断服务例程
void EXTI9_5_IRQHandler(void){
if((EXTI->PR1 & EXTI_PR1_PIF9)!=0){ // 如果是 PB9 引发的中断请求
uint32_t current_time = TIM2->CNT;
static uint32_t start_time = 0;
if(start_time == 0){
start_time = current_time; // 记录起始时刻
}else{
distance_cm = ((current_time - start_time)*0.034)/2; // 基于速度公式换算成实际距离 [^4]
start_time = 0; // 清零准备下一轮测量
}
EXTI->PR1 = EXTI_PR1_PIF9; // 清除挂起标志位
}
}
```
---
#### 测距流程
按照以下顺序执行操作即可获得目标物体的距离信息:
1. 发送至少 10 微秒以上的高电平至 Trigger 引脚启动一次新的测量周期;
2. 等待 Echo 引脚上的响应信号到来,并记录其高低变化期间所经历的具体时间段长度 T;
3. 根据公式 \( \text{Distance} = (\frac{T}{2}) * c \),其中 c 表示空气中声音传播速率大约等于每秒钟 340 米得出最终数值。
---
#### 注意事项
- 在实际部署过程中应考虑环境因素的影响比如温度波动可能会引起声速改变从而影响准确性[^3]。
- 对采集回来的数据可以进一步实施卡尔曼滤波或者其他形式数字信号处理技术提升抗干扰能力及稳定性表现。
---
阅读全文
相关推荐


















