hcsr04超声波传感器stm32hal
时间: 2025-04-18 15:47:44 浏览: 44
### 使用 STM32 HAL 库实现 HCSR04 超声波传感器的接口
为了使STM32F103C8T6能够通过HAL库与HC-SR04超声波传感器交互,需完成硬件连接设置以及软件编程两部分工作。
#### 硬件连接
VCC应接到STM32的5V电源引脚;GND则要连至STM32的地线引脚。对于信号传输而言,Trig作为触发输入端应当链接到任意可用作输出功能的GPIO上,而Echo负责反馈距离信息给MCU,则对应挂载于具备中断响应能力或是可配置成输入模式并支持外部事件捕获机制的GPIO管脚之上[^3]。
#### CubeMX 配置
启动STM32CubeMX工具,在项目创建向导里选定目标单片机型号为STM32F103C8Tx系列之后进入外设初始化界面。针对上述提到的两个IO口分配具体的功能角色:一是设定TRIG对应的Pin为通用推挽输出类型(GPIO_Mode_OUTPUT_PP),二是把ECHO关联的那个Pin指定为浮空输入状态(GPIO_Mode_INPUT_FLOATING)。与此同时,考虑到测量过程中可能涉及到的时间戳记录需求,建议挑选一个合适的定时器资源来辅助处理回波脉宽计算逻辑,比如TIM2等[^2]。
#### 编程实例
下面给出一段利用HAL函数库操作HC-SR04获取物体间相对位置关系的核心代码片段:
```c
#include "main.h"
// 定义全局变量存储返回的距离值
float distance;
void StartMeasurement(void){
// 发送10us以上的正脉冲以激活一次完整的探测周期
HAL_GPIO_WritePin(TRIGGER_PORT, TRIGGER_PIN, GPIO_PIN_SET);
__NOP();__NOP();
HAL_GPIO_WritePin(TRIGGER_PORT, TRIGGER_PIN, GPIO_PIN_RESET);
// 启动计数器等待高电平持续期间结束
if(HAL_TIM_Base_Start_IT(&htim2) != HAL_OK){
Error_Handler();
}
}
void TIM2_IRQHandler(void){
/* 清除中断标志位 */
__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);
uint32_t pulse_width = __HAL_TIM_GET_COUNTER(&htim2); // 获取当前计数值
// 计算实际物理长度(单位:cm)
distance=(pulse_width*0.034)/2;
// 关闭定时器停止进一步累加动作
HAL_TIM_Base_Stop_IT(&htim2);
}
```
此段程序展示了如何借助STM32 HAL API发出控制指令让HC-SR04开始一轮新的检测流程,并且当接收到反射回来的声音波形后及时读取这段时间间隔从而推测出两者间距大小[^4]。
阅读全文
相关推荐


















