OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17741|回复: 45

SIM900A的GPRS数据发送问题

[复制链接]

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
发表于 2016-4-27 14:09:43 | 显示全部楼层 |阅读模式
5金钱
最近一直在弄SIM900A的GPRS部分,用电脑的串口调试助手和模块的GPRS通信已经调试好了,但是移植到32的程序上有些地方一直解决不来,实在没办法了只能求助一下了,新手学习,谢谢指教。这是用电脑的串口调试助手和模块的GPRS通信:
AT
OK
AT+CSQ

+CSQ: 23,0

OK
AT+COPS?

+COPS: 0,0,"CHINA MOBILE"

OK
AT+CGCLASS="B"

OK
AT+CGDCONT=1,"IP","CMNET"

OK
AT+CGATT=1

OK
AT+CIPCSGP=1,"CMNET"

OK
AT+CLPORT="TCP","2000"

OK
AT+CIPSTART="TCP","xxx.xxx.xx.xxx","xxxx"

OK

CONNECT OK
AT+CIPSEND

> 1          //这部分的内容格式是与服务器的通信协议
werr
werr
SEND OK
1.login succeed!
AT+CIPSEND

> 3
fggh
Happy Birthday!!!
SEND OK
AT+CIPSEND

> 3
fggh
Good Good Study
SEND OK
AT+CIPCLOSE

CLOSE OK
下面的是我的程序:
u8 sim900a_gprs_test(void)
{
        u8 status=0;
        u8 *p1="1\r\nfggh\r\nfggh";
        u8 *p3="3\r\nwerr\r\nHappy";
        status=sim900a_check_status();
        if(status) return status;
        sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //关闭连接
        sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);                //关闭移动场景
        if(sim900a_send_cmd("AT+CGCLASS=\"B\"","OK",1000))return 8;//设置移动台类别为B
        if(sim900a_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",1000))return 9;//设置PDP上下文
        if(sim900a_send_cmd("AT+CGATT=1","OK",500))return 10;//附着GPRS业务
        if(sim900a_send_cmd("AT+CIPCSGP=1,\"CMNET\"","OK",500))return 11;//设置GPRS连接,接入点为”CMNET”
        if(sim900a_send_cmd("AT+CLPORT=\"TCP\",\"2000\"","OK",500))return 12;//设置本地 TCP 连接端口为 2000
        if(sim900a_send_cmd("AT+CIPSTART=\"TCP\",\"xxx.xxx.xx.xxx\",\"xxxx\"","OK",500))return 13;
        delay_ms(1000);
        LED0=!LED0; //加这个主要是调试找问题,发现这部分代码是可以运行到最后的
        LED1=!LED1;
        if(sim900a_send_cmd("AT+CIPSEND",">",500))
        {printf("CIPSEND DATA:%s\r\n",p1);        //测试时串口助手可以收到P1这部分发送内送
        u2_printf("%s",p1);}
        delay_ms(10);
        LED0=!LED0;
        if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000))
        {LED1=!LED1;}
        delay_ms(10000);
        //个人感觉主要是下面这有问题,但又不知道怎么改
        if(sim900a_send_cmd("AT+CIPSEND",">",500))//测试时串口助手无法收到P3这部分发送内送
        {printf("CIPSEND DATA:%s\r\n",p3);
        u2_printf("%s",p3);}
        delay_ms(10);
        LED0=!LED0;
        if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000))
        LED1=!LED1;
        delay_ms(1000);
        return 0;
}

谢谢。最后附上个人找资料过程中觉得很不错的一份学习笔记http://blog.csdn.net/linlingpeng_/article/details/8885506


最佳答案

