AT命令 AT+CIPSEND

nicnac 2011-08-12 11:06:42
我的利用GPRS模块发一段数据“01 00 00 30 00”


sprintf (AtCMD, "AT+CIPSEND=%d\r\n", 20);
> 01 00 00 30 00
CTRL+Z

本来个很简单的事情

但是我PC收到的数据有三种情况:
1.“01 00 00 30 00” //正确
2.“0A 01 00 00 30 00” //多了个0A, 我觉得和"AT+CIPSEND=%d\r\n"中的最后一项\n有关,因为\n就是0x0A嘛~
3.“00 00 30 00” //少了最前面一项

请问各位大大这是为什么?我发送数据的buffer中确确实实存的就是“01 00 00 30 00”,但是已发送就...
这是怎么回事?我单步执行查看buffer中的数据也是“01 00 00 30 00”...
为什么会出现第二三种情况呢?(这种出错率有10%左右呢)

还有请问"AT+CIPSEND=%d\r\n" 中的\r\n有什么用呢?
我晓得AT命令都是以“AT开头 \r结尾的”,那这里的 \n又是什么作用呢?

各位一定要帮帮我!!!
...全文
2889 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhbbykeepworking 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aaaaaaa147 的回复:]
我真服了你.

你用调试工具看串口buf里的数据和实际给gprs模块的数据有什么关系啊


很可能是串口通讯的时候出错啦.

看这个最底层的是直接用示波器量串口线!
[/Quote]


7楼大哥,小弟求助。我在做一个项目,arm处理器将收集到的信息通过gprs模块传到公网上。我从来没有接触过arm、gprs模块,完全是零基础。我一点概念都没有。我觉得是在arm中编写程序,作用是发出at指令给gprs模块,并且将信息传给模块。不知道是否这样理解。
还有问题是,我不知道需不需要对传给gprs模块的信息进行重新编码,类似短信编码那种,不过我想通过数据包的形式传上网。请给些指点。还有,跪求推荐gprs模块。。。。万分感谢啊
aaaaaaa147 2011-08-19
  • 打赏
  • 举报
回复
我真服了你.

你用调试工具看串口buf里的数据和实际给gprs模块的数据有什么关系啊


很可能是串口通讯的时候出错啦.

看这个最底层的是直接用示波器量串口线!
nicnac 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sinanjj 的回复:]

使用的调试软件设置换行.

串口通讯的时间间隔注意调整
[/Quote]
那么请问,我发送数据的buffer中确确实实存的就是“01 00 00 30 00”,但是一发送就...
这是怎么回事?我单步执行查看buffer中的数据也是“01 00 00 30 00”...
为什么会出现第二三种情况呢?(这种出错率有10%左右呢)
nicnac 2011-08-18
  • 打赏
  • 举报
回复
我发送数据的buffer中确确实实存的就是“01 00 00 30 00”,但是已发送就...
这是怎么回事?我单步执行查看buffer中的数据也是“01 00 00 30 00”...
为什么会出现第二三种情况呢?(这种出错率有10%左右呢)[Quote=引用 3 楼 sinanjj 的回复:]

使用的调试软件设置换行.

串口通讯的时间间隔注意调整
[/Quote]
ffeige1984 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nicnac 的回复:]
我擦
[/Quote]

不喜欢,貌似90后吧 \R\N 就是回车 代表你要发送的东西发送完了,我用的模块\R\N 和\N是一样的
由于每家的GPRS模块的命令有所区别,在发帖是注明GPRS模块型号
nicnac 2011-08-13
  • 打赏
  • 举报
回复
尼玛啊,我再顶!!!!!!!!!!!!!!!!!!!!!!
sinanjj 2011-08-13
  • 打赏
  • 举报
回复
使用的调试软件设置换行.

串口通讯的时间间隔注意调整
nicnac 2011-08-12
  • 打赏
  • 举报
回复
我擦,怎么没人,要顶啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
PM2.5检测实现,WiFi模块esp8266实现: #include "esp8266.h" #include "pm.h" char Cache[40]; char Result[2]; char data*data wifi="2021"; char data*data wifiword="20212021"; char data*data TCP="183.230.40.40"; char data*data TCP_port="1811"; char data*data key="*251177#test#test*"; int state; int state_OK=1; int i=0; //计数 void Wifi_state(int state1){ switch(state1){ case 0: Wifi_Com("AT+CWMODE=1");Wifi_OK();break; case 1: Wifi_Com("AT+RST");Wifi_OK();break; case 2: Wifi_Com("AT+CIPMUX=0");Wifi_OK();break; case 3: Wifi_Hotspot(wifi,wifiword);Wifi_OK();break; case 4: Wifi_Com("AT+CIPMODE=1");Wifi_OK();break; case 5: Wifi_Tcp(TCP,TCP_port);Wifi_OK();break; case 6: Wifi_Com("AT+CIPSEND");delayms(2000);Wifi_dat(key);delayms(5000);state++;break; } if(state<7){ Wifi_state(state); }else{ if(state==7){ Wifi_dat("+++");delayms(1000);Wifi_Com("AT+CIPSEND");delayms(2000);Wifi_dat(30);delayms(2000);Wifi_dat(30);delayms(5000); } return; } } void Wifi_OK(){ //判断OK unsigned long int i=0; while(state_OK){ i++; if(i==1000000){ state=0; return; } } state_OK=1; state++; } void Wifi_dat(char* dat){ send(dat); } void Wifi_Tcp(char* TCP,char* TCP_port){ //连接TCP sprintf((char*)Cache,"AT+CIPSTART=\"TCP\",\"%s\",%s",TCP,TCP_port); send(Cache); send("\r\n"); Cache_clear(); } void Wifi_Hotspot(char* wifi,char* wifiword){ //连接WIFI delayms(2000); sprintf((char*)Cache,"AT+CWJAP=\"%s\",\"%s\"",wifi,wifiword); send(Cache); send("\r\n"); Cache_clear(); } void Wifi_Com(char* Com){ //发送命令 sprintf((char*)Cache,"%s",Com); send(Cache); send("\r\n"); Cache_clear(); } void Cache_clear(){ int j; for(j=0;j<40;j++){ Cache[j]=0; } } void sbu() interrupt 4{ uchar num; if(RI==0) return; ES=0; RI=0; num=SBUF; Result[i]=num; i=(i+1)%2; if((num=='K')&&(Result[i]=='O')){ //OK, i=K i-1=O; 0=O 1=K 0=K 1=O state_OK=0; } ES=1; } void send(uchar *p){ int i=0; do{ SBUF=p[i++]; while(TI==0); TI=0; } while(p[i]!=0); } void UartInit(void) //115200bps@11.0592MHz { SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设定定时器1为16位自动重装方式 TL1 = 0xE8; //设定定时初值 TH1 = 0xFF; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 }

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