GPS NMEA-0183 协议的校验和 计算方法 和 源码

NMEA-0183 协议的校验和 计算方法 :
就是 将 “$” 和 “*” 之间的字符ASCII值 进行 异或 运算 得到的数值 以16进制格式 体现 的字符串

例如:"$GNGLL,2239.37849,N,11400.75600,E,123254.00,A,A*7F"。 校验和 “7F” 字符串 就是 整数0x7F

#include <stdio.h>

/**
 *******************************************************************************
 * @brief   十六进制格式字符串 转 十六进制格式整数 函数
 * @param   [in] *str 字符串指针
 * @param   [in] size 字符串个数
 * @param   [in] *result 转换结果缓存指针 
 * @return  0--转换成功; 1--数据不在范围内;
 * @note    
 *******************************************************************************
 */
unsigned char AsciiToHex(char *str, unsigned char size, unsigned char *result)
{
	unsigned char temp;

	for(*result = 0; size; size--, str++)
	{
		if(('9' >= *str) && (*str >='0') ) temp = *str - '0';
		else if(('F' >= *str) && (*str >='A') ) temp = *str - 'A' + 10;
		else if(('f' >= *str) && (*str >='a') ) temp = *str - 'a' + 10;
		else return 1; //数据不在范围内
		*result |= temp<<((size-1)*4);
	}
	
	return 0; //转换成功
}

/**
 *******************************************************************************
 * @brief   NMEA 数据帧校验 函数
 * @param   [in] *buf 校验数据帧指针
 * @return  0--校验成功; 1--校验失败; 2--校验数据超长; 3--校验和错误 不是校验和 
 * @note    
 *******************************************************************************
 */
unsigned char NMEA_CheckSum(char *buf)
{
	unsigned char i;
	unsigned char chk, result;

	for(chk=buf[1], i=2; (buf[i]!='*')&&(i<255); i++)
	{
		chk ^= buf[i];
	}
	
	if( AsciiToHex(&buf[i+1], 2, &result) ) return 3; //校验和错误 不是校验和 
    if(i>=255) return 2; //校验数据超长
	if(chk != result) return 1; //校验失败
	
	return 0; //校验成功
}

/**
 *******************************************************************************
 * @brief   主 函数
 * @param   [in] None
 * @return  None 
 * @note    
 *******************************************************************************
 */
int main(void)
{
	char a[] = "$GNGLL,2239.37849,N,11400.75600,E,123254.00,A,A*7F";
	unsigned char pos;
	unsigned char* dx;

	if( !NMEA_CheckSum(a) )printf("校验OK \n");
}

运行结果:
在这里插入图片描述

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
北斗NMEA-0183协议是一种用于全球卫星导航系统北斗(BeiDou)接收器与其他设备进行通信的标准协议NMEA-0183是一种文本协议,其定义了一组特定的数据格式和语法规则,用于传输和解析北斗接收器返回的定位和导航数据。 北斗NMEA-0183协议的数据格式包括一条条的数据语句,每条语句都以"$"符号开头,以回车和换行符作为结束符。其中最常见的语句类型包括GGA(位置信息)、RMC(推荐最小数据集)和VTG(地面速度信息),它们可以提供位置、时间、速度和航向等关键信息。 使用北斗NMEA-0183协议,可以实现北斗接收器与其他设备(如导航仪、计算机等)之间的数据交换和通信。设备可以通过串口连接,并通过读取和解析接收器返回的NMEA语句,获取定位和导航等相关数据。 使用北斗NMEA-0183协议的好处是它的通用性和易于实现。该协议可以方便地被不同设备和软件应用所支持,使得各种设备之间的数据交换和集成成为可能。此外,由于NMEA-0183使用文本格式,因此人们可以轻松阅读和理解这些语句,便于调试和故障排除。 总之,北斗NMEA-0183协议是一种用于北斗接收器与其他设备进行通信的标准协议。它定义了一组特定的数据格式和语法规则,使得不同设备可以方便地进行数据交换和集成。这为北斗系统的应用和开发提供了便利和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值