完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在写GPRS模块的时候,按照原子的历程用while(sim800c_send_cmd("AT","OK",500))一直执行老是执行不过去,我取消了这个循环,直接使用sim800c_send_cmd("AT","OK",500),其他的按连接GPRS设置发送指令,能连接上平台,这是什么原因?
|
|
相关推荐
5个回答
|
|
[C] 纯文本查看 复制代码
//usmart支持部分//将收到的AT指令应答数据返回给电脑串口//mode:0,不清零USART3_RX_STA;// 1,清零USART3_RX_STA;void sim_at_response(u8 mode){if(USART3_RX_STA&0X8000)//接收到一次数据了{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符printf("%s",USART3_RX_BUF);//发送到串口if(mode)USART3_RX_STA=0;} }/////////////////////////////////////////////////////////////////////////////////////////////////////////// //ATK-SIM800C 各项测试(拨号测试、短信测试、GPRS测试,蓝牙测试)共用代码//SIM800C发送命令后,检测接收到的应答//str:期待的应答结果//返回值:0,没有得到期待的应答结果//其他,期待应答结果的位置(str的位置)u8* sim800c_check_cmd(u8 *str){char *strx=0;if(USART3_RX_STA&0X8000)//接收到一次数据了{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符 相当于心跳检测,保持通讯strx=strstr((const char*)USART3_RX_BUF,(const char*)str);//相当于在一个字符串中寻找是否存在另一个字符串且返回它的位置printf("%s",USART3_RX_BUF);//发送到串口} return (u8*)strx;}//SIM800C发送命令//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.//ack:期待的应答结果,如果为空,则表示不需要等待应答//waittime:等待时间(单位:10ms)//返回值:0,发送成功(得到了期待的应答结果)// 1,发送失败u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime){u8 res=0; USART3_RX_STA=0;if((u32)cmd<=0XFF){while((USART3->SR&0X40)==0);//等待上一次数据发送完成 USART3->DR=(u32)cmd;}else {u3_printf("%srn",cmd);}//发送命令if(ack&&waittime)//需要等待应答{while(--waittime)//等待倒计时{ delay_ms(10);if(USART3_RX_STA&0X8000)//接收到期待的应答结果{if(sim800c_check_cmd(ack))break;//得到有效数据 USART3_RX_STA=0;} }if(waittime==0)res=1; }return res;}////GPRS测试部分代码//tcp测试//带心跳功能,以维持连接//ipaddr:ip地址//port:端口 void sim800c_tcp_test(u8* ipaddr,u8* port){u8 *p;p=mymalloc(SRAMIN,100);//申请100字节内存USART3_RX_STA=0;sprintf((char*)p,"AT+CIPSTART="TCP","%s","%s"",ipaddr,port);sim800c_send_cmd(p,"OK",500);myfree(SRAMIN,p);}//SIM800C GPRS测试//用于测试TCP/UDP连接//返回值:0,正常//其他,错误代码u8 sim800c_gprs_test(void){if(sim800c_send_cmd("AT+CGCLASS="B"","OK",1000))return 1;//设置GPRS移动台类别为B,支持包交换和数据交换 if(sim800c_send_cmd("AT+CGDCONT=1,"IP","CMNET"","OK",1000))return 2;//设置PDP上下文,互联网接协议,接入点等信息if(sim800c_send_cmd("AT+CGATT=1","OK",500))return 3;//附着GPRS业务if(sim800c_send_cmd("AT+CIPCSGP=1,"CMNET"","OK",500))return 4; //设置为GPRS连接模式if(sim800c_send_cmd("AT+CIPHEAD=1","OK",500))return 5; //设置接收数据显示IP头(方便判断数据来源)} //SIM800C主测试程序void sim800c_test(void){ while(sim800c_send_cmd("AT","OK",500));//检测是否应答AT指令 sim_at_response(1);// sim800c_send_cmd("ATE0","OK",200);//不回显//ntp_update();//网络同步时间delay_ms(10); }/******************************************************************** data 发送的数据 len 数据长度 gprs_channel 通道*********************************************************************/u8 gprs_send_data(u8* data,int len,u8 gprs_channel) //通过gprs发送数据,返回0表示发送成功 {u8 f=0,i=0;sim800c_send_cmd("AT+CIPSEND",">",1000); //发送数据的指令for(i=0;i |
|
|
|
[C] 纯文本查看 复制代码
//usmart支持部分//将收到的AT指令应答数据返回给电脑串口//mode:0,不清零USART3_RX_STA;// 1,清零USART3_RX_STA;void sim_at_response(u8 mode){ if(USART3_RX_STA&0X8000) //接收到一次数据了 { USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符 printf("%s",USART3_RX_BUF); //发送到串口 if(mode)USART3_RX_STA=0; } }/////////////////////////////////////////////////////////////////////////////////////////////////////////// //ATK-SIM800C 各项测试(拨号测试、短信测试、GPRS测试,蓝牙测试)共用代码//SIM800C发送命令后,检测接收到的应答//str:期待的应答结果//返回值:0,没有得到期待的应答结果//其他,期待应答结果的位置(str的位置)u8* sim800c_check_cmd(u8 *str){ char *strx=0; if(USART3_RX_STA&0X8000) //接收到一次数据了 { USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符 相当于心跳检测,保持通讯 strx=strstr((const char*)USART3_RX_BUF,(const char*)str);//相当于在一个字符串中寻找是否存在另一个字符串且返回它的位置 printf("%s",USART3_RX_BUF); //发送到串口 } return (u8*)strx;}//SIM800C发送命令//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.//ack:期待的应答结果,如果为空,则表示不需要等待应答//waittime:等待时间(单位:10ms)//返回值:0,发送成功(得到了期待的应答结果)// 1,发送失败u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime){ u8 res=0; USART3_RX_STA=0; if((u32)cmd<=0XFF) { while((USART3->SR&0X40)==0);//等待上一次数据发送完成 USART3->DR=(u32)cmd; }else {u3_printf("%srn",cmd);}//发送命令 if(ack&&waittime) //需要等待应答 { while(--waittime) //等待倒计时 { delay_ms(10); if(USART3_RX_STA&0X8000)//接收到期待的应答结果 { if(sim800c_check_cmd(ack))break;//得到有效数据 USART3_RX_STA=0; } } if(waittime==0)res=1; } return res;}////GPRS测试部分代码//tcp测试//带心跳功能,以维持连接//ipaddr:ip地址//port:端口 void sim800c_tcp_test(u8* ipaddr,u8* port){ u8 *p; p=mymalloc(SRAMIN,100); //申请100字节内存 USART3_RX_STA=0; sprintf((char*)p,"AT+CIPSTART="TCP","%s","%s"",ipaddr,port); sim800c_send_cmd(p,"OK",500); myfree(SRAMIN,p);}//SIM800C GPRS测试//用于测试TCP/UDP连接//返回值:0,正常//其他,错误代码u8 sim800c_gprs_test(void){ if(sim800c_send_cmd("AT+CGCLASS="B"","OK",1000))return 1; //设置GPRS移动台类别为B,支持包交换和数据交换 if(sim800c_send_cmd("AT+CGDCONT=1,"IP","CMNET"","OK",1000))return 2;//设置PDP上下文,互联网接协议,接入点等信息 if(sim800c_send_cmd("AT+CGATT=1","OK",500))return 3; //附着GPRS业务 if(sim800c_send_cmd("AT+CIPCSGP=1,"CMNET"","OK",500))return 4; //设置为GPRS连接模式 if(sim800c_send_cmd("AT+CIPHEAD=1","OK",500))return 5; //设置接收数据显示IP头(方便判断数据来源)} //SIM800C主测试程序void sim800c_test(void){ while(sim800c_send_cmd("AT","OK",500));//检测是否应答AT指令 sim_at_response(1); // sim800c_send_cmd("ATE0","OK",200);//不回显 // ntp_update();//网络同步时间 delay_ms(10); }/******************************************************************** data 发送的数据 len 数据长度 gprs_channel 通道*********************************************************************/u8 gprs_send_data(u8* data,int len,u8 gprs_channel) //通过gprs发送数据,返回0表示发送成功 { u8 f=0,i=0; sim800c_send_cmd("AT+CIPSEND",">",1000); //发送数据的指令 for(i=0;i |
|
|
|
你这是不响应AT指令啊,直接连接电脑串口,调试下试试
|
|
|
|
直接连接串口是有指令回复的,AT指令发出去,串口3的接受buff里面也是能接受到返回的,但是就是在这种下sim800c_send_cmd("AT","OK",500)收不到返回结果为0。
|
|
|
|
模块上电后会自动发送一些信息出来,要避开这些,以免误把它们作为应答。延迟5s试试
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2363 浏览 5 评论
3209 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
665浏览 1评论
904浏览 0评论
1025浏览 0评论
668浏览 0评论
498浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:53 , Processed in 1.125863 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号