问题如下:
主板上给模块发命令模块都可以正常接受,但是发短信的PDU数据时,模块只返回"OK\r\n",就是没返回"+CMGL: ",短信也发送不出去,里面的PDU编码是没问题的,我用串口调试助手把主板上发给短信模块的数据都接受下来,然后用串口调试助手发一模一样的命令和PDU数据给GSM模块,过一小会就返回"+CMGL: "接着是"OK\r\n",手机上可以接受短信也可以显示正确的数据。
就是高不明白同样的数据同样命令,为什么一个就能发送成功,一个就不行。在延时方面我也式过,给了也没有?
有谁遇到过这种问题没有?调一天了还是找不到原因。
- cnt=gsmEncodePdu(&msg,buf,cnt);
- i=(cnt>>1UL)-1;
- sprintf(cbuf,"AT+CMGS=%d\r\n",((int) i)); //i是计算除了中心号码以外的数据字节数发送的
- uartprintf("\n%s",cbuf);//串口调试助手查看命令内容
- for(j=0;j<5;j++)
- {
- Modem_Tx_String(cbuf);//(cnt-2)/2
- OSTimeDly(10); //200MS
- ClearModemBuf(ModemRxBuf);
- ReadModem(ModemRxBuf);
- if (strstr(ModemRxBuf,"> ")==NULL) {uartprintf("\nCMGS:ERROR");return 0;}//是否有返回
- else break;
- }
- strcat(buf,"\x1A");//插入接受标志
- 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"
-
- }
对主板发送给模块的数据为
AT+CMGS=142
0011000D91683124571689F50
000FF7FCC3A31ECD68140A099
6C4693CD68B2DA0C0492D1683
35A4C368BC540205A6C268BC9
6634990C0492CD6432DA6C468
BCD40A0194D368BC964321A0D
0492C56233596C5693C940A05
92C26ABD166311A0D0492C966
33DA6C169BCD40A0188D369BC
96632590C049AD162B3986C16
A3C9000000000000000000000
00000000000
0x1A//这里是16进制接受符合,上面的都是字符形式
我把这些数据在串口调试助手上发过去就可以正常发送