中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程

  • 简介
  • 准备工作
    • PC端需要用到的工具
    • 代码下载地址
    • GD32F103C8T6最小系统板
  • 代码实现
    • GD32串口引脚定义如下:
    • 串口的初始化
      • 串口0初始化代码:
      • 串口1初始化代码
    • 串口的输入
      • 串口0的输入代码如下:
      • 串口1的输入代码如下:
    • 串口打印
      • 串口0的串口打印输出代码如下:
      • 串口1的串口打印输出代码如下:
    • GPS模块的数据解析
      • 解析代码
      • 主函数
      • 完整的工程代码下载地址:
    • 北斗+GPS定位模块的验证
    • 参考

简介

北斗+GPS定位模块测试板的测试工作已完成,计划春节后开售,本文介绍GD32作为主控芯片对北斗+GPS定位模块的经纬度数据的解析方法。

准备工作

PC端需要用到的工具

  1. XCOM串口调试助手;
  2. GPS经纬度地图定位工具。
    下载地址:
    https://pan.baidu.com/s/1scQYIS97CqzUzH5XQ3CI6A?pwd=5u0w

代码下载地址

完整的工程代码下载地址:
https://download.csdn.net/download/YANGJIERUN/87381512

GD32F103C8T6最小系统板

使用了gd32f103c8t6最小系统开发板,某宝上搜素“Makerbase高博士GD32开发板”即可找到,只需要30多块钱,如下图。

代码实现

GD32串口引脚定义如下:

GD32F103C8T6串口引脚说明:

串口 发送管脚(TX) 接收管脚(RX)
USART0 PA9 PA10
USART1 PA2 PA3
USART2 PB10 PB11

本例程使用USART0下载程序、Debug打印数据使用,另外使用USART1读取GPS数据。

串口的初始化

USART0、USART1的初始化步骤一致,只是函数参数上USART0改为了USART1而已。

串口0初始化代码:

// 串口 0 初始化
void USART0_init(uint32_t bound)
{/* enable USART clock */rcu_periph_clock_enable(RCU_USART0);/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOA);/* connect port to USARTx_Tx */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);/* connect port to USARTx_Rx */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);/* USART configure */usart_deinit(USART0);usart_baudrate_set(USART0, bound);usart_word_length_set(USART0, USART_WL_8BIT);usart_stop_bit_set(USART0, USART_STB_1BIT);usart_parity_config(USART0, USART_PM_NONE);usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);usart_receive_config(USART0, USART_RECEIVE_ENABLE);usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);usart_enable(USART0);
}

串口1初始化代码

// 串口 1 初始化
void USART1_init(uint32_t bound)
{/* enable USART clock */rcu_periph_clock_enable(RCU_USART1);/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOA);/* connect port to USARTx_Tx */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);/* connect port to USARTx_Rx */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);/* USART configure */usart_deinit(USART1);usart_baudrate_set(USART1, bound);usart_word_length_set(USART1, USART_WL_8BIT);usart_stop_bit_set(USART1, USART_STB_1BIT);usart_parity_config(USART1, USART_PM_NONE);usart_hardware_flow_rts_config(USART1, USART_RTS_DISABLE);usart_hardware_flow_cts_config(USART1, USART_CTS_DISABLE);usart_receive_config(USART1, USART_RECEIVE_ENABLE);usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);usart_enable(USART1);
}

串口的输入

串口输入本教程使用最简单的轮询输入。网上有教程是通过重写scanf实现串口输入的,但是重写scanf的实际使用很不好。数据一多就出错,而且只能被一个串口使用,本人不推荐大家使用。个人觉得还是C语言库里面的getchar()用的舒服。

串口0的输入代码如下:

//串口0的专用 getchar 函数
char USART0_getchar(void)
{/* 等待串口输入数据 */while (usart_flag_get(USART0, USART_FLAG_RBNE) == RESET);return (char)usart_data_receive(USART0);
}

串口1的输入代码如下:

//串口1的专用 getchar 函数
char USART1_getchar(void)
{/* 等待串口输入数据 */while (usart_flag_get(USART1, USART_FLAG_RBNE) == RESET);return (char)usart_data_receive(USART1);
}

