单片机和GSM TC35通信失败,求高手解答,非常感谢!!

[复制链接]
15971|67
fox_brooklyn 发表于 2011-5-18 21:36 | 显示全部楼层
看了楼主的帖子,让我想起去年我的毕设题目,就是单片机和TC35I模块的连接,幸运的是最后顺利完成了收发短信的功能。
我记得当时我的毕设实施步骤如下:
1.买来的单片机学习板,买来的GSM模块;
2.用串口调试助手完成程序中所用到的所有的AT指令的操作;
3.印象中,然后买了条串**叉线连接GSM与单片机;
4.调程序,最终完成中英文短信收发。
 楼主| ewby 发表于 2011-5-18 21:39 | 显示全部楼层
21# fox_brooklyn

21楼的同志啊,我现在就是做的毕业设计。。
其他部分都完成了,就差这个GSM模块了。。。感觉有点崩溃呵呵
我都直接3条线(Rxd Txd GND)连接单片机和GSM的串口。但是就是有问题啊~~~

问个,你原来做的时候,单片机有没有处理识别GSM返回的那些OK,ERROR之类的信号?是怎么处理的呢?
fox_brooklyn 发表于 2011-5-18 21:44 | 显示全部楼层
OK之类的信息当然要处理的,否则你怎么知道成功的完成了通信?
 楼主| ewby 发表于 2011-5-18 21:49 | 显示全部楼层
23# fox_brooklyn

哦,那个我也是这样做的。。为神马我的就是不行呢……唉~~~
fox_brooklyn 发表于 2011-5-18 21:54 | 显示全部楼层
你从单片机就发送一个“AT”指令,GSM模块返回“OK”,这个可以完成吗?
 楼主| ewby 发表于 2011-5-18 21:56 | 显示全部楼层
我现在没办法测出来~~
但是我在电脑上手动相应单片机发送的AT指令,或者手动响应GSM模块发送AT指令都是正常的~~
fox_brooklyn 发表于 2011-5-18 22:04 | 显示全部楼层
如果两边都正常的话,那就是联调的问题了,联调的时候,我当时用的就是串**叉线,如果简单的AT指令能够成功发送并得到正确响应的话,那后面的问题就好办了。
祝你好运!
 楼主| ewby 发表于 2011-5-18 22:09 | 显示全部楼层
27# fox_brooklyn

两边都是正常的,比如:(现在我把单片机和计算机相连调试,我手动模拟GSM)
我输入 5E 53 59 53 53 54 41 52 54 0D 0A                    //^SYSSTART
单片机回:41 54 0D 0A                      //AT
输入 41 54 0D 0D 0A 4F 4B 0D 0A                            //AT OK
单片机回:41 54 45 0D 0A                //ATE
输入 41 54 45 0D 0D 0A 4F 4B 0D 0A                       //ATE OK
单片机回:41 54 2B 43 4E 4D 49 3D 31 2C 31 2C 32 0D 0A //AT+CNMI=1,1,2
输入 0D 0A 2B 43 4D 54 49 3A 20 22 53 4D 22 2C 31 37 0D 0A  //+CMTI: "SM",17 有短信来
单片机回 41 54 2B 43 4D 47 52 3D 31 37 0D 0A 0D 0A                 //AT+CMGR=17
输入 0D 0A 2B 43 4D 47 52 3A 20 30 2C 2C 32 36 0D 0A 30 38 39 31 36 38 33 31 30 38 38 30 38 33 30 35 46 30 30 34 30 44 39 31 36
38 35 31 38 38 34 33 33 34 33 31 46 38 30 30 30 38 31 31 35 30 36 31 30 32 33 34 31 33 32 33 30 36 35 45 37 32 34 45 43 30 34
45 34 38 0D 0A 0D 0A 4F 4B 0D 0A            //某条短信代码
单片机 正确处理并做出相应反应!


反过来也是一样正常的。。但是两边互联后就是不行~~~~
sinanjj 发表于 2011-5-18 22:21 | 显示全部楼层
把串口引出两根当示波器看信息流就能找到问题了.












基本的调试通讯的思路都没有....
 楼主| ewby 发表于 2011-5-18 22:25 | 显示全部楼层
29# sinanjj

请问是在GSM模块和单片机相连的时候把串口线中间引出到示波器去观察吗?
mohanwei 发表于 2011-5-18 23:03 | 显示全部楼层

记得先来一条“ATE0”指令把回显关了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lwslws201 发表于 2011-5-18 23:17 | 显示全部楼层
232电平转化问题吧~
zhanv 发表于 2011-5-18 23:19 | 显示全部楼层
没解决吗,高手来了:
不知你的单片机供电是几伏,TC35是5V系统,应是两者信号电平不匹配造成的
chunyang 发表于 2011-5-18 23:26 | 显示全部楼层
先用PC监视MCU和模块的通讯,然后再看MCU是否能正确回应,注意MCU需要在模块回应完毕后才能发出下一条指令。
原野之狼 发表于 2011-5-18 23:27 | 显示全部楼层
楼主给贴个图出来
省得大伙在这费脑筋
 楼主| ewby 发表于 2011-5-19 00:29 | 显示全部楼层
有新的进展了,通过按照 chunyang 和 mohanwei两位大大的办法,直接监听两个模块的输出。看到以下信息:
^SYSSTART
AT
AT

OK
ATE
ATE

OK
AT+CNMI=1,1,2

ERROR                          //此处正常情况下应该是一个OK信息。

16进制信息为:00 5E 53 59 53 53 54 41 52 54 0D 0A 41 54 0D 0A 41 54 0D 0D 0A 4F 4B 0D 0A 41 54 45 0D 0A 41 54 45 0D 0D 0A 4F 4B 0D 0A 41 54 2B 43 4E 4D 49 3D 31 2C 31 2C 32 0D 0A 0D 0A 45 52 52 4F 52 0D 0A
 楼主| ewby 发表于 2011-5-19 00:34 | 显示全部楼层
unsigned char CNMI_cmd[]={"AT+CNMI=1,1,2\r\n"};                    //设置收到短消息提示

uartPutStr(ATE_cmd);                                                                                //发送简化显示要求信号
         while(!isOK)
         {
                  if(ReceiveBuffer[count-1]=='\n' &&
                     ReceiveBuffer[count-2]=='\r' &&
                     ReceiveBuffer[count-3]=='K' &&
                     ReceiveBuffer[count-4]=='O' )       
                {
                        isOK=1;               
                        count=0;
                         memset(ReceiveBuffer,'\0',512);
                }
         }
         
         isOK=0;
       
上面哪些是我AT+CNMI=1,1,2这个命令的代码,貌似没什么错把~。。
chunyang 发表于 2011-5-19 00:52 | 显示全部楼层
不要说“貌似”,仔细去看AT指令集手册。
 楼主| ewby 发表于 2011-5-19 00:55 | 显示全部楼层
38# chunyang

抱歉,我不严谨了。。
AT+CNMI=1,1,2/n/r
这个指令能够使TC35在收到短信时候发出“短信来”通知信号的。指令没有错
我之前也在电脑上使用过这个指令发给TC35过~都没问题的
chunyang 发表于 2011-5-19 01:28 | 显示全部楼层
想想人工操作和机器操作有什么差别……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部