在嵌入式系统上开发短信模块Tc35i时出现超级古怪问题??????

xstlovezxh   2008-9-1 19:53 楼主
问题如下:
主板上给模块发命令模块都可以正常接受,但是发短信的PDU数据时,模块只返回"OK\r\n",就是没返回"+CMGL: ",短信也发送不出去,里面的PDU编码是没问题的,我用串口调试助手把主板上发给短信模块的数据都接受下来,然后用串口调试助手发一模一样的命令和PDU数据给GSM模块,过一小会就返回"+CMGL: "接着是"OK\r\n",手机上可以接受短信也可以显示正确的数据。
就是高不明白同样的数据同样命令,为什么一个就能发送成功,一个就不行。在延时方面我也式过,给了也没有?
有谁遇到过这种问题没有?调一天了还是找不到原因。

  1.         cnt=gsmEncodePdu(&msg,buf,cnt);
  2.         i=(cnt>>1UL)-1;       
  3.         sprintf(cbuf,"AT+CMGS=%d\r\n",((int) i));  //i是计算除了中心号码以外的数据字节数发送的
  4.         uartprintf("\n%s",cbuf);//串口调试助手查看命令内容
  5.         for(j=0;j<5;j++)
  6.         {

  7.             Modem_Tx_String(cbuf);//(cnt-2)/2
  8.                 OSTimeDly(10);        //200MS
  9.                 ClearModemBuf(ModemRxBuf);
  10.                 ReadModem(ModemRxBuf);
  11.                 if (strstr(ModemRxBuf,"> ")==NULL) {uartprintf("\nCMGS:ERROR");return 0;}//是否有返回
  12.                 else break;

  13.         }
  14.         strcat(buf,"\x1A");//插入接受标志
  15.         cnt++;
  16.         uartprintf("\n%s",buf);
  17.         uartprintf("\n%d",cnt);       
  18.         ClearModemBuf(ModemRxBuf);
  19.         cnt=Modem_Tx_String(buf);//串口发送数据
  20.         for(j=0;j<20;j++)
  21.         {            
  22.             OSTimeDly(OS_TICKS_PER_SEC);            
  23.             ReadModem(ModemRxBuf);
  24.             if (ModemRxBuf[0]>0) {uartprintf("\n%s",ModemRxBuf);break;} //这里只返回一个"OK\r\n"
  25.             
  26.         }

对主板发送给模块的数据为
AT+CMGS=142
0011000D91683124571689F50
000FF7FCC3A31ECD68140A099
6C4693CD68B2DA0C0492D1683
35A4C368BC540205A6C268BC9
6634990C0492CD6432DA6C468
BCD40A0194D368BC964321A0D
0492C56233596C5693C940A05
92C26ABD166311A0D0492C966
33DA6C169BCD40A0188D369BC
96632590C049AD162B3986C16
A3C9000000000000000000000
00000000000
0x1A//这里是16进制接受符合,上面的都是字符形式
我把这些数据在串口调试助手上发过去就可以正常发送

回复评论 (6)

这行写错了
0x1A//这里是16进制结束标志,上面的都是字符形式

在线等
点赞  2008-9-1 19:59
怎么没人来帮忙
点赞  2008-9-2 19:07
可能是你的buf字符串中没有0结尾所致!
代码修改如下:
int len;
strcat(buf,"\x1A");//插入接受标志
len=strlen(buf);
buf[len]=0;

    cnt++;
    uartprintf("\n%s",buf);
    uartprintf("\n%d",cnt);   
        ClearModemBuf(ModemRxBuf);
        cnt=Modem_Tx_String(buf);//串口发送数据
    for(j=0;j<20;j++)
    {        
        OSTimeDly(OS_TICKS_PER_SEC);        
        ReadModem(ModemRxBuf);
        if (ModemRxBuf[0]>0) {uartprintf("\n%s",ModemRxBuf);break;} //这里只返回一个"OK\r\n"
            
    }
点赞  2008-9-2 22:42
好像不是吧,我也不知道,不过现在已经解决了,分全部送给你哈哈,还是谢谢你?
点赞  2008-9-3 11:46
呵呵!不谢!
收了你的分子!
点赞  2008-9-3 19:29
你好 到底是怎么解决的?
点赞  2011-9-29 20:31
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复