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

相关文章

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指