智能车 有来有往 单收单发超声波模组 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 */
  }

六、总结

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

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长生君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值