打印

430控制GSM的程序问题

[复制链接]
2191|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feifeiandhuzi|  楼主 | 2014-2-16 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单独打电话的程序可以运行,但是加上短信就不成功了,不知道为什么。求指导!
#include"msp430x14x.h"
#define uchar unsigned char
#define uint unsigned int
void Send1Char(uchar sendchar);
void PutString0(uchar *ptr);
void delay(uint z);
uchar *ATDPHONE="ATD15382342871;\r\n";
uchar  *AT_CMGF="AT+CMGF=1\r\n";
uchar  *AT_CMGS="AT+CMGS=";
uchar  *NUMBER="15382342871";
uchar  *ENTER="\r\n";
uchar  *duanxin="haoma";
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  P3SEL|=0X30;  //P3.4 3.5 TXD,RXD
  ME1|=UTXE0+URXE0;   
  UCTL0|=CHAR;
  UTCTL0|=SSEL0;      //Aclk
  UBR00=0X30;          //波特率9600
  UBR10=0X00;
  UMCTL0=0X4A;
  UCTL0 &=~SWRST;
  IE1|=URXIE0;
  _EINT();
  while(1)
  {
    PutString0(AT_CMGF);
    delay(10);
    PutString0(AT_CMGS);
    Send1Char(0x22) ;
    PutString0(NUMBER);
    Send1Char(0x22) ;
    PutString0(ENTER);
    delay(100);
    PutString0(duanxin);
    delay(100);
    Send1Char(0x1A) ;
    delay(50000);
   
  }
}
void Send1Char(uchar sendchar)
{
      U0TXBUF = sendchar;
      while ((IFG1 & UTXIFG0)==0);    //等待发送寄存器为空         
      IFG1&=~(UTXIFG0);
      delay(10);
}
void PutString0(uchar *ptr)
{
      while(*ptr != '\0')
      {
            Send1Char(*ptr++);     // 发送数据
      }
}
void delay(uint z)
{       uint i;
        uchar j;
                for(i=z;i>0;i--)
                        for(j=120;j>0;j--);
}

相关帖子

沙发
chunyang| | 2014-2-16 18:54 | 只看该作者
建议仔细看看模块的操作手册和AT指令集。

使用特权

评论回复
板凳
lofky| | 2014-2-16 20:31 | 只看该作者
同楼上,既然打电话可以,那说明你的程序思路没有问题,最有可能是你AT指令集不对,还有我记得每次输完一条AT指令集,是要换行的

使用特权

评论回复
地板
yirongfu| | 2014-2-16 22:11 | 只看该作者
接上串口线连到电脑上,拿个串口调试助手看看程序发出来的字符是否正确,是模块没有返回还是程序没有接收。
还有看看AT_CMGF和AT_CMGs之间的一个delay(10);够不够。其他延时一样要看看。
最好要加上接收程序,对模块反馈的字符进行判断,接收到正确的反馈后再接着向模块发送指令或报文。最好不要用固定的延时来代替。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
ocon + 2 赞一个!
5
woaibingbing| | 2014-2-17 00:41 | 只看该作者
应该是AT指令集不对 我和我朋友也讨论过则个问题

使用特权

评论回复
6
wit_yuan| | 2014-2-17 08:40 | 只看该作者
这是我用stm32控制的程序,你可以分析看看,只给你部分代码:
        USART3_Puts("AT%IPOPEN=\"TCP\",\"x.x.x.x\",10005\r");
        OSTimeDlyHMSM(0, 0, 0, 600);

        USART3_Puts("AT%TPS= 1 , 1 , 3000 , 1024\r");
//        delay_short();
        OSTimeDlyHMSM(0, 0, 0, 600);
        USART3_Puts(data);
        USART3_Puts("\r\n");
        USART3_Puts("\x1A\r");
//        delay_short();
        OSTimeDlyHMSM(0, 0, 0, 600);
模块是GTM900C的。

使用特权