查看完整内容[请看2#楼]

自己调试成功了,感觉真的好棒~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-4-27 14:09:44 | 显示全部楼层
自己调试成功了,感觉真的好棒~
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-4-27 15:42:24 | 显示全部楼层
本帖最后由 残风乱了温柔 于 2016-4-27 15:43 编辑

刚刚又做测试,发现我的第一个CIPSEND发送的登陆服务器数据并没有效果。又在电脑上用串口调试助手试了一下,发现是可以实现GPRS模块和服务器双向通信的。
串口调试助手的:
AT+CIPSEND

> 1
fggh
fggh
SEND OK
1.login succeed!
AT+CIPSEND

> 3  //这里是发送到另一个账号的
werr
Happy
SEND OK
3   //这里开始是从另一个账号通过网络调试助手发送过来的
werr
FFFFFFFFFF3
werr
BBBBBBBB
CLOSED
网络调试助手的(通过另一个登陆账号发送到该账号):
【2016-04-27 15:24:23:427】1.login succeed!

【2016-04-27 15:24:58:106】3   //这是另一个账号接收到的
fggh
Happy
//这是另一个账号发送过去的
3
fggh
FFFFFFFFFF3
werr
BBBBBBBB


回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-5-27
在线时间
4 小时
发表于 2016-5-27 12:05:18 | 显示全部楼层
楼主,你的问题解决了吗?我这Stm32接收不到SIM900返回数据
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-5-30 05:16:35 | 显示全部楼层
解决了
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2016-5-31
在线时间
2 小时
发表于 2016-6-1 20:17:34 | 显示全部楼层
我用单片机的RXD接SIM900A的STXD,TXD接SRXD,GND接GND,通过串口助手发送AT,没反应。用串口线直接连SIM900A,AT有返回OK,各位大神是不是我连接有问题?
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-6-4 20:30:35 | 显示全部楼层
雨倾城 发表于 2016-6-1 20:17
我用单片机的RXD接SIM900A的STXD,TXD接SRXD,GND接GND,通过串口助手发送AT,没反应。用串口线直接连SIM90 ...

你的前一种接法,单片机和电脑也是用串口线连接的吗?如果是的话,那就是接线错了,单片机上的RXD和TXD一般都是连接的CH340,然后通过USB线连接电脑
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-5-27
在线时间
4 小时
发表于 2016-6-20 12:43:17 | 显示全部楼层

楼主,可以发一下代码吗?我这接收到的数据不稳定
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-7-23 17:43:52 | 显示全部楼层
我实现的是向服务器以GPRS发送数据,二者间有固定的通信协议(见一楼),类似于QQ那样,一个账号是通过sim900a在线自动连接服务器登录,另一个在手机端通过TCP客户端连接服务器登录另一个账号,然后sim900a发送的消息通过服务器转发,在我的手机这端app就可以看到。(默认设置sim900a发送到我手机端的这个账号)
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-7-23 17:44:35 | 显示全部楼层
狼道纵横 发表于 2016-6-20 12:43
楼主,可以发一下代码吗?我这接收到的数据不稳定

我实现的是向服务器以GPRS发送数据,二者间有固定的通信协议(见一楼),类似于QQ那样,一个账号是通过sim900a在线自动连接服务器登录,另一个在手机端通过TCP客户端连接服务器登录另一个账号,然后sim900a发送的消息通过服务器转发,在我的手机这端app就可以看到。(默认设置sim900a发送到我手机端的这个账号)
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-7-24 17:07:40 | 显示全部楼层
本帖最后由 残风乱了温柔 于 2016-7-24 17:16 编辑

共享一下自己的代码好了(主要是GPRS部分),有关的具体实现功能请参照1楼和9楼,这里不再赘述。注:所有注释掉的LED均为方便调试所用,可忽略。
#include "sim900a.h"
#include "usart2.h"
#include "delay.h"        
#include "led.h"
#include "string.h"  
#include "usart.h"
#include "stdlib.h"
#include "key.h"
#include "sys.h"
#include "stdio.h"

//ATK-SIM900A 各项测试(拨号测试、短信测试、GPRS测试)共用代码
//sim900a发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果
//    其他,期待应答结果的位置(str的位置)
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART2_RX_STA&0X8000)                //接收到一次数据了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
                strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}

