基于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;
}
}
}