评论回复
7
feifeiandhuzi|  楼主 | 2014-2-17 10:13 | 只看该作者
wit_yuan 发表于 2014-2-17 08:40
这是我用stm32控制的程序,你可以分析看看,只给你部分代码:
        USART3_Puts("AT%IPOPEN=\"TCP\",\"x ...

谢谢

使用特权

评论回复
8
feifeiandhuzi|  楼主 | 2014-2-17 10:14 | 只看该作者
woaibingbing 发表于 2014-2-17 00:41
应该是AT指令集不对 我和我朋友也讨论过则个问题

我们用电脑发是可以发的,同样的AT指令

使用特权

评论回复
9
feifeiandhuzi|  楼主 | 2014-2-17 10:15 | 只看该作者
lofky 发表于 2014-2-16 20:31
同楼上,既然打电话可以,那说明你的程序思路没有问题,最有可能是你AT指令集不对,还有我记得每次输完一条 ...

指令后换行,短信后面不加。用电脑发同样的AT是成功的

使用特权

评论回复
10
feifeiandhuzi|  楼主 | 2014-2-17 10:15 | 只看该作者
chunyang 发表于 2014-2-16 18:54
建议仔细看看模块的操作手册和AT指令集。

仔细对比过,电脑也发成功了。就是换成单片机就不行了。

使用特权

评论回复
11
feifeiandhuzi|  楼主 | 2014-2-17 10:17 | 只看该作者
yirongfu 发表于 2014-2-16 22:11
接上串口线连到电脑上,拿个串口调试助手看看程序发出来的字符是否正确,是模块没有返回还是程序没有接收。 ...

试了一下,发送都成功了,没有返回,请问这一定是GSM模块坏了吗?有没有可能是其他原因,因为要换一个模块的还要有一笔开销,不确定就不太敢买。

使用特权

评论回复
12
feifeiandhuzi|  楼主 | 2014-2-17 10:25 | 只看该作者
yirongfu 发表于 2014-2-16 22:11
接上串口线连到电脑上,拿个串口调试助手看看程序发出来的字符是否正确,是模块没有返回还是程序没有接收。 ...

用串口调试助手接收单片机串口发出的指令,全都正确;用串口发相同的指令给gsm,gsm可以正常工作,用单片机连接gsm模块,有数据发出,可是模块没返回,?

使用特权

评论回复
13
lofky| | 2014-2-17 10:51 | 只看该作者
feifeiandhuzi 发表于 2014-2-17 10:25
用串口调试助手接收单片机串口发出的指令,全都正确;用串口发相同的指令给gsm,gsm可以正常工作,用单片 ...

430单片机可以单步调试,你打断点单步调试,两条指令集需有一定的延时

使用特权

评论回复
14
lofky| | 2014-2-17 10:53 | 只看该作者
你看6楼的stm32的程序,两条指令集之间有个延时,这个延时不能太短

使用特权

评论回复
15
feifeiandhuzi|  楼主 | 2014-2-17 10:55 | 只看该作者
lofky 发表于 2014-2-17 10:51
430单片机可以单步调试,你打断点单步调试,两条指令集需有一定的延时

你得意思是延时不够吗?我们改了也没用。我们在想是不是模块电压不匹配,但是我们不知道该怎么测

使用特权

评论回复
16
lofky| | 2014-2-17 11:02 | 只看该作者
不是模块电压不匹配吧,430单片机-串口(max3232)-GSM
当然你直接使用430上额RX TX与GSM上的TX RX相连,则可能会出现这样的问题,记得GSM的5V供电,而430的是3.3V,这样的话,你可以尝试着在线路上串一个电阻,我以前串的是3.3K

使用特权

评论回复
17
feifeiandhuzi|  楼主 | 2014-2-17 11:14 | 只看该作者
lofky 发表于 2014-2-17 11:02
不是模块电压不匹配吧,430单片机-串口(max3232)-GSM
当然你直接使用430上额RX TX与GSM上的TX RX相连,则 ...

你好,在哪串

使用特权

评论回复
18
lofky| | 2014-2-17 11:54 | 只看该作者
feifeiandhuzi 发表于 2014-2-17 11:14
你好,在哪串

就是在430与GSM模块通信上的串口线

使用特权

评论回复
19
lofky| | 2014-2-17 11:54 | 只看该作者
你试一试,但不一定行

使用特权

评论回复
20
feifeiandhuzi|  楼主 | 2014-2-17 13:54 | 只看该作者
lofky 发表于 2014-2-17 11:54
你试一试,但不一定行

十分感谢你,我们解决了。不是电压的问题,还是延时不够,导致有的时候电话打了几遍短信才发成功。我们会按你说的断点单步调试继续改进下。

使用特权

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

本版积分规则

4

主题

23

帖子

0

粉丝