OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5893|回复: 5

sim900a转发数据

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-9-14
在线时间
0 小时
发表于 2013-9-17 12:09:13 | 显示全部楼层 |阅读模式

我想在那个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模块。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-17 14:08:59 | 显示全部楼层
你这句话:
   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); 

能正常执行么?
p1,你申请了多大内存 ?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-9-17 14:21:20 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这句话编译的时候没有报错,不过后来为了调试,我把这句话简化成sprintf((char*)p1,"Longitude:%d",gpsx.longitude)1的话我申请的是默认是100.。就是它这两个部分,一个GPS接收,一个GPRS发送,它总是只有一个部分能够正常工作,另外一个部分它就工作不起来。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-17 14:26:27 | 显示全部楼层
哦,那你检查下移植。
我们例程都是用的串口2连接的GSM/GPS,你看看改对了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-9-17 14:30:17 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
就是我现在是用到两个串口,串口1和串口2 ,串口1我接了那个GPS的模块。串口1的话我是参考了串口2的程序,把串口1改成中断超时接受,原来我做过测试,就是把GPRS转发的部分的代码先注释了,就是建立TCP连接成功后不发送数据,直接启动GPS数据接收,串口1是能正常接收GPS数据的,我在想是不是那个中断优先级的问题。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-17 16:43:19 | 显示全部楼层
有可能,两者共存下,先看看接收的数据正确不正确。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 02:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表