038——基于STM32和I.MX6uLL实现uart控制GPS(失败者总结)

目录

1、GPS模块简介

2、GPS数据格式

3、方案梳理


1、GPS模块简介

        全球定位系统(Global Positioning System, GPS)是一种以空中卫星为基础的高精度无线电导航的定位系统,它在全球任何地方以及近地空间都能够提供准确的地理位置、车行速度及精确的时间信息。 GPS 主要由三大组成部分:空间部分、地面监控部分和用户设备部分。 GPS 系统具有高精度、全天候、用广泛等特点。
        太空卫星部分由多颗卫星组成,分成多个轨道,绕行地球一周约 12 小时。每个卫星均持续发射载有卫星轨道数据及时间的无线电波,提供地球上的各种接收机来应用。
        地面管制部分,这是为了追踪及控制太空卫星运行所设置的地面管制站,主要工作为负责修正与维护每个卫星能够正常运转的各项参数数据,以确保每个卫星都能够提供正确的讯息给使用者接收机来接收使用者接收机(即用户设备),追踪所有的 GPS 卫星,并实时的计算出接收机所在位置的坐标、移动速度及时间。我们日常接触到的是用户设备部分,这里使用到的 GPS 模块即为用户设备接收机部分。

        GPS 模块与外部控制器的通讯接口有多种方式,这里我们使用串口进行通讯,波特率为 9600bps,1bit 停止位,无校验位,无流控,默认每秒输出一次标准格式数据。

2、GPS数据格式

        GPS 使用多种标准数据格式,目前最通用的 GNSS 格式是 NMEA0183 格式。NMEA0183 是最终定位格式,即将二进制定位格式转为统一标准定位格式,与卫星类型无关。这是一套定义接收机输出的标准信息,有几种不同的格式,每种都是独立相关的 ASCII 格式,逗点隔开数据流,数据流长度从 30-100 字符不等,通常以每秒间隔持续输出。
        NVMEA0183 格式主要针对民用定位导航,与专业 RTCM2.3/3.0 和 CMR+的GNSS 数据格式不同。通过 NMEA0183 格式,可以实现 GNSS 接收机与 PC 或 PDA之间的数据交换,可以通过 USB 和 COM 口等通用数据接口进行数据传输,其兼容性高,数据传输稳定。这里我们使用串口进行是通讯,通信框图如下图所示。

图片去看韦老师的图,我这就不放了,这东西科普作用不是今天的重点。

        我们使用串口接收数据,收到的数据包含: $GPGGA( GPS 定位数据)、 $GPGLL
(地理定位信息)、 $GPGSA(当前卫星信息)、 $GPGSV(可见卫星状态信息)、$GPRMC(推荐最小定位信息)、 $GPVTG(地面速度信息)。这里我们只分析$GPGGA (Global Positioning System Fix Data)即可,它包含了 GPS 定位经纬度、质量因子、 HDOP、高程、参考站号等字段。其标准格式如下

$GPGGA, <1>, <2>, <3>, <4>, <5>, <6>, <7>, <8>, <9>, M, <10>, M, <11>, <12>*hh<CR><LF>


$XXGGA 语句各字段的含义和取值范围各字段的含义和取值范围见下表所示,
XX 取值有:
◼ GPGGA:单 GPS
◼ BDGGA:单北斗
◼ GLGGA:单 GLONASS
◼ GNGGA:多星联合定位

3、方案梳理

        为什么会有这个东西,因为GPS只能在户外用。喵的我没法演示所以我想个办法把他用上咋用呢就是看图

        这样我把32拿到户外然后通过zigbee发给6ull就完美解决了。有人说为啥不直接把6ull拿户外呢。没法供电呀DC供电8~12V的。我不想在搭进去个供电模块。

代码我啪的一下就写完了哈哈测试一下

斯乱码。

拿外面试试

据说数据格式应该是这样滴

但是我们全是FF和99就离谱

现在是直接转发的我修改下程序试试

经过我的不懈努力,不调了气死了

直接怼串口拿到室外都不好使

不过32的代码还是给大家做个参考吧

不是代码的问题是硬件问题。

