最详细STM32,cubeMX 超声波测距

这篇具有很好参考价值的文章主要介绍了最详细STM32,cubeMX 超声波测距。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章将详细介绍 STM32使用 cubeMX驱动超声波测距 。


前言

  • 实验材料:STM32F103C8T6开发板, HC-SR04 超声波模块。
  • 所需软件:keil5 , cubeMX ,AiThinker Serial Tool 串口助手。
  • 实验目的:了解 STM32使用 cubeMX驱动超声波 。
  • 实验:超声波测距。

一、超声波模块

HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能。有4 个引脚:VCC, GND, Trig(信号触发引脚),Echo(接收返回信号)。

当超声波发出一个信号时,信号碰到物体或阻碍后会立即返回。只要得到 信号往返传输的时间就可以测出距离。
最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

参数列表:
工作电压 VCC5 V
最远射程 : 4m
最近射程 :2cm
信号传输速度 :340m/s

测距原理

下图是 超声波时序图。

  1. 首先让超声波的 trig 引脚发送触发信号:一个 10 us 的 TTL 高电平。

  2. 然后模块内部会自动循环发出 8 个 40 KHZ 的脉冲。

  3. 接着 超声波的 echo 引脚会接收到回返信号。

  4. 最后只需要计算出这段回返信号的高电平时间 再带入公式 S = 340(m/s) * T(s) / 2 即可算出距离.这里是往返时间,要除 2。(因为 高电平的时间就是信号往返传输的时间)
    最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

二、cubeMX 配置

对于基础的配置可以看我之前的文章。

  1. 由于 要发送一个 10us 的高电平,这个时间用定时器进行配置,所以这里我使用 定时器 2 进行延时。(尽量不要使用 HAL_Delay 函数,多次使用会导致程序卡顿)

这里选择内部时钟源,并配置相关参数。这里配置的参数是 1us 延时。
最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

  1. 我们还需要 一个定时器去 计算回返信号的高电平时间。使用定时器3。配置的定时时间依然是 1us。

如果对 定时器的定时时长有不了解的可以参考我之前的文章:最详细STM32,cubeMX 定时器

最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

  1. 需要将测出的距离使用串口助手打印出来,所以这里需要使用一个 串口 USART2.(使用 异步传输)

如果对 串口的配置有不了解的可以参考我之前的文章:最详细STM32,cubeMX串口发送,接收数据

最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

  1. 对于检测 是否接收到 回返信号 ,可以使用外部中断。

超声波需要两个引脚分别用来 发送触发信号 ,接收回返信号。所以,这里我使用 PB3 用来 发送触发信号,设置为输出引脚。使用 PB6 接收信号,并将其设置为 外部中断模式。

如果对 外部中断的配置有不了解的可以参考我之前的文章:STM32不使用 cubeMX实现外部中断

最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

  • 并将 PB6 设置为 双边沿触发中断。
    最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

  • 并将外部中断使能。
    最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波

三、实验程序

sr04.h:

#ifndef _SR04_H_
#define _SR04_H_

#include <stdio.h>
#include "main.h"

#define		Trigger_ON 		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET)
#define		Trigger_OFF 	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET)


void Delay_us(uint16_t us);						// 使用定时器2编写的延时函数
void Trigger_signal(void);						// 发送 10us 的触发信号


#endif

sr04.c:

#include "sr04.h"

int distance_cm = 0;


extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;


/* 延时函数(单位 us) */
void Delay_us(uint16_t us)
{
	uint16_t time = 0xffff - us - 5;
	__HAL_TIM_SET_COUNTER(&htim2,time);								// 设置 定时器2 的值
	HAL_TIM_Base_Start(&htim2);										// 开启定时器2

	while(time < 0xffff-5)
	{
		time = __HAL_TIM_GET_COUNTER(&htim2);						// 获取定时器2 值
	}

	HAL_TIM_Base_Stop(&htim2);										// 停止 定时器2
}


/* 发送 10us 的触发信号 */
void Trigger_signal(void)
{
	Trigger_ON;							// 发送高电平
	Delay_us(10);						// 延时 10 us
	Trigger_OFF;						// 发送低电平
}


/* 外部中断回调函数 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{	
	 static uint32_t time_us = 0;
	
	if(GPIO_Pin == GPIO_PIN_6)
	{
		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_6))
		{
			HAL_TIM_Base_Start(&htim3);									// 开启定时器3(开始计时)
			__HAL_TIM_SetCounter(&htim3,0);								// 清空定时器3
		}
		else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_6) == 0)
		{
			HAL_TIM_Base_Stop(&htim3);									//关闭定时器3(停止计时)
			time_us = __HAL_TIM_GetCounter(&htim3);							// 获取高电平时间
			printf("time_us : %d\r\n", time_us);
			distance_cm = time_us * 340/2*0.000001*100;
			printf("distance_cm is %d cm\r\n", distance_cm);
			
			time_us = 0;
		}
	}
}

对于串口发送数据,可以使用重定义函数,简化代码:

int fputc(int ch,FILE* f)
{
	while(HAL_UART_Transmit(&huart2,(uint8_t*)&ch,sizeof(ch),1000) != HAL_OK);
	return 0;
}

测试程序:
在 while 循环中持续发送触发信号。

  int count = 0;

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		/* 每 50 ms 发送一次触发信号 */
		if(HAL_GetTick() - count > 50)
		{
			count = HAL_GetTick();
			Trigger_signal();
		}		
		
  }

