STM32F407单片机编程入门(二十一) HC-SR04超声波模块测距实战含源码

一.概要

HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。
两个压电陶瓷超声波传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。由于发出信号和接收信号都比较微弱,所以需要通过外围信号放大器提高发出信号的功率,和将反射回来信号进行放大,以能更稳定地将信号传输给单片机。
模块如图所示:

在这里插入图片描述

二.HC-SR04主要参数

1.模块引脚定义

在这里插入图片描述

2.模块电气参数

在这里插入图片描述

3.模块通讯时序

在这里插入图片描述

以上时序图表明单片机只需要提供一个10uS以上脉冲触发信号给模块的TRIG引脚,超声波模块内部将发出8个40kHz周期电平并检测回波。模块一旦检测到有回波信号则输出回响信号到模块ECHO引脚。回响信号的脉冲宽度与所测的距离成正比。单片机通过采集收到的输出回响信号的宽度时间就可以计算得到距离。

距离公式:距离=回响高电平时间*声速(340M/S)/2

4.模块原理图

在这里插入图片描述

三.STM32F407VET6单片机超声波模块测距实验

硬件准备:

STLINK接STM32F407VET6开发板,STLINK接电脑USB口。

板子与超声波模块用杜邦线连接:
板子PE10----模块Trig
板子PE11----模块Echo
板子3.3-------模块VCC
板子G---------模块GND

在这里插入图片描述

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F407VE,再双击就创建新的工程
在这里插入图片描述

配置下载口引脚
在这里插入图片描述

配置外部晶振引脚
在这里插入图片描述
PE10配置成输出,PE11配置成输入
在这里插入图片描述

配置定时器9,10us中断一次
在这里插入图片描述

配置系统主频168Mhz,使用外部晶振
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述

生成工程
在这里插入图片描述

用Keil5打开工程
在这里插入图片描述

添加超声波相关代码

在这里插入图片描述
在这里插入图片描述

主要代码

void TIM1_BRK_TIM9_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_BRK_TIM9_IRQn 0 */

  /* USER CODE END TIM1_BRK_TIM9_IRQn 0 */
  HAL_TIM_IRQHandler(&htim9);
  /* USER CODE BEGIN TIM1_BRK_TIM9_IRQn 1 */
  TimeCounter++;//时间累积
  /* USER CODE END TIM1_BRK_TIM9_IRQn 1 */
}
uint32_t Distance;//距离
extern volatile uint32_t TimeCounter;//时间计数,单位10us
uint32_t HalTime1,HalTime2;//时间临时变量
uint32_t Distance_Calculate(uint32_t count)//传入时间单位10us
{
    uint32_t Distance = 0;
    Distance = (uint32_t)(((float)count *17)/100);//距离单位cm,声速340M/S,时间*速度/2=距离
    return Distance;
}
void Delay_us(uint16_t us)
{
        for(int i = 0; i < us; i++)    
        {
					for(int j=0;j<40;j++)
					{
          __asm("NOP");//core bus 160M  情况下大概IIC速率 400K

					}
        }
    
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();//8M外部晶振,168M系统主频

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM9_Init();//TIM9设置10us中断
  /* USER CODE BEGIN 2 */
	if (HAL_TIM_Base_Start_IT(&htim9) != HAL_OK)//启动定时器9,10us进入中断一次
 {
	 while(1);
 }
 	OLED_Init();			       //初始化OLED  		
  OLED_Clear();            //清屏
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10,GPIO_PIN_RESET);//预先拉低Trig引脚
		HAL_Delay(5);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10,GPIO_PIN_SET);//拉高Trig引脚
		Delay_us(20);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10,GPIO_PIN_RESET);//拉低Trig引脚
		Delay_us(20);
		while(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_11) == 0);//如果是低电平,一直等
		HalTime1= TimeCounter;
		while(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_11) == 1);//如果是高电平,一直等
		if(TimeCounter>HalTime1)
		{
			HalTime2 = TimeCounter-HalTime1;
			if(HalTime2<0x300)
			{
					 Distance = Distance_Calculate(HalTime2);//计算距离
			}
		}
	OLED_Clear();
	OLED_ShowCHinese(18,0,0);//光
	OLED_ShowCHinese(36,0,1);//子
	OLED_ShowCHinese(54,0,2);//物
	OLED_ShowCHinese(72,0,3);//联
	OLED_ShowCHinese(90,0,4);//网
	OLED_ShowString(24,3,"SR04 TEST");
	OLED_ShowString(0,6,"Dis: ");  
	OLED_ShowNum(30,6,Distance,3,16);//显示距离值,单位cm	   
	OLED_ShowString(60,6,"cm"); 
    HAL_Delay(1000);		

  }
  /* USER CODE END 3 */
}

四.CubeMX工程源代码下载

通过网盘分享的文件:24.SR04超声波测距.zip
链接: https://pan.baidu.com/s/1OJksgWMaIRmcr2tqghymzw 提取码: rfxc
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

五.小结

超声波模块基于声音传播的速度和时间差来计算模块到前方障碍物的距离,可用于人体检测,机器人避障,距离测量等,例如在门口安装超声波模块可以检测人的接近并触发开门动作,或者用于室内的距离测量和自动照明等

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值