基于stm32的GPS解析数据
目录
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解析数据相关推荐
- stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现
引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...
- 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...
- 基于STM32的GPS模块驱动(AIR530)
一.概述 由于做项目要用到GPS定位,于是在某宝购买了这款GPS模块.项目采用的MCU是STM32.废话少说,进入正题. 二.GPS模块简介 Air530 模块是一款高性能.高集成度的多模卫星定位导航 ...
- 解决方法:STM32使用cJSON解析数据失败
一.问题 在 STM32 移植 cJSON 库后,使用 cJSON_Parse(),解析失败. char cmd[512] = "{\"msg\":\"this ...
- 基于stm32片内Flash数据的DAC输出
stm32片内Flash的提示音播放 前言 一.DAC简介 二.使用DAC输出单周期的正弦波 三.PCM模块输出音频 前言 使用用Adobe audition音频编辑软件录制"您好欢迎光临! ...
- 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据
前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送.接收功能,实现MCU获取天气数据. 传送门:基于STM32F103的网络天气时钟(1)---------通过串 ...
- stm32与GPS模块的数据传输,最后把数据传回到电脑上
stm32与GPS模块的数据传输,最后把数据传回到电脑上 准备工作 GPS(G28Z2FTTL)模块介绍 GPS数据类型及格式 代码部分 串口初始化部分 GPS部分代码 数据展示 准备工作 stm32 ...
- 基于STM32的智能GPS定位系统(云平台、小程序)
背景及目标 前阵子,准确的说是好几个月前买了一辆电瓶车,当时呢因为车停得很随意,所以想给小电驴装一个GPS,一方面是防盗,另一方面是为了测速和绘制骑行轨迹,要是能联动电瓶车状态远程监测就更好了.当然我 ...
- 基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析
基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析 简 介 一.项目说明 二.学习入门 1)开始了解例程 三.实战过程 ...
- 基于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模块 ...
最新文章
- KVM虚拟化实践(一)
- 关卡设计快速入门_6. 执行构建过程
- .net程序员转战android第一篇---环境部署
- 31 天重构学习笔记29. 去除中间人对象
- CET6级高频词(按频度)(700个)
- 机器学习:从入门到第一个模型
- python特征选择的过程_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...
- 华为徐直军:今年超3亿设备搭载鸿蒙系统
- leetcode python3 简单题9. Palindrome Number
- 计算机网络调试套什么定额,第一章计算机网络系统设备安装工程定额.docx
- 哲学家就餐问题与解决方案
- miniPCIE接口更换M.2/NGFF接口AX200无线网卡教程——华硕X450V笔记本更换intel AX200无线网卡
- poj 计算几何 分类
- [解决方案] LaTeX公式中的多行大括号 (如涵盖多个不等式)
- 阿里云周晶:基于融合与协同的边缘云原生体系实践
- python游戏代码怎样才能玩好英雄联盟_怎样才能玩好英雄联盟-百度经验
- Robust semantic segmentation by dense fusion network on blurred vhr remote sensing images
- [中文版Dreamweaver.Flash.Photoshop网页制作从入门到精通(CS4版)].杨颖张永雄 pdf
- 【转】探索基础元素---基于WebGL的H5 3D游戏引擎BabylonJS
- mysql查询学生表的总人数,MySQL查询练习2
热门文章
- git里面的文件怎么删不掉_彻底删除git中没用的大文件
- 如何根据经纬度查询地理位置
- winxp计算机如何连接win7计算机,Win7电脑连接XP系统共享打印机的操作方法
- 秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
- JavaWeb编年史(青铜时代)
- cmd 执行html文件,cmd执行bat文件 cmd文件和bat文件有什么区别?
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 k-d tree
- c盘找不到appdata
- 定时炸弹?揭露AmazonBasics电池背后的秘密
- 博士后到底值不值得做?!