最近调gps接收有用数据,只需要接收“$GPGGA,024016.00,3900.91123,N,11226.67534,E,1,06,1.62,854.2,M,-20.2,M,,*7E ”即可,我的思路是监测“GGA,"然后数组存储直到监测到*结束,可是发十几次也就有一次能收到,很不稳定,各位给看看程序出了什么问题。一下是发送的数据包。
$GPVTG,33.18,T,,M,0.390,N,0.723,K,A*08
$GPGGA,024016.00,3900.91123,N,11226.67534,E,1,06,1.62,854.2,M,-20.2,M,,*7E
$GPGSA,A,3,29,04,05,08,10,15,,,,,,,3.21,1.62,2.78*0D
$GPGSV,3,1,11,02,46,111,25,04,13,117,27,05,65,025,37,07,09,048,12*7D
$GPGSV,3,2,11,08,15,081,28,10,14,064,32,15,30,201,36,21,05,303,*77
$GPGSV,3,3,11,25,00,245,,26,62,159,25,29,47,289,20*4E
$GPGLL,3900.91123,N,11226.67534,E,024016.00,A,A*6E
程序
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==SET ) //监测接收是否挂起
{
if(USART_ReceiveData(USART1)=='G')
{ USART_ClearFlag(USART1, USART_FLAG_RXNE); //清除挂起
t=0xffff; GPIO_SetBits(GPIOD,GPIO_Pin_8);
while((USART_GetFlagStatus(USART1, USART_FLAG_RXNE)!=SET )&&t)t--;
{
if(USART_ReceiveData(USART1)=='G')
{ USART_ClearFlag(USART1, USART_FLAG_RXNE);
t=0xffff; GPIO_SetBits(GPIOD,GPIO_Pin_9);
while((USART_GetFlagStatus(USART1, USART_FLAG_RXNE)!=SET )&&t)t--;
{
if(USART_ReceiveData(USART1)=='A')
{ USART_ClearFlag(USART1, USART_FLAG_RXNE);
t=0xffff; GPIO_SetBits(GPIOD,GPIO_Pin_10);
while((USART_GetFlagStatus(USART1, USART_FLAG_RXNE)!=SET )&&t)t--;
{
if(USART_ReceiveData(USART1)==',')
{ USART_ClearFlag(USART1, USART_FLAG_RXNE);
for(i=0;menu0!='*';i++)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)!=SET );
menu0 = USART_ReceiveData(USART1); USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
USART_SendChar('a');
}
}
}
}
}
}
}
}
|