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

相关文章

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

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

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

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