hcsr04超声波传感器stm32 proteus
时间: 2025-06-04 20:26:59 浏览: 27
### STM32与HCSR04超声波传感器的Proteus仿真教程
在STM32微控制器中使用HC-SR04超声波传感器进行Proteus仿真涉及硬件配置、软件编程以及Proteus平台的正确设置。以下是相关内容的详细介绍:
#### 硬件配置
HC-SR04超声波模块通过触发信号(Trigger)和回响信号(Echo)与STM32通信。触发引脚需要一个10μs的高电平脉冲来启动测距,而回响引脚则输出一个与其测量时间成正比的高电平脉冲[^1]。为了实现这一功能,需将HC-SR04的Trig引脚连接到STM32的一个GPIO输出引脚,同时将Echo引脚连接到另一个GPIO输入引脚。
#### Proteus仿真环境
Proteus是一款强大的电路仿真工具,支持STM32系列微控制器的仿真。在配置Proteus时,确保安装了最新的库文件以支持STM32F103RCT6型号及HC-SR04模块[^2]。此外,Proteus 8.8版本对STM32的支持更为完善,建议使用此版本进行仿真。
#### 示例代码
以下是一个基于STM32F103RCT6的示例代码,用于控制HC-SR04并计算距离:
```c
#include "stm32f1xx_hal.h"
#define TRIG_PIN GPIO_PIN_9
#define ECHO_PIN GPIO_PIN_10
#define GPIO_PORT GPIOA
float distance;
void delay_us(uint32_t us) {
__HAL_TIM_SET_COUNTER(&htim3, 0); // Reset timer counter
while (__HAL_TIM_GET_COUNTER(&htim3) < us);
}
void trigger_pulse() {
HAL_GPIO_WritePin(GPIO_PORT, TRIG_PIN, GPIO_PIN_SET);
delay_us(10); // Send a 10 microsecond pulse
HAL_GPIO_WritePin(GPIO_PORT, TRIG_PIN, GPIO_PIN_RESET);
}
float calculate_distance(TIM_HandleTypeDef *htim) {
uint32_t echo_start, echo_end;
uint32_t duration;
HAL_GPIO_WritePin(GPIO_PORT, TRIG_PIN, GPIO_PIN_SET);
delay_us(10); // Trigger pulse
HAL_GPIO_WritePin(GPIO_PORT, TRIG_PIN, GPIO_PIN_RESET);
while (HAL_GPIO_ReadPin(GPIO_PORT, ECHO_PIN) == GPIO_PIN_RESET); // Wait for ECHO to go HIGH
echo_start = __HAL_TIM_GET_COUNTER(htim);
while (HAL_GPIO_ReadPin(GPIO_PORT, ECHO_PIN) == GPIO_PIN_SET); // Wait for ECHO to go LOW
echo_end = __HAL_TIM_GET_COUNTER(htim);
duration = echo_end - echo_start; // Calculate pulse duration in microseconds
return (duration / 58.0); // Convert to centimeters
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init(); // Initialize Timer 3 for precise timing
while (1) {
trigger_pulse();
distance = calculate_distance(&htim3);
HAL_Delay(100); // Delay between measurements
}
}
```
上述代码实现了以下功能:
- 使用Timer3生成精确的延迟。
- 触发HC-SR04模块进行测距,并通过计算回响信号的持续时间来得出距离值[^1]。
#### 配置方法
1. 在Proteus中添加STM32F103RCT6和HC-SR04模块。
2. 将HC-SR04的Trig引脚连接到STM32的PA9,Echo引脚连接到PA10。
3. 编写如上所示的代码并将其下载到STM32开发板中。
4. 在Proteus中运行仿真,观察测距结果是否正确显示。
### 注意事项
- 确保Proteus版本为8.8或更高,以避免兼容性问题[^2]。
- 测量范围通常在2cm至400cm之间,超出此范围可能导致不准确的结果[^1]。
阅读全文
相关推荐


















