打印

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

[复制链接]
5946|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiongbagan|  楼主 | 2011-10-4 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用msp430f149控制GSM模块TC35收短信。程序如下(非常简单,我只发送了AT指令,想收到OK,GSM模块在收到AT后有回应,则由P2控制的LED发光。):
#include  <msp430x14x.h>
#include  "BoardConfig.h"
#define uint unsigned int
#define uchar unsigned char
uchar i_receive,TC35_RE[80],TC35_MAX,i_TC35_RECE;
void delay(uint i)
{
  uint i_delay,j_delay;
  for(i_delay=0;i_delay<i;i_delay++)
  {
      for(j_delay=0;j_delay<100;j_delay++)
              {;}
  }
}
void send_uart( uchar ch)
  {
    while (UTXIFG0==0);//如果UTXIFG0 为0 就卡在这里      
    TXBUF0=ch;//一旦把字符发送给发送缓存,UTXIFG0 会自动被置成0
  }
void AT_TEST()
{
  send_uart('A');
  
  
  send_uart('T');
  
  send_uart(0X0D);
  
  send_uart(0x0A);
  
}
/********************主函数********************/
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
   
    P3SEL |= 0x30;        // 选择P3.4 和P3.5 做UART 通信端口
    P3DIR |= BIT4;
    ME1 |= UTXE0 + URXE0; // 使能USART0  的发送和接受
    UCTL0 |= CHAR;        // 选择8 位字符
    UTCTL0 |= SSEL0;      // UCLK = ACLK
    UBR00 = 0x03;         // 波特率9600
    UBR10 = 0x00;        //
    UMCTL0 = 0x4A;      // Modulation
    UCTL0 &= ~SWRST;    // 初始化UART 状态机
    IE1 |= URXIE0;  // 使能USART0 的接收中断,也即一旦有数据出现在串口上,就会产生中断
   
    delay(1000);
   
    P2OUT=0XFF;
    P2DIR=0XFF;
   
   
    _EINT(); //打开全局中断
   
   
    TC35_MAX=0;
   
   
    AT_TEST();
   
    while(1)
    {  
      
       if(TC35_MAX>0)
         P2OUT=0XF0;
    }
}
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
   
        
        i_receive=RXBUF0;//一旦你从缓存中读取数据,URXIFG0 会自动置0
        TC35_RE[i_TC35_RECE]=i_receive;
          i_TC35_RECE=i_TC35_RECE+1;
             if(i_TC35_RECE>TC35_MAX)
                {
                  TC35_MAX=i_TC35_RECE;//TC35_MAX 最后就是回应信息的长度
                }
      
}

我在计算机上用串口调试助手测试GSM模块是没问题的。我把AT命令发给GSM模块,然后记录下它的返回信息。并且用其他手机发短信到GSM模块上的卡,其返回信息也没问题!!

我又把单片机的串口与电脑相连,发现单片机的串口可以正常工作。我发送给单片机一个数据,它能够通过串口再发到电脑上。

但是,当我把单片机和GSM模块连接在一起使用的时候,就是不行……没有反应……。
我单片机和GSM都是通过232通信的。

就这部分,至少苦思冥想十几个小时了,,依然没有任何进展……求高手帮忙分析下是为什么呢。。非常感谢

如果可以的话,加我QQ584030790或邮箱584030790@qq.com联系,非常感谢!!

相关帖子

沙发
xiongbagan|  楼主 | 2011-10-5 00:11 | 只看该作者
顶起,心很着急,求高手指点一二。

使用特权

