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 红外测距模块数据相关推荐

  1. 安卓串口通信无法获取串口地址,无法打开串口权限

    本周在安卓三防平板上尝试串口通信,遇到权限问题折腾了6天,这期间在csdn.博客园.简书等论坛查询报错代码,报错代码如下所示. avc: denied ( open / for path=" ...

  2. FreeRTOS+STM32F103串口通信错误解决方法

    在调试FreeRTOS系统时,在串口中断中用队列存储数据,然后再定时器中断中用队列接收数据,并通过串口打印出来.在调试代码中编译器报错. -\OBJ\LED.axf: Error: L6915E: L ...

  3. wpf上位机 modbus串口通信,获取收发数据的完整报文

    一. 1.网上很多modbus类库,封装的方法,大多只获取返回的数据,而不是完整的报文,有时使用不便. 2.大多类库"读取"有返回值,而"写"时没有返回值,不好 ...

  4. 红外测距模块 51单片机_[51单片机] HC-SR04超声波测距仪

    1.HC-SR04超声波模块工作原理 (1)采用IO口触发测距,给至少10us高电平脉冲: (2)模块自动发送八个40khz方波,并自主检测是否有电波返回: (3)当有信号返回时,通过IO口输出一个高 ...

  5. 红外测距模块工作原理_共享单车里的通讯模块,工作原理是啥呢?

    现在我们所看到了共享单车除了小黄车(OFO)没有配备GPS智能锁外,其他品牌的共享单车都有安装,那么这么高科技的东西具体是怎么工作的呢?下面由我给大家讲解下其中的奥秘. 其实这个东西也谈不上太多高科技 ...

  6. 嵌入式系统开发09——串口通信

    本文主要涉及到串口协议和RS-232.485标准的简介,RS232.485电平与TTL电平的区别,以及 "USB/TTL转232" 模块(以CH340芯片模块为例)的工作原理. 目 ...

  7. C#串口通信学习笔记

    因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛 ...

  8. 串口通信学习(GPS模块)2021.5.10

    GPS串口通信学习实践 2021.5.10 1.串口通信简介 1.1 波特率 1.2 数据位 1.3 停止位 1.4 奇偶校验位 2.GPS模块串口通信配置 2.1 驱动安装 2.2 插入GPS模块 ...

  9. 【正点原子FPGA连载】第十四章 串口通信实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  10. labview 串口通信开发基础详解

    串口通信的基本概念 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设 ...

最新文章

  1. html怎么把图片放到数组,HTML5中的图像数组
  2. laravel框架集成PHPExcel讲解及demo
  3. LCD 显示异常定位分析方法
  4. (Mybatis)lombok使用
  5. 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
  6. Android 系统使用USB OTG功能/打开USB Host API功能
  7. 第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)
  8. 高晓松谈管理:自嘲总被员工管
  9. 企业信息化建设过程中,交通物流行业如何凭借数据成功转型?
  10. C# 传递给C++函数的结构体没有对齐的问题
  11. Django | 静态文件处理
  12. 用Dynamips和虚拟机搭建虚拟网络1
  13. 如何线上推广引流?百度知道实现精准引流
  14. 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
  15. 大学C语言 算法的定义及特点教案,第2章 算法的概念和特性介绍_福州大学数计学院:C语言程序设计(韩晓芸)_ppt_大学课件预览_高等教育资讯网...
  16. LayUI项目之(查询会议签字)
  17. vlookup函数和vlookup函数与数据有效性
  18. ROS: an open-source Robot Operating System
  19. OSChina 周四乱弹 ——00后让别人给自己网购女朋友
  20. access mdb 二进制值解析器

热门文章

  1. 8.docker run --rm
  2. linux系统ping地址端口,linux ping 带端口
  3. java导出建表语句_由 Java Entity 类自动生成 SQL建表语句
  4. linux压力测试工具post,linux 下如何做压力测试 ab 压力测试 - 沃森博客
  5. Java调用第三方http接口的常用方式
  6. php mysql 简单聊天室_PHP实现最简单的聊天室应用
  7. 超详细 excel 基础知识
  8. microsoft edge怎么截长图_苹果12怎么截图截长屏 iphone 12截长图快捷键方法介绍
  9. bus Hound使用详解
  10. PDFObject无法加载远程url和不支持IE浏览器解决方案