OpenEdv-开源电子网

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

为什么SIM900a代码植入ucosii系统中连接不成功

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-3-8
在线时间
4 小时
发表于 2017-3-26 17:00:29 | 显示全部楼层 |阅读模式
用SiM900A在ucosii系统中发送数据到服务器,在ucosii系统中新建一个gsm任务,然后进行发送数据,但是SIM900A一直连接不成功,实现不了实时通信。为什么sim900a_send_cmd("AT+CPIN?","OK",200)一直返回值是1(发送指令失败)void gsm_task(void *pdata)
{
       
        u8 *hua = mymalloc(100);
        char a = 'a' ;       
        sprintf((char*)hua,"%c",a);
       
        while(1)
        {
               
               
                sim900a_send_data(hua)        ;       
       
        }
}

gsm.c文件中:
#include "gsm.h"
#include "usart.h"               
#include "delay.h"                            
#include "malloc.h"
#include "string.h"           
#include "usart2.h"
#include "led.h"
#include "dma.h"
//sim900a·¢ËíÃüáîoó,¼ì2a½óêÕμ½μÄó|′e
//str:Æú′yμÄó|′e½á1û
//·μ»ØÖμ:0,ûóDμÃμ½Æú′yμÄó|′e½á1û
//    ÆäËû,Æú′yó|′e½á1ûμÄλÖÃ(strμÄλÖÃ)
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART2_RX_STA&0X8000)                //½óêÕμ½ò»′Îêy¾YáË
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//ìí¼ó½áêø·û
                strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
//Ïòsim900a·¢ËíÃüáî
//cmd:·¢&#203;íμ&#196;&#195;üá&#238;×&#214;·&#251;′&#174;(2&#187;Dèòaìí&#188;ó&#187;&#216;3μá&#203;),μ±cmd<0XFFμ&#196;ê±oò,·¢&#203;íêy×&#214;(±èè&#231;·¢&#203;í0X1A),′óóúμ&#196;ê±oò·¢&#203;í×&#214;·&#251;′&#174;.
//ack:&#198;ú′yμ&#196;ó|′e&#189;á1&#251;,è&#231;1&#251;&#206;a&#191;&#213;,&#212;ò±íê&#190;2&#187;Dèòaμè′yó|′e
//waittime:μè′yê±&#188;&#228;(μ¥&#206;&#187;:10ms)
//·μ&#187;&#216;&#214;μ:0,·¢&#203;í3é1|(μ&#195;μ&#189;á&#203;&#198;ú′yμ&#196;ó|′e&#189;á1&#251;)
//       1,·¢&#203;í꧰ü
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);        //μè′yí¨μà7′&#171;ê&#228;íê3é   
                USART2->DR=(u32)cmd;
        }
        else u2_printf("%s\r\n",cmd);//·¢&#203;í&#195;üá&#238;
        if(ack&&waittime)                //Dèòaμè′yó|′e
        {
                while(--waittime)        //μè′yμ1&#188;&#198;ê±
                {
                         delay_ms(10);
                        if(USART2_RX_STA&0X8000)//&#189;óê&#213;μ&#189;&#198;ú′yμ&#196;ó|′e&#189;á1&#251;
                        {
                                if(sim900a_check_cmd(ack))break;//μ&#195;μ&#189;óDD§êy&#190;Y
                                USART2_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        return res;
}

u8 sim900a_gsminfo(u16 x,u16 y)
{
        u8 *p,*p1,*p2;
        u8 res=0;
        p=mymalloc(50);//éê&#199;&#235;50&#184;&#246;×&#214;&#189;úμ&#196;&#196;ú′&#230;        
        USART2_RX_STA=0;
        if(sim900a_send_cmd("AT+CPIN?","OK",200)){
        RED_LED=0;
        delay_ms(100);
        RED_LED=1;
        delay_ms(50);
        RED_LED=0;
        delay_ms(100);
        RED_LED=1;
        delay_ms(1500);
        res|=1<<0;        }//2é&#209;ˉSIM&#191;¨ê&#199;·&#241;&#212;ú&#206;&#187;
        USART2_RX_STA=0;  
        if(sim900a_send_cmd("AT+COPS?","OK",200)==0)                //2é&#209;ˉ&#212;&#203;óaéì&#195;&#251;×&#214;
        {
               
                USART2_RX_STA=0;       
               
        }
        else res|=1<<1;
        if(sim900a_send_cmd("AT+CSQ","+CSQ:",200)==0)                //2é&#209;ˉD&#197;o&#197;&#214;êá&#191;
        {
                USART2_RX_STA=0;

        }else res|=1<<2;
        if(sim900a_send_cmd("AT+CBC","+CBC:",200)==0)                //2é&#209;ˉμ&#231;3&#216;μ&#231;á&#191;
        {
                USART2_RX_STA=0;               
        }else res|=1<<3;
       
        if(sim900a_send_cmd("AT+CCLK?","+CCLK:",200)==0)                //éè&#214;&#195;ê±&#214;ó  +CCLK:
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),"\"");
                p2=(u8*)strstr((const char*)(p1+1),":");
                p2[3]=0;//&#188;óè&#235;&#189;áê&#248;·&#251;
                sprintf((char*)p,"è&#213;&#198;úê±&#188;&#228;:%s",p1+1);
                USART2_RX_STA=0;               
        }else res|=1<<4;
       
        myfree(p);
        return res;
}