//向sim900a发送命令
//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//       1,发送失败
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
        u8 res=0;
        USART2_RX_STA=0;
        if((u32)cmd<=0XFF)
        {
                while(DMA1_Channel7->CNDTR!=0);        //等待通道7传输完成   
                USART2->DR=(u32)cmd;
        }else u2_printf("%s\r\n",cmd);//发送命令
        if(ack&&waittime)                //需要等待应答
        {
                while(--waittime)        //等待倒计时
                {
                        delay_ms(10);
                        if(USART2_RX_STA&0X8000)//接收到期待的应答结果
                        {
                                if(sim900a_check_cmd(ack))break;//得到有效数据
                                USART2_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        return res;
}
//查看SIM900A模块的状态。
//返回值:
// 1: 发送AT指令出错
// 2: SIM卡出错。
// 3: 查询不到运营商
u8 sim900a_check_status(void){

        if(sim900a_send_cmd("AT","OK",200)) return 1;//发送AT指令,判断返回是否是OK。

        if(sim900a_send_cmd("AT+COPS?","OK",200)) return 2;// 查询运营商。
        
    if(sim900a_send_cmd("AT+CSQ","OK",200))return 3;//查询信号质量;
        
        return 0;
        
}        
//SIM900A拨号测试
//其中sprintf是字符串格式化函数
//sprintf函数使用请参考http://baike.baidu.com/view/1295144.htm
u8 sim900a_call_test(u8* msisdn)
{
        u8 status=0;
        char cmd[20];
        status=sim900a_check_status();
        if(status) return status;
        
//        LED0=!LED0;
//        LED1=!LED1;
        
        if(sim900a_send_cmd("AT+CLIP=1","OK",200))return 4;        //设置来电显示

        if(sim900a_send_cmd("AT+COLP=1","OK",200))return 5;        //设置被叫号码显示
        
        sprintf((char*)cmd,"ATD%s;",msisdn);//命令格式:ATDXXXX;
        
        if(sim900a_send_cmd((u8*)cmd,"+COLP:",200)) return 6;//拨号失败
        
        return 0;
        
}
//SIM900a挂机函数。
void sim900a_hangup_call(void)
{
        sim900a_send_cmd("ATH","OK",200);//挂机
//        LED0=!LED0;
//        LED1=!LED1;
}

//SIM900A发英文短信测试。
//NOTE:此函数只能发送英文短信
//其中sprintf是字符串格式化函数
//sprintf函数
u8 si900a_sms_test(u8* msisdn)
{
        u8 status=0;
//        u8 *p7="There is an emergency!!!";
        char cmd[20];
        
        status=sim900a_check_status();
        if(status) return status;
        
//        LED0=!LED0;
//        LED1=!LED1;
        
        if(sim900a_send_cmd("AT+CMGF=1","OK",200))return 4;                        //设置文本模式
        
        if(sim900a_send_cmd("AT+CSCS=\"GSM\"","OK",200))return 5;        //设置TE字符集为UCS2

        sprintf((char*)cmd,"AT+CMGS=\"%s\"",msisdn);//命令格式:AT+CMGS="XXX"
        
        if(sim900a_send_cmd((u8*)cmd,">",200))return 6;        //设置短消息文本模式参数
        
//        u2_printf("%s","Dear baby,Happy new year!!!");//发送短信内容到GSM模块
//        u2_printf("%s\r\n%s\r\n%s\r\n%s\r\n",etbuf,ftbuf,heartdisplay,p7);//发送短信内容到GSM模块
        u2_printf("%s\r\n%s\r\n%s\r\n%s\r\n",etbuf,ftbuf,heartdisplay);//发送短信内容到GSM模块

        if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)) return 7;//发送结束符
        
        return 0;
}

