U-Blox芯片GPS-模块的UBX协议解析与配置_第1页
U-Blox芯片GPS-模块的UBX协议解析与配置_第2页
U-Blox芯片GPS-模块的UBX协议解析与配置_第3页
U-Blox芯片GPS-模块的UBX协议解析与配置_第4页
U-Blox芯片GPS-模块的UBX协议解析与配置_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Blox芯片GPS模块的UBX协议解析与配置——写代码的TobemU-Blox支持NMEA、UBX、RTCM三种协议,程序中使用的是UBX协议,其协议格式如下图所示:需要注意的是,对于数据类型大于一个字节的数据存储,其使用的是小端模式,故进行数据读写时,先低字节,后高字节。协议格式后两个字节的校验码按如下方式进行求取:GPS进行使用前,需进行初始化配置,主要涉及串口通信配置,将设置写入eeprom中,GPS的更新频率、要进行转换读取的数据包等:switch(packet_count){case1:{//配置GPSUBX协议输出,波特率为38400packet_count++;}break;case2:{//命令存储在eeprom中packet_count++;}break;case3:{//配置gps更新频率为4hz,导航更新为4hz,采用utc时间packet_count++;}break;case4:{UBX_CFG_MSG_Encode(NAV_POSLLH);//配置所需数据包packet_count++;}break;case5:{UBX_CFG_MSG_Encode(NAV_STATUS);//配置所需数据包GPS_Encode_Index=0;packet_count++;}break;case6:{UBX_CFG_MSG_Encode(NAV_SOL);//配置所需数据包packet_count++;}break;case7:{UBX_CFG_MSG_Encode(NAV_VELNED);//配置所需数据包packet_count++;}break;}GPS的配置以命令形式进行,主要参考手册中的CFG的相关指令。下面以配置GPSUBX协议输出为例,进行GPS配置命令的说明://通信协议配置voidUBX_CFG_PRT_Encode(u16Protocol_out,u32Baudrate)//只配置输出模式和波特率(占四个字节){write_two_byte_to_GPS_Encode_Buffer(0X0001);//目标串口1write_two_byte_to_GPS_Encode_Buffer(0X0000);write_two_byte_to_GPS_Encode_Buffer(0X08D0);write_two_byte_to_GPS_Encode_Buffer(0X0000);//配置波特率,先低字节,后高字节write_byte_to_GPS_Encode_Buffer(Baudrate%256);write_byte_to_GPS_Encode_Buffer((Baudrate%(0XFFFF+1))/256);write_byte_to_GPS_Encode_Buffer((Baudrate%(0XFFFFFF+1))/(0XFFFF+1));write_byte_to_GPS_Encode_Buffer(Baudrate/(0XFFFFFF+1));write_two_byte_to_GPS_Encode_Buffer(0X0001);//协议输入默认为UBXwrite_two_byte_to_GPS_Encode_Buffer(Protocol_out);//输出协议格式write_two_byte_to_GPS_Encode_Buffer(0X0000);write_two_byte_to_GPS_Encode_Buffer(0X0000);}前面说到数据类型大于一字节的数据,其按小端模式进行存储,因此先写低字节,后写高字节://写2字节到编码缓存voidwrite_two_byte_to_GPS_Encode_Buffer(u16value){GPS_Encode_Buffer[GPS_Encode_Index++]=value;//先写低字节GPS_Encode_Buffer[GPS_Encode_Index++]=(value>>8);//后写高字节}GPS的频率配置如下,根据手册,导航频率参数设置似乎不对:UBX_CFG_RATE_Encode(250,250,Time_source_UTC);//gps测量为4hz,导航为4hz,采用utc时间程序中使用串口7中断进行GPS数据的接收,一旦还接收到数据,就将定时器7的计数清零,定时器7设置为100ms中断,假如100ms内没有数据接收到,且接收缓冲区的首地址内容非空,则认为接收完成。涉及的两个中断分别如下:串口7中断:voidUART7_IRQHandler(void){staticu16TX_Send_Count=0;u8USART7_Receive_date;if(UART7->SR&(1<<5))//读寄存器不为空{USART7_Receive_date=UART7->DR;if((GPS_UART7_RX_STA&0X8000)==0) //条件成立说明一个数据包尚未接收完成,如果不成立,说明接收完一批数据包,尚未处理 { if(GPS_UART7_RX_STA<GPS_DATE_LEN-1){TIM_SetCounter(TIM7,0);//清空计数器if(GPS_UART7_RX_STA==0)//条件成立说明是数据包的第一个数据,则开启定时器{TIM_Cmd(TIM7,ENABLE);//重启定时器接收新的数据包}GPS_Buffer[GPS_UART7_RX_STA++]=USART7_Receive_date;}else{GPS_UART7_RX_STA=0;//接收数据大于缓存区长度,则丢弃此包数据重新接收}}}if(UART7->SR&(1<<7))//发送中断标志{USART_ClearFlag(UART7,USART_FLAG_TC);if((GPS_UART7_TX_STA&0x8000)!=0)//条件成立说明发送数据已完成编码,可以开始发送数据{USART_SendData(EVAL_COM7,UART7_Send_Buffer[TX_Send_Count++]);}if(TX_Send_Count==UART7_TX_DATA_LEN)//条件成立说明一个完整数据包发送完成{USART_ITConfig(EVAL_COM7,USART_IT_TXE,DISABLE);//数据发送完成后失能发送中断TX_Send_Count=0;GPS_UART7_TX_STA=0;//数据包发送完成标志置0}} if(USART_GetFlagStatus(UART7,USART_FLAG_ORE)==1)//溢出判断,并清溢出标志{USART_ReceiveData(UART7);}}定时器7中断:voidTIM7_IRQHandler(void)//100ms定时中断{ if(TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET)//进入中断条件成立{ if(GPS_Buffer[0]!=0){GPS_UART7_RX_STA|=0X8000;//连续100ms没有接收到数据,说明一次数据包传输完成} USART_ITConfig(EVAL_COM7,USART_IT_RXNE,DISABLE);//需要关闭中断,待处理发送完成后再开中断接收数据TIM_ClearITPendingBit(TIM7,TIM_IT_Update);TIM_Cmd(TIM7,DISABLE);//关闭中断gps_update_time=Time_micros();} }然后对接收到的数据进行轮询,当找到协议的帧头匹配时,则对数据进行拆解。for(index=0;index<sizeof(GPS_Buffer);index++)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论