HAL_GetTick() 函数 用来获取当前的时间。可以看到这个函数返回 uwTick 变量,在 HAL_IncTick() 中一直增加。uwTick 变量是从STM32 开机就开始计时。 1 uwTick 就是 1ms.
最详细STM32,cubeMX 超声波测距,STM32F103C8T6教程,stm32,嵌入式硬件,单片机,sr04,超声波


总结

下一篇文章为大家介绍 STM32 驱动蓝牙的实现。文章来源地址https://www.toymoban.com/news/detail-720698.html

到了这里,关于最详细STM32,cubeMX 超声波测距的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的超声波测距

    一、HC-SR04模块介绍 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可高达3mm;模块包括超声波发射器、接收器、与控制电路。 模块的基本工作原理为: (1)采用 IO口 TRIG触发测距,给最少 10us的高电平信呈。 (2)模块自动发送 8个 40khz的方波,自动检测是

    2024年02月13日
    浏览(21)
  • 基于STM32超声波测距系统设计

    随着社会的发展和科技的进步,人们对测距的要求越来越高,特别是在一些要求实时测距的场合,传统的测距方式已经无法满足人们的需求,而超声波测距由于其非接触和实时反馈的特点在生活中得到广泛应用。 本系统硬件部分由电源模块、控制模块、显示模块、报警模块、

    2024年02月04日
    浏览(24)
  • stm32之14.超声波测距代码

           -------------------- 源码  

    2024年02月11日
    浏览(24)
  • STM32超声波测距(OLED显示距离)

    超声波原理: 利用声音测距,声音在空气中的速度是340m/s(15℃) 当声音传播时,若遇到障碍物时,就会被反弹回来,通过计时反弹回来的时间就可以计算出从发射端到障碍物的距离 引脚定义: 工作电压:3V-5.5V宽电压供电 测距盲区:2cm最小盲区 接口定义如图 序号 接口定义

    2024年02月04日
    浏览(19)
  • STM32:两种方式实现超声波测距

    超声波模块HC-SR04的工作原理很简单,有很多办法可以完成超声波测距,这里简单介绍两种。 配置定时器的中断并声明一个Time的变量,在中断中先判断标志位,然后检查echo端口是否为高电平,如果是,Time++,然后变量time乘以定时时间就能得到echo端口高电平持续的时间,经过

    2024年04月16日
    浏览(13)
  • 基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距

    一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方 四、基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块 五、基于STM32F103C8

    2023年04月17日
    浏览(41)
  • 基于STM32_HAL库实现超声波测距

    核心板               : STM32F103C8T6。 超声波测距模块 : HC-SR04超声波测距模块 实验目的            : 利用超声波测距,将测量的距离打印在串口并输出。 HC-SR04超声波测距模块介绍         接口定义:Vcc、 Trig(控制端——PA2)、 Echo(接收端——PA11)、 Gnd        

    2024年02月16日
    浏览(20)
  • STM32超声波避障小车(舵机云台+超声波/stm32f103/HAL/Cube)

    一、小车1.0——基本蓝牙小车(仅蓝牙遥控小车运动方向,本篇) 二、小车2.0——蓝牙小车PLUS(可以蓝牙控制方向+蓝牙直接调节车速) 三、小车3.0——避障小车(超声波+舵机云台) 四、小车4.0——无线手柄方向感知操控小车(mpu6050+双蓝牙透传) 五、双轮自平衡小车(HAL库版

    2024年02月05日
    浏览(46)
  • 基于STM32F407实现超声波测距(SR04)

    今天要实现的功能是超声波测距,这一功能在很多的地方都能用到,比如:在智能小车上可以添加超声波避障功能。今天需要用到SR04超声波模块,在使用这一模块的时候我很会接触到时序图。 模块如图所示: 模块有四个引脚 VCC 供 5V电源, GND 为地线, TRIG 触 发 控 制 信 号

    2024年02月11日
    浏览(23)
  • stm32-CS100A 超声波测距芯片原理及代码解读

            CS100A 是苏州顺憬志联新材料科技有限公司(www.100sensor.com)推出的一款工 业级超声波测距芯片,CS100A 内部集成超声波发射电路,超声波接收电路,数字处理电 路等,单芯片即可完成超声波测距,测距结果通过脉宽的方式进行输出,通信接口兼容 现有超声波模块

    2024年02月04日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包