//ATK-SIM900A GPRS主测试控制部分
u8 sim900a_gprs_test(u8 *p)
{
//        u8 i;
        u8 status=0;
        u8 *p1="1\r\nfggh\r\nfggh";
        //u8 *p2="6\r\nwertt\r\n";
//        u8 *p3="3\r\nwerr\r\neverything is OK";
        u16 timex=0;
        u8 count=0;
        
        u8 connectsta=0;        //0,正在连接;1,连接成功;2,连接关闭;
        u8 hbeaterrcnt=0;        //心跳错误计数器,连续5次心跳信号无应答,则重新连接
        
        status=sim900a_check_status();
        if(status) return status;

        sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //关闭连接
        sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);                //关闭移动场景
        if(sim900a_send_cmd("AT+CGCLASS=\"B\"","OK",1000))return 1;                                //设置GPRS移动台类别为B,支持包交换和数据交换
        if(sim900a_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",1000))return 2;//设置PDP上下文,互联网接协议,接入点等信息
        if(sim900a_send_cmd("AT+CGATT=1","OK",500))return 3;                                        //附着GPRS业务
        if(sim900a_send_cmd("AT+CIPCSGP=1,\"CMNET\"","OK",500))return 4;                 //设置为GPRS连接模式
        if(sim900a_send_cmd("AT+CIPHEAD=1","OK",500))return 5;                                         //设置接收数据显示IP头(方便判断数据来源)
        
        if(sim900a_send_cmd("AT+CLPORT=\"TCP\",\"2000\"","OK",500))return 12;//设置本地 TCP 连接端口为 2000
        
        if(sim900a_send_cmd("AT+CIPSTART=\"TCP\",\"XX.XXX.XX.XXX\",\"XXXX\"","OK",500))return 13;

        //建立 TCP连接,连接到IP:XX.XXX.XX.XXX,连接端口为:XXXX.等待 TCP 连接成功建立,模块返回:OK
        delay_ms(1000);
//        LED0=!LED0; //红灯
//        LED1=!LED1; //黄灯
               
        if(sim900a_send_cmd("AT+CIPSEND",">",500)) //测试
        {
                printf("CIPSEND DATA:%s\r\n",p1);        
                u2_printf("%s",p1);
        }
        delay_ms(10);
//        LED0=!LED0;
        if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000))
        {
//                LED1=!LED1;
        }
        delay_ms(10000);
               
        if(sim900a_send_cmd("AT+CIPSEND",">",500)==0)//登陆
        {
                printf("CIPSEND DATA:%s\r\n",p1);
                u2_printf("%s",p1);
        }
        delay_ms(10);
//        LED0=!LED0;
        if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000)==0)
        {
//                LED1=!LED1;
        }
        delay_ms(1000);
        
//        while(1)
//        {
                if(sim900a_send_cmd("AT+CIPSEND",">",500)==0)//发送消息
                {
                        printf("CIPSEND DATA:%s\r\n",p);
                        u2_printf("3\r\nwerr\r\n%s\r\n%s\r\n%s\r\n%s\r\n",etbuf,ftbuf,heartdisplay,p);
                        connectsta=1;
                }
                else
                        connectsta=2;
                delay_ms(10);
//                LED0=!LED0;
                if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000)==0)
                {
//                        LED1=!LED1;
                }
                delay_ms(1000);
