打印

关于TC35i的AT+CMGS指令的疑惑

[复制链接]
5857|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wen2204|  楼主 | 2007-11-11 21:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我发送一条短信。
下面是一些代码:
UART1Write(AT_CMGF,sizeof(AT_CMGF)-1);//从串口1发送AT+CMGF=0 
OSTimeDly(15);        //延时
if(0x00==UARTReceive(ATCReturn))//如果返回结果正确
{
   UART1Write(AT_CMGS,sizeof(AT_CMGS)-1); //发送AT+CMGS=154
   OSTimeDly(5);//延时
   if(0x00==UARTReceive(ATCReturn))//如果返回结果正确
   {......}

我发觉:在发送AT+CMGF=0后OSTimeDly(15),验证返回码后发送AT+CMGS指令,延时OSTimeDly(5),接收返回码,成功过,但是不稳定。
我试着把AT+CMGF的延时减少,把AT+CMGS的OSTimeDly延长。还是接收不对,接收缓冲里没有">"

对于AT+CMGS该怎么来验证比较好的?感觉AT+CMGS这条指令感觉特别奇怪,一般的AT指令我只要OSTimeDly(5)后就能收到它的返回码,而AT+CMGS却不行

相关帖子

沙发
chunyang| | 2007-11-11 23:34 | 只看该作者

你的方法不够严谨

    任何对模块的操作,不论正确与否,模块必然会有信息返回,而且该信息内容是国际标准与平台无关,凡是标准化的GSM设备均保证100%兼容。判断操作是否正确,要分析模块返回的这些信息,做特征字符串提取、比较来实现,跟延时没有任何关系。编程方面,技巧是开个足够大的缓冲区,以收到特定个数的“回车”、“换行”符为结束标志,然后根据不同命令找相应位置的特征字符串,当然,你首先要人工分析好可能用到的每个操作指令及其各种情况下的返回信息,这样才能保证可靠性及容错性。

使用特权

评论回复
板凳
winloop| | 2007-11-12 08:56 | 只看该作者

显然是一条道儿跑到黑

模块内部比较忙的时候如果收到这个指令之后可能回应的就慢些,收和发是两个线程,你要把他们分开处理才行,你这种编程方法做些研究还将就,做产品的话肯定是用不住的。

使用特权

评论回复
地板
wen2204|  楼主 | 2007-11-12 09:54 | 只看该作者

2楼和3楼说的很有道理。

我在接收函数中已经吧超时等待设得很长了,
有的时候还是收不到AT+CMGS的返回码

使用特权

评论回复
5
winloop| | 2007-11-12 13:57 | 只看该作者

你把TC35的串口接到电脑串口上

然后在计算机上用串口调试软件往下发AT指令看返回情况怎么样

使用特权

评论回复
6
iaiwork21| | 2007-11-12 15:37 | 只看该作者

你有没有用硬件流控?

使用特权

评论回复
7
winloop| | 2007-11-12 16:44 | 只看该作者

不用

这丁点儿数据量还用什么流控,流控在gprs进入数据传输模式后才有些用处

使用特权

评论回复
8
wen2204|  楼主 | 2007-11-13 13:23 | 只看该作者

电脑的串口调试还行。

可能我串口的超时参数设置的不够

使用特权

评论回复
9
winloop| | 2007-11-13 14:59 | 只看该作者

你的编程思想还是不对

不能一味的通过延长等待时间来解决,看你的代码应该是用了操作系统,我是从来没用过操作系统的,但从你得问题来看这个操作系统用的比较浪费,代码还是一条道儿跑到黑,首先给裸机写程序的思想你还没掌握呢就用上了操作系统,CZXT不是万能,如果你对这个通信机制不了解的话这个问题你始终是不好解决的!

使用特权

评论回复
10
wen2204|  楼主 | 2007-11-13 18:46 | 只看该作者

谢谢楼上的提醒

我是个ARM的初学者,还有很多地方需要学习,呵呵。
我用的ARM+uCOS.整个系统中我还有其他的任务,在OSTimeDly()的时候,会做一次任务切换的,切换到其他的高优先级任务会自动运行的。在有串口中断的时候,表明数据到来,这个任务才进行接收数据

使用特权

评论回复
11
tiger84| | 2007-11-15 20:09 | 只看该作者

LS的哥们怎么用的

我一直想在ARM上加进去UCOS

使用特权

评论回复
12
lhzw2001| | 2007-11-16 20:22 | 只看该作者

一般modem都能很快返回的

如果没有返回的,多半是AT指令出错了,敲入的不是AT命令,
你应该看看你的串口发送出来的是不是对的!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

54

帖子

1

粉丝