/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "bsp/usart/bsp_debug_usart.h"
#include "bsp/usart/bsp_usartx.h"
#include "bsp/systick/bsp_SysTick.h"
#include "bsp/i2c/bsp_i2c_OLED.h"
#include "bsp/led/bsp_led.h"
#include <stdlib.h>
#include <string.h>/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
/* 私有变量 ------------------------------------------------------------------*/
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
/* 函数体 --------------------------------------------------------------------*/
/* 扩展变量 ------------------------------------------------------------------*/uint8_t Rxflag=0;
char ucTemp;
uint16_t usRxCount;
char ucaRxBuf[256];u32 send_data()
{char tmp[10];char *time, *lat, *ns, *lng, *ew;float fLat, fLng;char Lat[100];char Lng[100];if (ucaRxBuf[0] != '$'){printf("\r\n  $ >>> %s\r\n",ucaRxBuf);usRxCount = 0;memset(ucaRxBuf,0,256);return 1;}else if (strncmp(ucaRxBuf+3, "GGA", 3) != 0){printf("\r\n  GGA >>> %s\r\n",ucaRxBuf);usRxCount = 0;memset(ucaRxBuf,0,256);return 1;}else if (strstr(ucaRxBuf, ",,,,,")){printf("Place the GPS to open area\r\n");printf("\r\n  ,,,,,, >>> %s\r\n",ucaRxBuf);usRxCount = 0;memset(ucaRxBuf,0,256);return 1;}else {printf("raw data: %s\r\n", ucaRxBuf);
//		sscanf(ucaRxBuf, "%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]", tmp, time, lat, ns, lng, ew);
//	    printf("Time : %s\n", time);
//		printf("ns   : %s\n", ns);
//		printf("ew   : %s\n", ew);
//		printf("Lat  : %s\n", Lat);
//		printf("Lng  : %s\n", Lng);//		/* 纬度格式: ddmm.mmmm */
//		sscanf(Lat+2, "%f", &fLat);
//		fLat = fLat / 60;
//		fLat += (Lat[0] - '0')*10 + (Lat[1] - '0');//		/* 经度格式: dddmm.mmmm */
//		sscanf(Lng+3, "%f", &fLng);
//		fLng = fLng / 60;
//		fLng += (Lng[0] - '0')*100 + (Lng[1] - '0')*10 + (Lng[2] - '0');
//		printf("Lng,Lat: %.06f,%.06f\n", fLng, fLat);return 0;}
}void read_data()
{int i = 0;int start = 0;while (1){if(Rxflag){if (ucTemp == '$')start = 1;if (start){ucaRxBuf[i++] = ucTemp;}if(i == 255){i =0;			printf("%s", ucaRxBuf);}/* 遇到换行字符,认为接收到一个命令 */
//			if (ucTemp == '\n' || ucTemp == '\r')	/* 换行字符 */
//			{
//				send_data();
//				usRxCount = 0;
//				//memset(ucaRxBuf,0,256);
//			}Rxflag=0;}}
}/*** 函数功能: 主函数.* 输入参数: 无* 返 回 值: 无* 说    明: 无*/
int main(void)
{   /* 简单的通信协议,遇到回车换行符认为1个命令帧 */  /* 调试串口初始化配置,115200-N-8-1.使能串口发送和接受 */DEBUG_USART_Init(); USARTx_Init();/* 初始化系统滴答定时器 */  SysTick_Init();OLED_Init();LED_GPIO_Init();/* 无限循环 */while (1){/** * 接收串口的数据,分析并处理 * 可以将此段代码封装为一个函数,在主程序其它流程调用*/read_data();}
}/******************************************************************************/
/*                 STM32F10x Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f10x_xx.s).                                            */
/******************************************************************************/
void USARTx_IRQHANDLER(void)
{if(USART_GetITStatus(USARTx, USART_IT_RXNE) != RESET){ 	Rxflag=1;		ucTemp = USART_ReceiveData(USARTx);} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邦注科技 温控箱对企业的重要性

注塑加工是将加热的熔融塑料注入模具中形成所需产品的工艺过程。良好的注塑加工工艺需要控制好许多参数&#xff0c;其中最重要的因素之一就是模具的温度。模具温度的不稳定会导致产品尺寸大小、表面缺陷等方面的问题&#xff0c;甚至会导致生产不良品&#xff0c;加大生产成本…

【webrtc】MessageHandler 5: 基于线程的消息处理:以PeerConnection信令线程为例

peerconn的信令是通过post 消息到自己的信令线程消息来处理的PeerConnectionMessageHandler 是具体的处理器G:\CDN\rtcCli\m98\src\pc\peer_connection_message_handler.hMachinery for handling messages posted to oneself PeerConnectionMessageHandler 明确服务于 signalin…

数据仓库和数据仓库分层

一、数据仓库概念 数据仓库(Data Warehouse)&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。 为需要业务智能的企业&#…

CGAL 点云数据生成DSM、DTM、等高线和数据分类

原文链接 CGAL 点云数据生成DSM、DTM、等高线和数据分类 - 知乎 在GIS应用软件中使用的许多传感器(如激光雷达)都会产生密集的点云。这类应用软件通常利用更高级的数据结构&#xff1a;如&#xff1a;不规则三角格网 (TIN)是生成数字高程模型 (DEM) 的基础&#xff0c;也可以利…

2024深圳杯数学建模竞赛A题(东三省数学建模竞赛A题):建立火箭残骸音爆多源定位模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛A题&#xff08;东三省数学建模竞赛A题&#xff0…

PyVista 3D数据可视化 Python 库 简介 含源码

Pyvista是一个用于科学可视化和分析的Python库 &#xff1b;我认为它适合做一些网格数据的处理&#xff1b; 它封装了VTK&#xff08;Visualization Toolkit&#xff09;之上&#xff0c;提供了一些高级接口&#xff0c; 3D数据可视化变得更加简单和易用。 1.安装 pyvista&…

开发一个语音聊天社交app小程序H5需要多少钱?

社交&#xff0c;即时通讯APP系统。如何开发一个社交App||开发一个即时通信应用是一项复杂而充满挑战的任务&#xff0c;需要考虑多个技术、开发时间和功能方面的因素。以下是一个概要&#xff0c;描述了从技术、开发时间和功能角度如何开发这样的应用&#xff1a; 1. 技术要点…

70.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-整理与角色数据更新有关的数据

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

基于python的舞蹈经验分享交流网站django+vue

1.运行环境&#xff1a;python3.7/python3.8。 2.IDE环境&#xff1a;pycharmmysql5.7/8.0; 3.数据库工具&#xff1a;Navicat11 4.硬件环境&#xff1a;windows11/10 8G内存以上 5.数据库&#xff1a;MySql 5.7/8.0版本&#xff1b; 运行成功后&#xff0c;在浏览器中输入&am…

新唐的nuc980/nuc972的开发3-官方源码编译

上一节中bsp已经安装&#xff0c;交叉环境已经搭建&#xff0c;理应就可以正常的编写上层的应用程序啦。 但是系统启动次序是- uboot-> kernel内核 ->挂载文件系统 ->上层应用程序 下面是bsp安装后的文件&#xff1a; 因此本章节&#xff0c;将讲解 uboot-> kerne…

刷代码随想录有感(51):从中序和后序前序和中序构造二叉树

中后题干&#xff1a; 第一步&#xff1a;如果数组大小为零的话&#xff0c;说明是空节点了。 第二步&#xff1a;如果不为空&#xff0c;那么取后序数组最后一个元素作为节点元素。 第三步&#xff1a;找到后序数组最后一个元素在中序数组的位置&#xff0c;作为切割点 第四…

Large Language Models for Test-Free Fault Localization

基本信息 这是24年2月发表在ICSE 24会议&#xff08;CCF A&#xff09;的一篇文章&#xff0c;作者团队来自美国卡内基梅隆大学。 博客创建者 武松 作者 Aidan Z.H. Yang&#xff0c;Claire Le Goues&#xff0c;Ruben Martins&#xff0c;Vincent J. Hellendoorn 标签 …

启明云端2.4寸屏+ESP32-S3+小型智能调速电动家用除草机案例 触控三档调速,能显示电压故障码

今天给大家分享个启明云端2.4寸屏ESP32-S3小型智能调速电动家用除草机案例&#xff0c;国外有草坪文化&#xff0c;这个机器能智能触控三档调速&#xff0c;带屏能显示电压故障码&#xff0c;数显档位&#xff08;3档最大&#xff09;&#xff0c;触控屏&#xff0c;长按3秒就能…

使用 langchain 连接 通义千问 并用 fastApi 开放接口

安装 langchain 方法 https://www.cnblogs.com/hailexuexi/p/18087602 安装 fastapi fastapi 是一个用于构建高性能 Web 应用的 Python 框架&#xff0c;它提供了简洁、高效的 API 开发体验。 pip install fastapi 安装 uvicorn uvicorn 是一个用于运行 FastAPI 应用的服务…

C语言学习/复习37--进阶总结与题目练习

一、题目练习 1. 循环与无符号char的取值范围 注意事项&#xff1a;0~255 -128~127 char类的取值范围看做循环图 2.ASCLL值与循环 3.按位操作与bit位 4 .结构体的大小 注意事项&#xff1a;结构体嵌套结构体的大小计算 5.循环条件 6.数据类型与原反补码 7.指针访问字符串数…

商城系统推荐,如何找到一款可靠的商城系统?

如今&#xff0c;电商系统成为商家必不可少的营销工具&#xff0c;其系统在金融、外贸、零售等行业领域应用广泛。那么&#xff0c;作为初试水的企业又没有挑选电商系统的经验&#xff0c;如何找到拥有全功能、全渠道、可靠的网上商城系统呢&#xff1f; 我们可以先按电商系统…

【Vue 2.x】学习vue之三路由

文章目录 Vue三路由第十章1、vue中的路由vue的应用分为a、多页面应用b、单页面应用 2、路由的基本应用1、基础2、使用3、加载 3、vue组件的分类1、普通组件2、路由组件 4、路由的嵌套5、路由传递Query参数1、拼接参数传递2、路由传递对象 6、简化路由1、命名路由 7、parms传递参…

力扣82-链表、迭代 的思考

题目解读 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 两个示范 思考 返回链表&#xff1a;返回更新链表后的头结点&#xff1b; 更新链表&#xff1a;判断重复元素&#xff0c;改变指针…

Day56|动态规划part16:583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

583. 两个字符串的删除操作 我的方法&#xff0c;先求出两者的最长公共子序列长度&#xff0c;再用两个字符串的长度相减就是两者分别要做操作的步数&#xff1a; class Solution {public int minDistance(String word1, String word2) {int[][] dp new int[word1.length() …

模型剪枝-Network Slimming算法分析

代码见文末 论文地址&#xff1a;Learning Efficient Convolutional Networks through Network Slimming ICCV 2017 Open Access Repository 1.概述 由于边缘设备的限制&#xff0c;在模型的部署中经常受到模型大小、运行内存、计算量的限制。之前的方法要么只能解决其中一个…