//                for(i=0;i<5;i++)//,自动间隔时间发送,i<10时,间隔为12s;i<58时,间隔为1min
//                {
//                        delay_ms(1000);
//                }
               
               
                if((timex%20)==0)
                {
//                        LED0=!LED0;
                        count++;        
                        if(connectsta==2||hbeaterrcnt>8)//连接中断了,或者连续8次心跳没有正确发送成功,则重新连接
                        {
                                sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",500);        //关闭连接
                                sim900a_send_cmd("AT+CIPSHUT","SHUT OK",500);                //关闭移动场景
                                if(sim900a_send_cmd("AT+CIPSTART=\"TCP\",\"XX.XXX.XX.XXX\",\"XXXX\"","OK",500))return 18;//尝试重新连接
                                connectsta=0;        
                                 hbeaterrcnt=0;
                        }
                }
                if(connectsta==0&&(timex%200)==0)//连接还没建立的时候,每2秒查询一次CIPSTATUS.
                {
                        sim900a_send_cmd("AT+CIPSTATUS","OK",500);        //查询连接状态
                        if(strstr((const char*)USART2_RX_BUF,"CLOSED"))connectsta=2;
                        if(strstr((const char*)USART2_RX_BUF,"CONNECT OK"))connectsta=1;
                }
                if(connectsta==1&&timex>=600)//连接正常的时候,每6秒发送一次心跳
                {
                        timex=0;
                        if(sim900a_send_cmd("AT+CIPSEND",">",200)==0)//发送数据
                        {
                                sim900a_send_cmd((u8*)0X00,0,0);        //发送数据:0X00  
                                delay_ms(20);                                                //必须加延时
                                sim900a_send_cmd((u8*)0X1A,0,0);        //CTRL+Z,结束数据发送,启动一次传输        
                        }else sim900a_send_cmd((u8*)0X1B,0,0);        //ESC,取消发送                 
                        hbeaterrcnt++;
                        printf("hbeaterrcnt:%d\r\n",hbeaterrcnt);//方便调试代码
                }
                delay_ms(10);
                if(USART2_RX_STA&0X8000)                //接收到一次数据了
                {
                        USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;        //添加结束符
                        printf("%s",USART2_RX_BUF);                                //发送到串口  
                        if(hbeaterrcnt)                                                        //需要检测心跳应答
                        {
                                if(strstr((const char*)USART2_RX_BUF,"SEND OK"))hbeaterrcnt=0;//心跳正常
                        }                                
                        USART2_RX_STA=0;
                }
               
                timex++;
//        }        
        return 0;
}



回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-4-20
在线时间
27 小时
发表于 2016-7-24 20:25:03 | 显示全部楼层
自从调式成功后,试了几次,都没问题,放了一会儿,发现GPRS的灯总是一会儿就熄灭了。就再也不通了。。不开心
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2016-7-25 15:09:08 | 显示全部楼层
思否学否 发表于 2016-7-24 20:25
自从调式成功后,试了几次,都没问题,放了一会儿,发现GPRS的灯总是一会儿就熄灭了。就再也不通了 ...

检查看看是不是硬件接线没接好,加油
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2015-4-20
在线时间
27 小时
发表于 2016-7-26 19:58:53 | 显示全部楼层
残风乱了温柔 发表于 2016-7-25 15:09
检查看看是不是硬件接线没接好,加油

放了一晚上,再试就好了,,,
回复

使用道具 举报

胡枫 该用户已被删除
发表于 2017-2-18 19:34:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

31

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2016-6-16
在线时间
46 小时
发表于 2017-2-22 10:41:54 | 显示全部楼层
楼主请教一个问题,在用串口调试模块的时候,模块发送数据返回CLOSED,是怎么回事
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-2-26 11:19:24 | 显示全部楼层
洋洋阳阳 发表于 2017-2-22 10:41
楼主请教一个问题,在用串口调试模块的时候,模块发送数据返回CLOSED,是怎么回事

你发送数据之前的初始化都运行正常吗?
回复

使用道具 举报

31

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2016-6-16
在线时间
46 小时
发表于 2017-2-27 16:54:40 | 显示全部楼层
残风乱了温柔 发表于 2017-2-26 11:19
你发送数据之前的初始化都运行正常吗?

嗯额,问题解决了, 是服务器的问题
回复

使用道具 举报

