STM32F103串口通信用于获取GY-53 红外测距模块数据
STM32F103的串口功能强大,主要用于不同模块的通信,在使用GY-53模块时, 我选择使用STN32F1的串口用于读GY-53发送的数据。
GY-53介绍
GY-53 是一款低成本数字红外测距传感器模块,有两种方式读取数据,即串口 UART(TTL 电平)+PWM(1 线)或者芯片 IIC 模式,串口的波特率有 9600bps 与115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。 文章底部有使用手册的文档
思路导图
STMF103串口配置
/**** @brief * @note* @param* @retval*/
void laser_uart1_Configuration(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟USART_DeInit(USART1);//USART1_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //USART1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART1, ENABLE); //使能串口1 }void USART1_IRQHandler(void) //串口1中断服务程序{static u8 Res_1;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.OSIntEnter();
#endifif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res_1 =USART_ReceiveData(USART1); //读取接收到的数据if((USART1_RX_STA&0x8000)==0)//接收未完成{if(USART1_RX_STA&0x4000)//接收到了0x0d{if(Res_1!=0x5a)USART1_RX_STA=0;//接收错误,重新开始else USART1_RX_STA|=0x8000; //接收完成了 }else //还没收到0X0D{ USART1_RX_BUF[USART1_RX_STA&0X3FFF]=Res_1 ;USART1_RX_STA++;if(USART1_RX_STA>(7)){USART_data_analyse(USART1_RX_BUF,8,First);USART1_RX_STA=0;//接收数据错误,重新开始接收 }} }}}
数据处理函数
void USART_data_analyse(u8 *buf,u8 num,u8 state)
{u8 i,sum=0;for(i=0; i<(num-1); i++){sum += *(buf+i);}if(!(*(buf)==0X5A && *(buf+1)==0X5A && *(buf+2)==0X15)){return;}if(sum == (*(buf+7))){ switch(state){case First:{Laser.Original_Dist[First] = *(buf+4)<<8 | *(buf+5); /* 原始距离 */Laser.Measure_Mode[First] = *(buf+6);// Laser.Relative_Dist[First] = Laser.Original_Dist[Left]*my_cos(my_abs(MOVE.Goal_Z-IMU.Ang.Z)/57.2957f); /* 相对距离 */}break;case Second:{Laser.Original_Dist[Second] = *(buf+4)<<8 | *(buf+5); /* 原始距离 */Laser.Measure_Mode[Second] = *(buf+6);// Laser.Relative_Dist[Second] = Laser.Original_Dist[Left]*my_cos(my_abs(MOVE.Goal_Z-IMU.Ang.Z)/57.2957f); /* 相对距离 */}break;case Third:{Laser.Original_Dist[Third] = *(buf+4)<<8 | *(buf+5); /* 原始距离 */Laser.Measure_Mode[Third] = *(buf+6);// Laser.Relative_Dist[Third] = Laser.Original_Dist[Left]*my_cos(my_abs(MOVE.Goal_Z-IMU.Ang.Z)/57.2957f); /* 相对距离 */}break;case Fourth:{Laser.Original_Dist[Fourth] = *(buf+4)<<8 | *(buf+5); /* 原始距离 */Laser.Measure_Mode[Fourth] = *(buf+6);// Laser.Relative_Dist[Fourth] = Laser.Original_Dist[Left]*my_cos(my_abs(MOVE.Goal_Z-IMU.Ang.Z)/57.2957f); /* 相对距离 */}break;}}
}
该函数可用于4个串口的数据处理,使用时:
*buf 为缓冲区数组; num为数据字节;u8 state为不同串口
例如:
USART_data_analyse(USART1_RX_BUF,8,First);
处理后的数据
float Original_Dist[direction];/* 原始距离 */float Relative_Dist[direction];/* 相对距离 */
仅为个人拙见,如有不当请指正,谢谢!!
若有疑问欢迎私信提问
附上GY-53使用手册 + 程序源码
链接:https://pan.baidu.com/s/1wqLGIj7PNv4QrRikggML3A
提取码:qdxx
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V1的分享
STM32F103串口通信用于获取GY-53 红外测距模块数据相关推荐
- 安卓串口通信无法获取串口地址,无法打开串口权限
本周在安卓三防平板上尝试串口通信,遇到权限问题折腾了6天,这期间在csdn.博客园.简书等论坛查询报错代码,报错代码如下所示. avc: denied ( open / for path=" ...
- FreeRTOS+STM32F103串口通信错误解决方法
在调试FreeRTOS系统时,在串口中断中用队列存储数据,然后再定时器中断中用队列接收数据,并通过串口打印出来.在调试代码中编译器报错. -\OBJ\LED.axf: Error: L6915E: L ...
- wpf上位机 modbus串口通信,获取收发数据的完整报文
一. 1.网上很多modbus类库,封装的方法,大多只获取返回的数据,而不是完整的报文,有时使用不便. 2.大多类库"读取"有返回值,而"写"时没有返回值,不好 ...
- 红外测距模块 51单片机_[51单片机] HC-SR04超声波测距仪
1.HC-SR04超声波模块工作原理 (1)采用IO口触发测距,给至少10us高电平脉冲: (2)模块自动发送八个40khz方波,并自主检测是否有电波返回: (3)当有信号返回时,通过IO口输出一个高 ...
- 红外测距模块工作原理_共享单车里的通讯模块,工作原理是啥呢?
现在我们所看到了共享单车除了小黄车(OFO)没有配备GPS智能锁外,其他品牌的共享单车都有安装,那么这么高科技的东西具体是怎么工作的呢?下面由我给大家讲解下其中的奥秘. 其实这个东西也谈不上太多高科技 ...
- 嵌入式系统开发09——串口通信
本文主要涉及到串口协议和RS-232.485标准的简介,RS232.485电平与TTL电平的区别,以及 "USB/TTL转232" 模块(以CH340芯片模块为例)的工作原理. 目 ...
- C#串口通信学习笔记
因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛 ...
- 串口通信学习(GPS模块)2021.5.10
GPS串口通信学习实践 2021.5.10 1.串口通信简介 1.1 波特率 1.2 数据位 1.3 停止位 1.4 奇偶校验位 2.GPS模块串口通信配置 2.1 驱动安装 2.2 插入GPS模块 ...
- 【正点原子FPGA连载】第十四章 串口通信实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- labview 串口通信开发基础详解
串口通信的基本概念 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设 ...
最新文章
- html怎么把图片放到数组,HTML5中的图像数组
- laravel框架集成PHPExcel讲解及demo
- LCD 显示异常定位分析方法
- (Mybatis)lombok使用
- 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
- Android 系统使用USB OTG功能/打开USB Host API功能
- 第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)
- 高晓松谈管理:自嘲总被员工管
- 企业信息化建设过程中,交通物流行业如何凭借数据成功转型?
- C# 传递给C++函数的结构体没有对齐的问题
- Django | 静态文件处理
- 用Dynamips和虚拟机搭建虚拟网络1
- 如何线上推广引流?百度知道实现精准引流
- 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
- 大学C语言 算法的定义及特点教案,第2章 算法的概念和特性介绍_福州大学数计学院:C语言程序设计(韩晓芸)_ppt_大学课件预览_高等教育资讯网...
- LayUI项目之(查询会议签字)
- vlookup函数和vlookup函数与数据有效性
- ROS: an open-source Robot Operating System
- OSChina 周四乱弹 ——00后让别人给自己网购女朋友
- access mdb 二进制值解析器
热门文章
- 8.docker run --rm
- linux系统ping地址端口,linux ping 带端口
- java导出建表语句_由 Java Entity 类自动生成 SQL建表语句
- linux压力测试工具post,linux 下如何做压力测试 ab 压力测试 - 沃森博客
- Java调用第三方http接口的常用方式
- php mysql 简单聊天室_PHP实现最简单的聊天室应用
- 超详细 excel 基础知识
- microsoft edge怎么截长图_苹果12怎么截图截长屏 iphone 12截长图快捷键方法介绍
- bus Hound使用详解
- PDFObject无法加载远程url和不支持IE浏览器解决方案