HC-SR04超声波测距模块使用方法和例程(STM32快速移植)

基于STM32和HC-SR04模块实现超声波测距功能

HC-SR04硬件概述
HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。就是如此简单!

该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间出色的非接触范围检测,精度为3mm。

硬件接线图


image.png

CubeMx:

image.png image.png

开一个定时器(基本定时器就行) 打开这个以及超过超声波最多能探测范围这样就行
image.png

#ifndef _SR04_H
#define _SR04_H

#include "stm32f1xx_hal.h"


void GET_Distance(void);

#endif

#include "sr04.h"
#include "oled.h"
#include "encoder.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
uint16_t count;
float distance;
extern TIM_HandleTypeDef htim7;
void RCCdelay_us(uint32_t udelay)
{
  __IO uint32_t Delay = udelay * 72 / 8;//(SystemCoreClock / 8U / 1000000U)
    //见stm32f1xx_hal_rcc.c -- static void RCC_Delay(uint32_t mdelay)
  do
  {
    __NOP();
  }
  while (Delay --);
}

void GET_Distance(void)
{
	HAL_GPIO_WritePin(GPIOE,GPIO_PIN_12,GPIO_PIN_SET);
	RCCdelay_us(12);
	HAL_GPIO_WritePin(GPIOE,GPIO_PIN_12,GPIO_PIN_RESET);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_14)
	{
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_14)==GPIO_PIN_SET)
		{
			__HAL_TIM_SetCounter(&htim7,0);
			HAL_TIM_Base_Start(&htim7);
		}
		else
		{
			HAL_TIM_Base_Stop(&htim7);
			count=__HAL_TIM_GetCounter(&htim7);
			distance=count*0.017;
		}
	}
}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,以下是使用STM32单片机控制HC-SR04超声波避障的例程: #include "stm32f10x.h" #include "delay.h" #include "usart.h" #include "stdio.h" #define TRIG_PIN GPIO_Pin_0 #define ECHO_PIN GPIO_Pin_1 #define TRIG_PORT GPIOA #define ECHO_PORT GPIOA void HC_SR04_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = TRIG_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ECHO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(ECHO_PORT, &GPIO_InitStructure); } float HC_SR04_GetDistance(void) { uint32_t time; float distance; GPIO_ResetBits(TRIG_PORT, TRIG_PIN); delay_us(2); GPIO_SetBits(TRIG_PORT, TRIG_PIN); delay_us(10); GPIO_ResetBits(TRIG_PORT, TRIG_PIN); while(GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) == RESET); time = 0; while(GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) == SET) { time++; delay_us(1); } distance = (float)time * 0.017; return distance; } int main(void) { float distance; HC_SR04_Init(); USART1_Init(); while(1) { distance = HC_SR04_GetDistance(); printf("Distance: %.2f cm\r\n", distance); delay_ms(500); } } 这个例程中,我们使用STM32的GPIO口来控制HC-SR04超声波模块的触发和接收引脚,并通过计算超声波的回波时间来计算距离。在主函数中,我们不断地获取距离并通过串口输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值