我想在那个GPS例程的基础上做了点改动,想实现把GPS解析的数据用SIM900A进行转发,主循环的代码如下
while(1)
{
if(USART_RX_STA&0X8000) //接收到一次数据了
{
rxlen=USART_RX_STA&0X3FFF; //得到数据长度
for(i=0;i<rxlen;i++)USART1_BUF=USART_RX_BUF;
USART_RX_STA=0;
USART1_BUF=0; //自动添加结束符
GPS_Analysis(&gpsx,(u8*)USART1_BUF); //分析字符串
Gps_Msg_Show(); //显示信息
}
sprintf((char*)p1,"Longitude:%.5f %1c Latitude:%.5f %1c\r\nUTC Date:%04d/%02d/%02d\r\nUTC Time:%02d:%02d:%02d ",\
((float)gpsx.longitude)/100000,gpsx.ewhemi,((float)gpsx.latitude)/100000,gpsx.nshemi,\
gpsx.utc.year,gpsx.utc.month,gpsx.utc.date,gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);
if(sim900a_send_cmd("AT+CIPSEND",">",10)==0) //发送数据
{
Show_Str(30+30,80,200,12,"SENDING...",12,0); //提示数据发送中
u2_printf("%s\r\n",p1);
delay_ms(100);
if(sim900a_send_cmd((u8*)0X1A,"SEND OK",500)==0)
{
Show_Str(30+30,80,200,12,"SEND OK!",12,0);//最长等待10s
//USART_RX_STA=0; //启动下一次接收
}else
{
Show_Str(30+30,80,200,12,"SEND FAIL!",12,0);
delay_ms(500);
}
}else
{
sim900a_send_cmd((u8*)0X1B,0,0); //ESC,取消发送
// oldsta=0XFF;
}
}
然后这里出现的问题是,这个程序跑起来的话,可以正常启动TCP连接,但是只执行后半部分,也就是不断发送空的数据给主机。我用JTAG仿真发现程序从来都没有跳进if(USART_RX_STA&0X8000) 。但是我把后面GPRS发送这部分代码注释掉,只跑GPS接收部分,又能正常解析出数据。不知道是哪里出现了问题
,我这里是用串口2连SIM900A,用串口1连接GPS模块。 |