const u8* kbd_tbl2[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
const u8 *modetbl[2]={"TCP","UDP"};//á&#172;&#189;ó&#196;£ê&#189;
//sim900a·¢&#198;eá&#172;&#189;ó·t&#206;&#241;&#198;÷
//·μ&#187;&#216;&#214;μ:1,á&#172;&#189;ó3é1|
//       0,á&#172;&#189;ó꧰ü      
u8 sim900a_gprs_connect(void)
{
  u8 connectsta=0;                        //0,á&#172;&#189;ó꧰ü;1,á&#172;&#189;ó3é1|
        u8 mode=0;                                //0,TCPá&#172;&#189;ó;1,UDPá&#172;&#189;ó
        const u8 *port="8086";        //&#182;&#203;&#191;ú1ì&#182;¨&#206;a8086,μ±&#196;&#227;μ&#196;μ&#231;&#196;&#212;8086&#182;&#203;&#191;ú±&#187;&#198;&#228;&#203;&#251;3ìDò&#213;&#188;ó&#195;μ&#196;ê±oò,&#199;&#235;DT&#184;&#196;&#206;a&#198;&#228;&#203;&#251;&#191;&#213;&#207;D&#182;&#203;&#191;ú
        u8 ipbuf[16];                 //ip&#187;o′&#230;
        u8 *p=mymalloc(100);        //éê&#199;&#235;100×&#214;&#189;ú&#196;ú′&#230;;
        u8 sim_ready=0;
        while(sim_ready==0)
        {
                delay_ms(10);
        if(sim900a_gsminfo(40,225)==0) sim_ready=1;//SIM&#213;y3£
                else sim_ready=0;//SIM2&#187;&#213;y3£       

        }
        sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //1&#216;±&#213;á&#172;&#189;ó
        sim900a_send_cmd("AT+CIPSHUT","SHUT OK",100);                //1&#216;±&#213;ò&#198;&#182;ˉ3&#161;&#190;°
        if(sim900a_send_cmd("AT+CGCLASS=\"B\"","OK",1000))return 0;                                //éè&#214;&#195;GPRSò&#198;&#182;ˉì¨àà±e&#206;aB,&#214;§3&#214;°ü&#189;&#187;&#187;&#187;oíêy&#190;Y&#189;&#187;&#187;&#187;
        if(sim900a_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",1000))return 0;//éè&#214;&#195DPé&#207;&#207;&#194;&#206;&#196;,&#187;¥áaí&#248;&#189;óD-òé,&#189;óè&#235;μ&#227;μèD&#197;&#207;¢
        if(sim900a_send_cmd("AT+CGATT=1","OK",500))return 0;                                        //&#184;&#189;×&#197;GPRSòμ&#206;&#241;
        if(sim900a_send_cmd("AT+CIPCSGP=1,\"CMNET\"","OK",500))return 0;                 //éè&#214;&#195;&#206;aGPRSá&#172;&#189;ó&#196;£ê&#189;
        if(sim900a_send_cmd("AT+CIPHEAD=1","OK",500))return 0;                                         //éè&#214;&#195;&#189;óê&#213;êy&#190;Y&#207;&#212;ê&#190;IPí·(·&#189;±&#227;&#197;D&#182;&#207;êy&#190;Yà′&#212;′)
        //ipμ&#216;&#214;·
        ipbuf[0] = kbd_tbl2[0][0];//1
        ipbuf[1] = kbd_tbl2[1][0];//2
        ipbuf[2] = kbd_tbl2[10][0];//0
        ipbuf[3] = kbd_tbl2[9][0];//.
        ipbuf[4] = kbd_tbl2[6][0]; //7
        ipbuf[5] = kbd_tbl2[6][0];//7
        ipbuf[6] = kbd_tbl2[9][0];//.
        ipbuf[7] = kbd_tbl2[3][0];//4
        ipbuf[8] = kbd_tbl2[1][0];//2
        ipbuf[9] = kbd_tbl2[9][0]; //.
        ipbuf[10] = kbd_tbl2[4][0];//5
        ipbuf[11] = kbd_tbl2[5][0];//6
        USART2_RX_STA=0;
        sprintf((char*)p,"AT+CIPSTART=\"%s\",\"%s\",\"%s\"",modetbl[mode],ipbuf,port);
       
        while(connectsta==0)
        {
                if(sim900a_send_cmd(p,"OK",500))  //·¢&#198;eá&#172;&#189;ó
                        connectsta=0;               //á&#172;&#189;ó꧰ü
                else connectsta=1;           //á&#172;&#189;ó3é1|
                        delay_ms(10);
  }

        return connectsta;
}
//sim900a·¢&#203;íêy&#190;Yμ&#189;·t&#206;&#241;&#198;÷
//USART1_RX_BUF:òa·¢&#203;íμ&#196;êy&#190;Y
void sim900a_send_data(u8* USART1_RX_BUF)
{
        u8 data_sta=0;      //0£o·¢&#203;íêy&#190;Y꧰ü;1£o·¢&#203;íêy&#190;Y3é1|
        u8 flag=0;         //0£osim900aá&#172;&#189;ó꧰ü;1£osim900aá&#172;&#189;ó3é1|
        u8 *p1=mymalloc(100);        //éê&#199;&#235;100×&#214;&#189;ú&#196;ú′&#230;;
        flag=sim900a_gprs_connect();
        USART2_RX_STA=0;       
       
                if(flag)     //sim900aá&#172;&#189;ó3é1|
                {
                       
                        while(data_sta==0)
                        {
                                       
                                if(sim900a_send_cmd("AT+CIPSEND",">",500)==0)                //·¢&#203;íêy&#190;Y
                                {
                                       
                                        sprintf((char*)p1,"%s",USART1_RX_BUF);
                                        u2_printf("%s",p1); //·¢&#203;íêy&#190;Y
                                        delay_ms(10);
                                        if(sim900a_send_cmd((u8*)0X1A,"SEND OK",1000)==0)//×&#238;3¤μè′y10s
                                        data_sta=1;         //·¢&#203;í3é1|
                                        else data_sta=0;   //·¢&#203;í꧰ü
                                        delay_ms(500);
                                }
                                else
                                {
                                        sim900a_send_cmd((u8*)0X1B,0,0);                //ESC,è&#161;&#207;&#251;·¢&#203;í
                                        data_sta=0;
                                }
                        }
                }
                myfree(p1);
}




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-3-8
在线时间
4 小时
 楼主| 发表于 2017-3-27 20:07:32 | 显示全部楼层
求教各位大神,急!谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 19:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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