8

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2016-12-14
在线时间
75 小时
发表于 2017-2-28 13:58:19 | 显示全部楼层
来学习下。。。。
书山有路勤为径,学海无涯苦作舟!
回复

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-4-10 16:54:54 | 显示全部楼层
谢谢分享 大概明白怎么用了
笑着熬下去@_@
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-4-30 10:08:57 | 显示全部楼层
> 1  werr werr SEND OK 1.login succeed! AT+CIPSEND  > 3 fggh Happy Birthday!!! SEND OK AT+CIPSEND  > 3  fggh Good Good Study SEND OK AT+CIPCLOSE 楼主 nizhe
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-4-30 10:10:29 | 显示全部楼层
> 1          //这部分的内容格式是与服务器的通信协议
werr
werr
SEND OK
1.login succeed!
AT+CIPSEND

> 3
fggh
Happy Birthday!!!
SEND OK
AT+CIPSEND

> 3
fggh
Good Good Study
SEND OK
AT+CIPCLOSE
楼主 你这边的1 3 3是干嘛的和函数sim900a_gprs_test(u8 *p)的*p有关吗?
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-4-30 10:28:13 | 显示全部楼层
楼主 为什么我用你的代码换掉原子哥的sim900a那部分代码进行测试网络调试助手收不到消息
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-4-30 17:38:19 | 显示全部楼层
发条橙子玩电子 发表于 2017-4-30 10:10
> 1          //这部分的内容格式是与服务器的通信协议
werr
werr

这部分是我用的服务器的通信协议格式,不同服务器可能会有不同
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-4-30 17:42:47 | 显示全部楼层
发条橙子玩电子 发表于 2017-4-30 10:28
楼主 为什么我用你的代码换掉原子哥的sim900a那部分代码进行测试网络调试助手收不到消息

这个可能与你使用的服务器有较大关系。要么你的消息没发到服务器,要么服务器有问题没发到这边的网络
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-5-1 07:43:48 | 显示全部楼层
残风乱了温柔 发表于 2017-4-30 17:42
这个可能与你使用的服务器有较大关系。要么你的消息没发到服务器,要么服务器有问题没发到这边的网络

