hcsr04 stm32 hal
时间: 2025-01-02 13:39:50 浏览: 45
使用STM32 HAL库与HC-SR04超声波传感器进行接口
为了实现STM32单片机通过HAL库来操作HC-SR04超声波测距模块,主要涉及硬件连接配置以及软件编程两大部分。
硬件连接说明
对于HC-SR04超声波测距模块而言,其具备四个针脚:VCC用于供电接入+5V电源;GND接地处理保障电路稳定工作;TRIG作为触发端口负责发送启动测量脉冲信号;ECHO则是回响端口用来接收反射回来的信号[^2]。当向TRIG引脚施加至少10微秒的高电平脉冲时,模块会自动发出8个40kHz的方波并开启计时,在检测到返回信号后即刻关闭计时,并使ECHO置位为高电平直到结束为止。因此,可以通过计算这段时间差再乘以声速的一半得到实际的距离值。
软件初始化设置
利用STM32CubeMX工具可以简化外设初始化过程,具体步骤如下:
- 打开STM32CubeMX软件创建新项目;
- 选择合适的MCU型号(如STM32F1系列或其他支持版本),点击“Start Project”按钮进入下一步;
- 配置系统核心参数,比如设定主频等基本信息;
- 添加GPIO功能至PA9和PA10管脚分别对应于HC-SR04的TRIG和ECHO引脚;
- 启用TIM2定时器资源用于捕捉ECHO产生的高低变化时刻点数据;
- 完成上述各项配置之后生成相应的工程文件夹结构以便后续编译调试使用。
主要源代码展示
下面给出一段完整的C语言程序片段,展示了如何运用HAL库完成一次基本的超声波测距任务:
#include "main.h"
// 定义全局变量存储时间戳数值
uint32_t Time_High = 0;
uint32_t Time_Low = 0;
void Start_Measure(void){
// 发送10us以上的正脉冲给Trig引脚激活测量动作
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
__NOP();__NOP();
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
}
void TIM2_IRQHandler(void){
HAL_TIM_IRQHandler(&htim2);
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){
uint32_t temp=HAL_GetTick();
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10)==GPIO_PIN_SET)
Time_High=temp;
else{
Time_Low=temp-Time_High;
// 计算距离并将结果显示出来
printf("Distance:%d cm\r\n",((Time_Low/58)*100)/100);
}
}
}
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_TIM2_Init();
while (1) {
Start_Measure();
HAL_Delay(60); // 建议每两次测量间隔大于等于60ms
}
}
此段代码实现了对HC-SR04超声波传感器的操作流程,包括但不限于触发命令下发、中断服务例程定义及时序逻辑判断等内容。其中printf()
函数仅作示意用途,在真实环境中可能需要替换为其他通信方式输出结果。
相关推荐

















