IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 智能车 有来有往 单收单发超声波模组 STM32CubeMx Hal -> 正文阅读

[嵌入式]智能车 有来有往 单收单发超声波模组 STM32CubeMx Hal

运行环境

  • Windows10
  • STM32CubeMX___Version 6.1.0
  • Keil5(MDK5)___Version 5.27

简介

这是一个针对智能车?有来有往 单收单发超声波模组的一个教程


?模组图片

一、参数简介

最远接收距离:
>5 米
最短接收距离:
<4 厘米
最大接收角度:
>90 度
数据波动范围:
<3 毫米
模块工作电压:
5V
模块工作方式:
串口
模块发送频率:
50HZ
模块通信波特率:
115200

二、使用过程

发送超声波模块: 发送超声波模块 只需要上电即可。 发送超声波模块 上电后,
送超声波模块 上的 LED 会快闪,此时证明, 发送超声波模块 已经在正常工作了。
(注: 发送超声波模块 上面留有了 RX TX,这是用来刷超声波固件。)
接收超声波模块: 发送超声波模块 通上电之后。
需要将 发送超声波模块 接收超声波模块 对准,此时 接收超声波模块 需上的 LED
会快闪。
此时证明 接收超声波模块 已经接收到 发送超声波模块 发射的超声波。
此时 接收超声波模块 上接收到的数据即是发送和接收超声波的距离数据。
值得注意的是,2 个超声波发射头需要对准,才会通信成功, 发送超声波模块
需上电即可工作(发送上的 LED 闪烁),此时只是证明了 发送超声波模块 已经成
功发射出超声波,但并不能证明 接收超声波模块 会接收到数据,只有接收到 发送
超声波模块 的声波后, 接收超声波模块 上的 LED 闪烁后,才能证明这两者已经通
信成功。 接收超声波模块 才会有距离数据输出。

三. 数据格式

接收超声波 已经接收到 发送超声波 的数据后, 接收超声波 模块上的
LED 灯会快速闪烁,会通过串口以 50Hz 的频率发送出距离数据。
数据格式是:0XA5+两个字节数据(16 进制),距离的单位是 mm,
例如:返回数据是: A5
00 C8,意思就是:200mm。
数据的含义是什么呢?
0XA5 是帧头,另外 2 个是数据存储字节。
A5
00
C8
帧头
高八位数据存储字节
低八位数据存储字节
如何解算:很简单,把 2 个字节数据移位然后逻辑运算即可。
如下:
distance_left = dat_left[1]<<8 | dat_left[2];

四、STM32CubeMx的配置

1、开启时钟?

2、下载配置

3.开启一个串口

?

4.打开NVIC

?

五、代码详解

?1.头文件包含

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

?2.变量定义,以及中断逻辑处理

/* USER CODE BEGIN 0 */
 unsigned char   dat_left[3];							//存放超声波串口接收的字节数
 unsigned char   num_left;			 							//超声波数据接收变量
 int            distance_left;					//计算出来的距离

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if( huart == &huart2 )
	{
		HAL_UART_Receive_IT(&huart2,&dat_left[num_left],sizeof (num_left));
		
			if(dat_left[0] != 0xA5)
		{
					num_left = 0;
		}
		else 
			num_left++;
			
    if(num_left==3)
		{
			    num_left = 0;
					distance_left = dat_left[1]<<8 | dat_left[2]; 
		}
}
}


#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号
 
	return ch;
}


/* USER CODE END 0 */

3.开启中断接受

  /* USER CODE BEGIN 2 */

	HAL_UART_Receive_IT(&huart2,&dat_left[num_left],sizeof (num_left));
  /* USER CODE END 2 */

4.连续接受

  while (1)
  {

		printf("distance_left=%d\r\n",distance_left);
		HAL_Delay (100);
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

六、总结

市面上大部分的 智能车的单收单发模组原理都一样,最关键的是掌握核心串口处理函数,切勿急躁,静心能事半功倍,欲速则不达。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:52:01  更:2021-08-18 12:53:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:22:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码