我没有使用服务器 只是自己编了个上位机 用串口发消息已经验证可以接收到
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-5-1 08:09:02 | 显示全部楼层
sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //关闭连接
        sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);                //关闭移动场景
        if(sim900a_send_cmd("AT+CGCLASS=\"B\"","OK",1000))return 8;//设置移动台类别为B
        if(sim900a_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",1000))return 9;//设置PDP上下文
        if(sim900a_send_cmd("AT+CGATT=1","OK",500))return 10;//附着GPRS业务
        if(sim900a_send_cmd("AT+CIPCSGP=1,\"CMNET\"","OK",500))return 11;//设置GPRS连接,接入点为”CMNET”
        if(sim900a_send_cmd("AT+CLPORT=\"TCP\",\"2000\"","OK",500))return 12;//设置本地 TCP 连接端口为 2000
        if(sim900a_send_cmd("AT+CIPSTART=\"TCP\",\"xxx.xxx.xx.xxx\",\"xxxx\"","OK",500))return 13;
        delay_ms(1000);
还有 请教下 这边返回的8呀9呀11 12等返回到哪了 有什么用呢
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-5-1 08:18:16 | 显示全部楼层
还有请问下 你主函数中 sim900a_gprs_test(p);参数填的是什么呢 (学的不好 可能问的问题比较低级 望见谅!)
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-5-3 12:01:03 | 显示全部楼层
发条橙子玩电子 发表于 2017-5-1 08:09
sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //关闭连接
        sim900a_send_cmd("AT+C ...

这些8,9,10等等,只是我为了方便调试自己写的。你自己完全可以按照你的方式来
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-5-3 12:03:48 | 显示全部楼层
发条橙子玩电子 发表于 2017-5-1 08:18
还有请问下 你主函数中 sim900a_gprs_test(p);参数填的是什么呢 (学的不好 可能问的问题比较低级 望见谅! ...

填的是我想要通过GPRS发送到服务器的数据内容
回复

使用道具 举报

15

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2016-1-18
在线时间
61 小时
发表于 2017-5-3 12:12:23 | 显示全部楼层
楼主,请教一下,我最近在用SIM900A做收发短信,但是SIM900A收发时回复的应答信号是乱码,这你有遇到吗?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-5-15
在线时间
2 小时
发表于 2017-5-15 19:11:14 | 显示全部楼层
关于你七楼的能具体说说为什么经过了CH340,RX和TX对接就不对了呢?谢谢了啊。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-5-15
在线时间
2 小时
发表于 2017-5-15 19:11:32 | 显示全部楼层
已收藏你的帖子
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-5-22
在线时间
0 小时
发表于 2017-5-22 15:57:05 | 显示全部楼层
请问一下sim900a_check_status()这个函数是怎么定义的啊?还有他的功能是什么?谢谢!
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-5-28 14:37:18 | 显示全部楼层
JokerQuan 发表于 2017-5-22 15:57
请问一下sim900a_check_status()这个函数是怎么定义的啊?还有他的功能是什么?谢谢!

//ATK-SIM900A 各项测试(拨号测试、短信测试、GPRS测试)共用代码
//sim900a发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果
//    其他,期待应答结果的位置(str的位置)
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART2_RX_STA&0X8000)                //接收到一次数据了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
//                printf("%s\r\n",USART2_RX_BUF);
                strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2017-5-4
在线时间
28 小时
发表于 2017-6-13 20:01:07 | 显示全部楼层
楼主,你是103的板子还是407的
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-6-18 20:36:28 | 显示全部楼层
ivy0626 发表于 2017-6-13 20:01
楼主,你是103的板子还是407的

我用的是103,407应该也可以用
回复

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2015-10-3
在线时间
65 小时
 楼主| 发表于 2017-6-18 20:42:28 | 显示全部楼层
大好大 发表于 2017-5-3 12:12
楼主,请教一下,我最近在用SIM900A做收发短信,但是SIM900A收发时回复的应答信号是乱码,这你有遇到吗?

没有遇到过这种问题,你看看是不是AT+CSCS=\"GSM\"这个命令的问题
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-5-7
在线时间
3 小时
发表于 2019-5-9 17:08:32 | 显示全部楼层
楼主还在吗?能加下联系方式吗? 有些问题麻烦讲解一下/
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-5-7
在线时间
3 小时
发表于 2019-5-9 17:08:55 | 显示全部楼层
1829233823
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-5-31
在线时间
4 小时
发表于 2019-9-22 23:39:46 | 显示全部楼层
楼主能不能加个QQ,我有些问题想请教一下QQ:703243283
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-9-23
在线时间
0 小时
发表于 2019-9-23 18:58:30 | 显示全部楼层
sim900A和sim800C哪个好使?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2020-3-15
在线时间
6 小时
发表于 2020-3-28 15:31:23 | 显示全部楼层
朋友,我想问问,你在调试的时候,比如你用的是串口2和SIM800A通信 ,那么你是通过再加一个串口来监控串口2的通信情况吗?在你给出的代码里面,没有看到这方面的内容
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-3-19
在线时间
3 小时
发表于 2020-3-31 09:47:34 | 显示全部楼层
SIM900A已经停产了,从技术上来说确实很棒,不过技术应该是服务于市场的,现在不仅是SIM900,SIM800,连中国移动GPRS也要退网了,所以还是尽早研究CAT1这种的比较符合实际需求。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2021-4-20
在线时间
2 小时
发表于 2021-5-5 15:04:06 | 显示全部楼层
1111111111111111111111111111111111
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2021-11-8
在线时间
3 小时
发表于 2021-11-23 21:08:47 | 显示全部楼层
插个眼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 09:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表