智能车 有来有往 单收单发超声波模组 STM32CubeMx HAL库
Posted 长生君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能车 有来有往 单收单发超声波模组 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 */
}
六、总结
市面上大部分的 智能车的单收单发模组原理都一样,最关键的是掌握核心串口处理函数,切勿急躁,静心能事半功倍,欲速则不达。
以上是关于智能车 有来有往 单收单发超声波模组 STM32CubeMx HAL库的主要内容,如果未能解决你的问题,请参考以下文章