串口打印

串口0的串口打印输出代码如下:

//串口0的专用 putchar 函数
void USART0_putchar(char ch)
{usart_data_transmit(USART0, (uint8_t)ch);while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
}//串口0的专用 puts 函数
void USART0_puts(char* fmt)
{uint16_t i = 0;while(fmt[i] != '\0'){USART0_putchar(fmt[i]);i++;}
}

串口1的串口打印输出代码如下:

//串口1的专用 putchar 函数
void USART1_putchar(char ch)
{usart_data_transmit(USART1, (uint8_t)ch);while(RESET == usart_flag_get(USART1, USART_FLAG_TBE));
}//串口1的专用 puts 函数
void USART1_puts(char* fmt)
{uint16_t i = 0;while(fmt[i] != '\0'){USART1_putchar(fmt[i]);i++;}
}

GPS模块的数据解析

解析GPS的经纬度就是对串口上来的数据进行字符串匹配。中科微的GPS模组手册里面有其他数据解析的说明,这里只解析经纬度,其他数据的解析也是大同小异。经纬度的计算方法如下图:

解析代码

#include "DRG_GPS_Mode.h"#define BUFF_SIZE 200typedef struct SaveData
{char N_S[N_S_Length];      //N/Schar E_W[E_W_Length];      //E/W
} _SaveData;_SaveData Save_Data;// 解析 GPS 数据
void parseGpsBuffer(void)
{uint8_t ch,Rxbuffer[BUFF_SIZE];uint16_t index,i;while(1){ch = USART1_getchar();if(ch == '$'){index = 0;while(ch != ','){ch = USART1_getchar();Rxbuffer[index] = ch;index++;}if(!strcmp("GNGLL,",(const char*)Rxbuffer)){for(i = 0;i < 10;i++)Save_Data.N_S[i] = USART1_getchar();ch = USART1_getchar();ch = USART1_getchar();ch = USART1_getchar();for(i = 0;i < 10;i++)Save_Data.E_W[i] = USART1_getchar();break;}}}/*USART0_puts("Save_Data.N_S = ");USART0_puts(Save_Data.N_S);USART0_puts("\r\n");USART0_puts("Save_Data.E_W = ");USART0_puts(Save_Data.E_W);USART0_puts("\r\n");*/
}// 获取 GPS 纬度数据 - 字符串形式
char* Get_Gps_N_S_str(void)
{return Save_Data.N_S;
}// 获取 GPS 经度数据 - 字符串形式
char* Get_Gps_E_W_str(void)
{return Save_Data.E_W;
}

主函数

