目录

1.GPS模块

2.GPS发送的数据格式

3.软件设计

3.1配置好串口

3.2然后写串口中断函数

效果


1.GPS模块

2.GPS发送的数据格式

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
  <1> UTC 时间,hhmmss(时分秒)格式
  <2> 定位状态,A=有效定位,V=无效定位
  <3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
  <4> 纬度半球N(北半球)或S(南半球)
  <5>经度dddmm.mmmm(度分)格式(前面的0也将被传输)
  <6> 经度半球E(东经)或W(西经)
  <7>地面速率(000.0~999.9节,前面的0也将被传输)
  <8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
  <9> UTC 日期,ddmmyy(日月年)格式
  <10>磁偏角(000.0~180.0度,前面的0也将被传输)
  <11> 磁偏角方向,E(东)或W(西)
  <12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效          <CR><LF>表示回车和换行

3.软件设计

3.1配置好串口

void uart_init(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时钟//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
}

3.2然后写串口中断函数

当串口接收到数据后,我们用$符号记录每条信息的开始,用K记录逗号的位置,便于解析数据

这里解析的是gprmc中的经纬度速度和gpgga里的高度;

void USART1_IRQHandler(void)                 //串口1中断服务程序{u8 res; res =USART_ReceiveData(USART1);    //读取接收到的数据if(res=='$'||USART_RX_BUF[0]=='$'){if(res=='$')i=0;USART_RX_BUF[i]=res;i++;}
if(USART_RX_BUF[4]=='M'&&USART_RX_BUF[5]=='C'){ if(res==',')k++;switch(k){case 2:if(res=='A'&&res!=',')flag=1;else flag=0;break;case 3:if(flag==1&&res!=','&&res!='.'){  longitude*=10;longitude+=res-48;}break;case 5:if(flag==1&&res!=','&&res!='.'){latitude*=10;latitude+=res-48;}break;case 7:if(flag==1&&res!=','&&res!='.'){    speed*=10;speed+=res-48;}break;}}        if(USART_RX_BUF[4]=='G'&&USART_RX_BUF[5]=='A'){ if(res==',')p++;switch(p){            case 9:if(res!=','&&res!='.'){high*=10;high+=res-48;}break;                }       if(res==0x0A){  memset(USART_RX_BUF,0x00,200);i=0;k=0;          a=longitude/10000000;b=latitude/10000000;c=speed/10*0.5144;printf("longitude: %f\r\n",a);printf("latitude: %f\r\n",b);printf("speed: %f\r\n",c);printf("high: %f\r\n",high/100);longitude=0;latitude=0;speed=0;}      }                       }

解析完数据化,打印数据;

效果

基于stm32的GPS解析数据相关推荐

  1. stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现

    引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...

  2. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  3. 基于STM32的GPS模块驱动(AIR530)

    一.概述 由于做项目要用到GPS定位,于是在某宝购买了这款GPS模块.项目采用的MCU是STM32.废话少说,进入正题. 二.GPS模块简介 Air530 模块是一款高性能.高集成度的多模卫星定位导航 ...

  4. 解决方法:STM32使用cJSON解析数据失败

    一.问题 在 STM32 移植 cJSON 库后,使用 cJSON_Parse(),解析失败. char cmd[512] = "{\"msg\":\"this ...

  5. 基于stm32片内Flash数据的DAC输出

    stm32片内Flash的提示音播放 前言 一.DAC简介 二.使用DAC输出单周期的正弦波 三.PCM模块输出音频 前言 使用用Adobe audition音频编辑软件录制"您好欢迎光临! ...

  6. 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据

    前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送.接收功能,实现MCU获取天气数据. 传送门:基于STM32F103的网络天气时钟(1)---------通过串 ...

  7. stm32与GPS模块的数据传输,最后把数据传回到电脑上

    stm32与GPS模块的数据传输,最后把数据传回到电脑上 准备工作 GPS(G28Z2FTTL)模块介绍 GPS数据类型及格式 代码部分 串口初始化部分 GPS部分代码 数据展示 准备工作 stm32 ...

  8. 基于STM32的智能GPS定位系统(云平台、小程序)

    背景及目标 前阵子,准确的说是好几个月前买了一辆电瓶车,当时呢因为车停得很随意,所以想给小电驴装一个GPS,一方面是防盗,另一方面是为了测速和绘制骑行轨迹,要是能联动电瓶车状态远程监测就更好了.当然我 ...

  9. 基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析

    基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析 简   介 一.项目说明 二.学习入门 1)开始了解例程 三.实战过程 ...

  10. 基于NB-IoT的GPS定位系统(STM32、WH-NB73、U-BLOX NEO-7N )

    基于NB-IoT的GPS定位系统(STM32.WH-NB73.U-BLOX NEO-7N ) 前期准备 GPS模块测试 NB73模块测试 NB73模块与云平台数据交互测试 GPS数据处理 NB73模块 ...

最新文章

  1. KVM虚拟化实践(一)
  2. 关卡设计快速入门_6. 执行构建过程
  3. .net程序员转战android第一篇---环境部署
  4. 31 天重构学习笔记29. 去除中间人对象
  5. CET6级高频词(按频度)(700个)
  6. 机器学习:从入门到第一个模型
  7. python特征选择的过程_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...
  8. 华为徐直军:今年超3亿设备搭载鸿蒙系统
  9. leetcode python3 简单题9. Palindrome Number
  10. 计算机网络调试套什么定额,第一章计算机网络系统设备安装工程定额.docx
  11. 哲学家就餐问题与解决方案
  12. miniPCIE接口更换M.2/NGFF接口AX200无线网卡教程——华硕X450V笔记本更换intel AX200无线网卡
  13. poj 计算几何 分类
  14. [解决方案] LaTeX公式中的多行大括号 (如涵盖多个不等式)
  15. 阿里云周晶:基于融合与协同的边缘云原生体系实践
  16. python游戏代码怎样才能玩好英雄联盟_怎样才能玩好英雄联盟-百度经验
  17. Robust semantic segmentation by dense fusion network on blurred vhr remote sensing images
  18. [中文版Dreamweaver.Flash.Photoshop网页制作从入门到精通(CS4版)].杨颖张永雄 pdf
  19. 【转】探索基础元素---基于WebGL的H5 3D游戏引擎BabylonJS
  20. mysql查询学生表的总人数,MySQL查询练习2

热门文章

  1. git里面的文件怎么删不掉_彻底删除git中没用的大文件
  2. 如何根据经纬度查询地理位置
  3. winxp计算机如何连接win7计算机,Win7电脑连接XP系统共享打印机的操作方法
  4. 秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
  5. JavaWeb编年史(青铜时代)
  6. cmd 执行html文件,cmd执行bat文件 cmd文件和bat文件有什么区别?
  7. 洛谷 P4093 [HEOI2016/TJOI2016]序列 k-d tree
  8. c盘找不到appdata
  9. 定时炸弹?揭露AmazonBasics电池背后的秘密
  10. 博士后到底值不值得做?!