评论回复
板凳
chunyang| | 2011-10-5 00:37 | 只看该作者
如果用PC的串口可以监看到命令而模块没有反应,应先确认模块是否已经正常启动,模块启动正常还没有反应只有两个可能:1、AT指令后面没有跟回车及换行符;2、硬件连线错误,Modem类连线是T-T、R-R,有些模块还需要连接RTS、CTS等,具体见模块的手册。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xiongbagan + 1
地板
xiongbagan|  楼主 | 2011-10-5 08:23 | 只看该作者
谢谢这位大牛!通过监视单片机的串口,发现得到的指令为5|EkAT,单片机复位,重新发送,再监视,发现指令为pRK[IjrH`AT。怀疑发送的第一条指令可能会有问题。于是连续发两条AT指令,这回第一条指令的监听结果是K&E0AT,然而第二条指令是正常的AT,请问大牛这个是怎么回事?有什么办法可以解决呢?
[url=http://[b[/url]] 3# chunyang

使用特权

评论回复
5
xiongbagan|  楼主 | 2011-10-5 09:29 | 只看该作者
继续顶起,即便是在while循环中不断发送AT指令,GSM也没有反应。。。。。我的串口线确定没有问题,原理图看过好几遍了。

使用特权

评论回复
6
corset| | 2011-10-5 10:42 | 只看该作者
你的TC35通讯口加上拉电阻了吗?
记得加上拉电阻很重要

使用特权

评论回复
7
xiongbagan|  楼主 | 2011-10-5 10:50 | 只看该作者
我买的现成的模块,TC35和电脑连接,用串口调试助手发送AT,很快就返回OK,TC35模块应该没有问题吧。。。。。。。。 6# corset

使用特权

评论回复
8
corset| | 2011-10-5 11:10 | 只看该作者
没试过你怎么知道那

使用特权

评论回复
9
dtmcp| | 2011-10-5 13:26 | 只看该作者
可以先用串口助手试一下AT指令,

使用特权

评论回复
10
homeshow| | 2011-10-5 13:35 | 只看该作者
单片机的串口输出到电脑上监听下,看输出正确没

使用特权

评论回复
11
xiongbagan|  楼主 | 2011-10-5 13:36 | 只看该作者
谢谢这位大牛!通过监视单片机的串口,发现得到的指令为5|EkAT,单片机复位,重新发送,再监视,发现指令为pRK[IjrH`AT。怀疑发送的第一条指令可能会有问题。于是连续发两条AT指令,这回第一条指令的监听结果是K&E0AT,然而第二条指令是正常的AT,请问大牛这个是怎么回事?有什么办法可以解决呢?

使用特权

评论回复
12
xiongbagan|  楼主 | 2011-10-5 13:36 | 只看该作者
谢谢这位大牛!通过监视单片机的串口,发现得到的指令为5|EkAT,单片机复位,重新发送,再监视,发现指令为pRK[IjrH`AT。怀疑发送的第一条指令可能会有问题。于是连续发两条AT指令,这回第一条指令的监听结果是K&E0AT,然而第二条指令是正常的AT,请问大牛这个是怎么回事?有什么办法可以解决呢? 10# homeshow

使用特权

评论回复
13
xyz769| | 2011-10-5 14:06 | 只看该作者
模块上电后,默认是自动检测串口速率的,这个时候,你得发送至少一条AT指令去让模块检测到你的串口速率设置。之后,就正常了。。

使用特权

评论回复
14
xyz769| | 2011-10-5 14:08 | 只看该作者
 所以,模块上电后的第一条AT指令,一般都要忽略,除非你之前设置了模块,关闭了自动速度检测。。

使用特权

评论回复
15
xiongbagan|  楼主 | 2011-10-5 15:22 | 只看该作者
谢谢大牛!我已经这么做了,写了数条AT指令,甚至在while循环里面写AT指令,结果还是毫无反应。。。。。网搜了好几遍,各大论坛都下载过资料,结果搞了两天,发现都不能解决我这个问题。。。。。比较郁闷。 14# xyz769

使用特权

评论回复
16
linqing171| | 2011-10-5 19:16 | 只看该作者
上电后,你先发了一段时间的乱码。
然后TC35自适应波特率出问题了。

你先看看设置为固定波特率,看看有没有问题。
at回车换行你发两遍看看。

确认你收发是不是接反了。 电脑的发接单片机的收;电脑的发接模块的收; 单片机的收接模块的发;分别测试看看。
都是RS232电平还是TTL电平?

使用特权

评论回复
17
hujiangdong| | 2011-10-5 21:50 | 只看该作者
GSM模块与PC通讯正常,说明指令没有问题,需要去检查单片机发出的数据是否完全符合协议(AT指令),还需要去看GSM模块对数据发送有没有特殊要求,比如时序方面,一般数据发送正确,GSM模块没有问题,是肯定能通讯成功的。

使用特权

评论回复
18
hujiangdong| | 2011-10-5 21:50 | 只看该作者
还有电平是否符合,TTL还是232串口?

使用特权

评论回复
19
zhao321| | 2011-10-5 22:36 | 只看该作者
:)顶起

使用特权

评论回复
20
chunyang| | 2011-10-5 23:20 | 只看该作者
5|EkAT是什么意思?AT应该是ASCII码

使用特权

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

本版积分规则

0

主题

16

帖子

1

粉丝