#include "DRG_GPS_Mode.h"int main(void)
{USART0_init(115200U);USART1_init(9600U);USART0_puts("USART0 begin...\r\n");USART1_puts("USART1 begin...\r\n");while(1){parseGpsBuffer();               // 解析串口 1 上 GPS 模块的数据USART0_puts("N_S = ");USART0_puts(Get_Gps_N_S_str());   // 打印维度字符串数据USART0_puts("\r\n");USART0_puts("E_W = ");USART0_puts(Get_Gps_E_W_str());  // 打印经度字符串数据USART0_puts("\r\n");}
}

完整的工程代码下载地址:

https://download.csdn.net/download/YANGJIERUN/87381512

北斗+GPS定位模块的验证

串口助手读取到的数据:

使用定位工具可以判断读取的数据是否准确。注意GPS模块要拿到室外定位,这样数据才准确。

参考

https://blog.csdn.net/YANGJIERUN/article/details/128667480

【中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程】相关推荐

  1. GPS(rinex格式)数据解析详细解读

    RINEX格式现如今已成为GPS测量应用中的标准数据格式,目前应用最为广泛.最普遍的是RINEX格式的第2个版本,该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据.在该版本中定义了6种不同 ...

  2. 淘宝H5商品详情数据解析接口sign算法接口代码教程

    淘宝H5商品详情数据解析接口sign算法接口代码教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须以GET方式拼接在 ...

  3. python Flask框架如何请求及返回数据——flask详细教程

    python Flask框架如何请求及返回数据--flask详细教程 文章目录: 1 Flask介绍 1.1 Flask简单介绍 1.2 Flask相关资料信息 2 Flask快速入门 2.1 Fla ...

  4. 【仿真】Carla之收集数据快速教程 (附完整代码)

    收集过程可视化展示,随后进入正文: 参考与前言 看到仿真群对这类任务下(用carla收集数据然后再做训练等) 需求量大,顺手马上写一个好了,首先收集数据需要考虑清楚: 收集什么数据,需要什么样的数据格 ...

  5. Godaddy域名A记录解析详细教程

    Godaddy域名A记录解析详细教程 1.先开的Godaddy.com,然后在网页顶部进行登录.如图1: 2.登陆过后,点击导航条最右边的:My Account 如图2: 3.这时点击左栏的:Doma ...

  6. 在matlab中导入excel,Matlab导入Excel文件中的数据的详细教程分享

    操作Matlab时还不会导入Excel文件中的数据?本文就介绍了Matlab导入Excel文件中的数据的操作内容,想要学习的朋友可以看一看下文哦,相信对大家会有所帮助的. 直接点击鼠标操作导入数据 打 ...

  7. 杰微主板bios设置u盘启动详细教程

    杰微是大陆土生土长的主板品牌,凭借高性价比占有一定市场,那么如果U盘装系统的话,杰微主板如何进bios设置U盘启动呢?今天小编就为大家介绍杰微主板bios设置u盘启动详细教程,有需要的朋友不妨看看吧. ...

  8. GPS :NEMA数据解析

    GPS 0183协议GGA.GLL.GSA.GSV.RMC.VTG解释 + 数据解析 每个时区跨15°经度.以0°经线为界向东向西各划出7.5°经度,作为0时区.即0时区的经度范围是7.5°W--7. ...

  9. NBIOT模块bc20与GPS模块AT1218数据上阿里云物联网平台

    本文章主要实现将GPS模块收集到的经纬度信息上传到阿里云物联网云平台上中,使用NBIOT技术,其通讯模块是移远公司推出的BC20模块,GPS模块是正点原子推出的1218系列模块.         (N ...

最新文章

  1. iOS 隐藏顶部状态栏方式和更改颜色
  2. [Jsp] JSP和Servlet页面间的参数的传递和接收
  3. 【福利】囚犯抓绿豆,谁生谁死?
  4. linux划分5t硬盘,关于磁盘分区(以linux系统为例)
  5. javascript window.open
  6. 在终端设备上实现语音识别:ARM开源了TensorFlow预训练模型
  7. Hive metastore整体代码分析及详解
  8. HDU1166-ZKW树
  9. 嫌我们理科生不够浪漫?你有一份音乐数学入门指南待查收
  10. tf.train.Saver()
  11. STM32F429i disco 体验
  12. 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理
  13. matlab如何绘制相关系数热力图,相关系数矩阵与热力图heatmap
  14. K8s Kubectl基础命令的使用、滚动更新、以及回滚操作
  15. idea分支合并到主干
  16. 正则表达式与grep
  17. 键盘连接在计算机的,技巧:如何在计算机键盘上输入连字符和破折号?
  18. BigBrother的大数据之旅 Day 3 Linux(3)
  19. 安装python环境 0x80070001-函数不正确问题解决
  20. 个人简历——各类奖学金、各种称号、各种职位中英文对照:

热门文章

  1. Who Am I ?
  2. 战神Z7-KP7GC安装win10+ubuntu18.04双系统及深度学习环境配置
  3. 电影知识图谱的智能问答系统在本机跑通实验及遇到问题的解决
  4. DAM2+加密狗克隆方法
  5. xlsxwriter在表格中插入图片
  6. 商城秒杀系统总结(Java)
  7. IT程序员接私活平台
  8. android 通知栏多少钱,Android我还能够相信你多少系列文章三之通知栏
  9. xctf攻防世界 CRYPTO高手进阶区 shanghai
  10. 老毛桃制作U盘启动盘