u-blox-M8N GNSS定位模块调试

2024-01-15 01:10
文章标签 模块 调试 定位 gnss blox m8n

本文主要是介绍u-blox-M8N GNSS定位模块调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RMC消息格式

在这里插入图片描述
在这里插入图片描述
串口接收到消息如下:
在这里插入图片描述

消息解析代码

根据RMC消息格式可以解析多种数据(时间、经纬度、海拔)

#include "gps.h"char HMSTime[10];   //时间,小时分秒
char latitude[12];  //纬度
char N_S[1]; //
char longitude[12]; //经度
char E_W[1]; //
char speed[10]; //速度,相当不准
char DMYTime[10];
char height[12];      //高度,相当不准//使用GPGGA信息格式
void GpsBufferParse(uint8_t gpsDataRx[150])
{char *subString;char *subStringNext;int i = 0;for(i = 0; i <= 9; i ++){if(i == 0){if((subString = strstr(gpsDataRx, ",")) == NULL) ;//无位置信息返回}else{subString ++;if((subStringNext = strstr(subString, ",")) != NULL){switch(i){//$GNRMC,064726.00,A,3150.33878,N,11707.97461,E,0.726,,021221,,,A*63//RMC位置信息头case 0: break;//时间,小时分秒,hhmmss.sscase 1: memcpy(HMSTime, subString, subStringNext - subString);break;//状态位case 2: break;//纬度case 3: memcpy(latitude, subString, subStringNext - subString);break;//case 4: memcpy(N_S, subString, subStringNext - subString);break;//经度case 5: memcpy(longitude, subString, subStringNext - subString);break;//case 6: memcpy(E_W, subString, subStringNext - subString);break;//速度case 7: memcpy(speed, subString, subStringNext - subString);break;//角速度case 8:break;//时间,日月年,ddmmyycase 9:memcpy(DMYTime, subString, subStringNext - subString);break;//case 10:break;default: break;}//match switch		subString = subStringNext;}//match if}//match else}//match for
}

usart.c中对串口进行配置及中断函数:

void UART6_Init(u32 bound)
{	//UART 初始化设置UART6_Handler.Instance=USART6;					    //USART1UART6_Handler.Init.BaudRate=bound;				    //波特率UART6_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式UART6_Handler.Init.StopBits=UART_STOPBITS_1;	    //一个停止位UART6_Handler.Init.Parity=UART_PARITY_NONE;		    //无奇偶校验位UART6_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控UART6_Handler.Init.Mode=UART_MODE_TX_RX;		    //收发模式UART6_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;UART6_Handler.Init.OverSampling = UART_OVERSAMPLING_16;if(HAL_UART_Init(&UART6_Handler) != HAL_OK)Error_Handler();					    //HAL_UART_Init()会使能UART1HAL_UART_Receive_IT(&UART6_Handler, (uint8_t *)uartBuffer, RXBUFFERSIZE);
}
/**USART6 GPIO Configuration    PC6     ------> USART6_TXPC7     ------> USART6_RX */if(huart->Instance==USART6)//如果是串口1,进行串口1 MSP初始化{__HAL_RCC_GPIOC_CLK_ENABLE();			//使能GPIOA时钟__HAL_RCC_USART6_CLK_ENABLE();			//使能USART2时钟GPIO_Initure.Pin=GPIO_PIN_6 | GPIO_PIN_7;			//PD8\9GPIO_Initure.Mode=GPIO_MODE_AF_PP;		//复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP;			//上拉GPIO_Initure.Speed=GPIO_SPEED_FAST;		//高速GPIO_Initure.Alternate=GPIO_AF8_USART6;	//复用为USART2HAL_GPIO_Init(GPIOC,&GPIO_Initure);	   	//初始化PD9#if EN_USART6_RXHAL_NVIC_EnableIRQ(USART6_IRQn);				//使能USART1中断通道HAL_NVIC_SetPriority(USART6_IRQn,2,0);			//抢占优先级3,子优先级3#endif	}
/*+----------------GPS中断函数------------------+*/uint16_t gpsPoint=0;
uint8_t GPS_RX_BUF[150];     //接收缓冲,最大USART_REC_LEN个字节.
uint8_t gpsDataRx[150]; //传递至函数GpsBufferParsevoid USART6_IRQHandler(void)
{uint8_t res;uint32_t tmp1 = 0U, tmp2 = 0U;tmp1 = __HAL_UART_GET_FLAG(&UART6_Handler, UART_FLAG_RXNE);tmp2 = __HAL_UART_GET_IT_SOURCE(&UART6_Handler, UART_IT_RXNE);if (tmp1 != RESET && tmp2 != RESET){res = (uint8_t)(UART6_Handler.Instance -> DR & (uint8_t)0x00FFU);if(res == '$'){gpsPoint = 0;}GPS_RX_BUF[gpsPoint] = res;gpsPoint ++;if(gpsPoint > 150){gpsPoint = 0;}if(GPS_RX_BUF[0] == '$' && GPS_RX_BUF[4] == 'M' && GPS_RX_BUF[5] == 'C'){if(res == '\n'){comFuncClass.COM_UART_CLASS.cmd1_rxdone = 3; //GPS信息接收完成标志位memset(gpsDataRx, 0, 150); //清空传递变量memcpy(gpsDataRx, GPS_RX_BUF, gpsPoint); 	//保存数据memset(GPS_RX_BUF, 0, 150);      //清空临时变量}}}HAL_UART_IRQHandler(&UART6_Handler);
}

模块主板很小,带电池,断网仍可获取时间。但天线太大,要学学大疆家的天线模块,FPV上的特别紧凑。

这篇关于u-blox-M8N GNSS定位模块调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607143

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(