发新帖我要提问
12
返回列表
打印

单片机与GSM TC35通信失败,请大神指导,非常感谢!

[复制链接]
楼主: xiongbagan
手机看帖
扫描二维码
随时随地手机跟帖
21
bintech| | 2011-10-5 23:29 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 bintech 于 2011-10-5 23:49 编辑

void send_uart( uchar ch)
  {
      //while (UTXIFG0==0);//如果UTXIFG0 为0 就卡在这里      
    //TXBUF0=ch;//一旦把字符发送给发送缓存,UTXIFG0 会自动被置成0
     UTXIFG0 = 0;
     TXBUF0  = ch;
     while (!UTXIFG0);
     UTXIFG0 = 0;
   }

使用特权

评论回复
22
xiongbagan|  楼主 | 2011-10-5 23:33 | 只看该作者
就是说,我发送的第一条指令出现了乱码,如果发送两条指令,那么第一条出现乱码,第二条没有问题。您说这个是怎么回事?这个乱码会不会造成TC35模块对我的波特率造成误判进而再也不识别我的指令?
20# chunyang

使用特权

评论回复
23
xiongbagan|  楼主 | 2011-10-5 23:37 | 只看该作者
恩,发送ASCII码我知道,只是我发送的指令出现了乱码,如果发送两条或者多条指令,那么第一条出现乱码,其他指令正常,不知道为什么会这样?此外,有没有可能我的乱码造成TC35模块对我的波特率自适应出现问题,导致再也不接受我的指令? 20# chunyang

使用特权

评论回复
24
xiongbagan|  楼主 | 2011-10-5 23:37 | 只看该作者
谢谢! 19# zhao321

使用特权

评论回复
25
xiongbagan|  楼主 | 2011-10-5 23:37 | 只看该作者
单片机和模块用232串口相连。 18# hujiangdong

使用特权

评论回复
26
bintech| | 2011-10-5 23:39 | 只看该作者
void AT_TEST()
{
  send_uart('A');
  
  
  send_uart('T');
  
  send_uart(0X0D);   //回车符
  
  //send_uart(0x0A);//换行符可以不要。AT命令后跟回车符0x0D就可以了
  
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xiongbagan + 1
27
bintech| | 2011-10-5 23:42 | 只看该作者
另外再检查一下,串行通信数据格式设置与TC35的是否一致。

使用特权

评论回复
28
linqing171| | 2011-10-6 08:02 | 只看该作者
关于乱码,基本是软件问题。 比如管脚乱发了一段,非控状态。
其次是电平匹配问题,比如IO高电平驱动能力不够,弱驱动的时候(没有配置好,不发送的时候),1不是1,会随外界干扰变为0,常见的外部干扰比如隔壁管脚。
再次,还有很多原因。

鉴于你的只是第一次会有乱码,且乱码不是以回车结尾,你后面的AT回车加上前面的乱码,这行命令是错的。 如果你要解决应该也很简单。找到原因就可以了。
如果要规避的话,上电先发送两个AT回车换行,延时一秒,清空Rx缓冲,再进行后面的操作。
模块先和电脑通讯的情况下,配置为固定波特率,模式,并保存。

使用特权

评论回复
29
linqing171| | 2011-10-6 08:06 | 只看该作者
单片机和MC35的上拉电阻都是多少? 拉到了什么电平?
上电后到第一个AT的时间是多少?
软件从初始化到Test函数之间,用示波器看发送脚,有无波形?是否有非软件控制状态或者乱状态?
。。。。。。
可怀疑的地方非常多,但是应该都是简单的问题。印象里面MC35是3V的吧?

使用特权

评论回复
30
xiongbagan|  楼主 | 2011-10-6 10:22 | 只看该作者
谢谢大牛!一看您的回答就是耐心的看完了以上所有的帖子,对您的能力和热心我表示敬意和感激。 28# linqing171

使用特权

评论回复
31
xiongbagan|  楼主 | 2011-10-6 10:42 | 只看该作者
居然针对我的代码提出修改意见,您的耐心我非常感激。啥也不说了,您是牛人加好人,谢谢您! 26# bintech

使用特权

评论回复
32
xiongbagan|  楼主 | 2011-10-6 11:50 | 只看该作者
问题解决!
将gsm模块与计算机连接
然后通过AT指令把回显关了,把波特率固定为某指,如9600。
而且不能忘记保存。
主程序的串口初始化中要把波特率设为GSM模块中已经固定好了的波特率。

希望这一解决办法对后来者有所帮助。

上述解决方案除了回显之外是我自己想到的,其余的想法来源于linqing171这位大牛,最高分给你了。
对于其他的热心牛人,我也一一给予了评分,由于第一次发问,有些规矩不太懂,如有不当之处,各位多多海涵。下次一定送更多的分!话说你们要在我身边我马上就请客喝酒吃饭乐呵乐呵了!

啥也不说了,这里各路大神,而且非常热心,愿意拿出时间看我的问题并且码字解答。特别特别的感激。

使用特权

评论回复
33
xyz769| | 2011-10-11 11:10 | 只看该作者
  噢!天。。 原来拿分要靠水贴。。以后不给分就不回答问题了。。

使用特权

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

本版积分规则