基于STM32和HC-SR04模块实现超声波测距功能
HC-SR04硬件概述
HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。就是如此简单!
该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间出色的非接触范围检测,精度为3mm。
硬件接线图
CubeMx:
开一个定时器(基本定时器就行) 打开这个以及超过超声波最多能探测范围这样就行
#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;}}
}