Ublox系列接收机主要可以通过两种方式进行配置,一种是通过U-center官方配置软件,另一种是通过发送命令。其中,U-center本质也是通过图形化配置界面生成相关命令并发送,具体使用方法可见专题其它文章。本文主要介绍Ublox发送命令配置方式。
1 命令格式
图1 Ublox数据格式
Ublox数据格式如图1所示,支持以HEX或ASCII形式进行发送。
2 Checksum校验和计算方式
2.1 校验和计算范围
计算范围从CLASS开始到PAYLOAD,最后两字节为校验和。
2.2 校验和计算方法
CK_A = 0, CK_B = 0;
For(i=0;i<N;i++)
{
CK_A = CK_A + buffer[i]
CK_B = CK_B + CK_A
}
其中,buffer为校验和计算范围组成的数组。注意,此处CK_B非2*CK_A,而是有一个持续累加的过程。
3 示例解读
3.1 ASCII格式命令校验和计算
图2 设置NMEA输出格式
以设置NMEA输出格式为例
$PUBX,40,GLL,1,0,0,0,0,0*5D
其中,校验和的计算范围为$与*之间,但需要注意的是,发送ASCII数据格式,校验和的计算方法采用各字节异或,最终得到5D的校验和结果。可以在线搜索异或校验和在线计算,如下图所示,“,”也需要添加在计算范围内。
图3 BBC校验和在线计算
3.2 HEX格式命令校验和计算
图4 设置数据输出频率
以设置接收机输出数据频率5Hz为例,校验和计算范围从Class到Payload,即从0x06~0x01。
0xB5,0x62,0x06,0x08,0x06,0x00,0xC8,0x00,0x01,0x00,0x01,0x00,0xDE,0x6A
采用2.2小节的校验和计算方式,可得CK_A = 0xDE,CK_B = 0x6A。上述命令中0xC8为设置周期为200ms即5Hz,其它字段含义可见Ublox M8数据手册详细说明。
4 部分常用命令
char sendme[] = // GGA:ON, GLL,GSA,GSV,RMC,ZDA:OFF UART1
"$PUBX,40,GGA,0,1,0,0,0,0*5B\r\n"
"$PUBX,40,GLL,0,0,0,0,0,0*5C\r\n"
"$PUBX,40,GSA,0,0,0,0,0,0*4E\r\n"
"$PUBX,40,GSV,0,0,0,0,0,0*59\r\n"
"$PUBX,40,RMC,0,0,0,0,0,0*47\r\n"
"$PUBX,40,ZDA,0,0,0,0,0,0*44\r\n"
"$PUBX,40,VTG,0,0,0,0,0,0*5E\r\n"; //调节输出信号格式
uint8_t ubx_cfg_rate_5hz[] = { // 5 Hz(200 毫秒)
0xB5,0x62,0x06,0x08,0x06,0x00,
0xC8,0x00,0x01,0x00,0x01,0x00,
0xDE,0x6A}; //调节速率
STM32HAL库串口发送命令
HAL_UART_Transmit(&huart4, (uint8_t*)sendme, strlen(sendme), 200); // 配置输出数据格式
HAL_UART_Transmit(&huart4, ubx_cfg_rate_5hz, sizeof(ubx_cfg_rate_5hz), 250); // 配置频率5HZ