OpenEdv-开源电子网

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

BC28接收服务器数据失败!!!!求大佬帮忙看看

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-9-11
在线时间
7 小时
发表于 2020-10-2 09:47:47 | 显示全部楼层 |阅读模式
5金钱
最近买了一个BC28想做一个智慧路灯,已经可以向服务器发送数据了,但是,测试服务器发的数据接收不到,而且每次发送数据超过两个的时候就会自动和服务器断开连接,作为新手,真的好焦虑,不知道是什么原因,求大佬告知。
代码如下:


#include "bc28.h"
#include "string.h"
#include "usart.h"
#include "wdg.h"
#include "led.h"
char *strx,*extstrx;
extern char  RxBuffer[100],RxCounter;
BC28 BC28_Status;
unsigned char socketnum=0;//当前的socket号码
void Clear_Buffer(void)//清空缓存
{
        u8 i;
        Uart3_SendStr(RxBuffer);
        for(i=0;i<100;i++)
        RxBuffer[i]=0;//缓存
        RxCounter=0;
        IWDG_Feed();//喂狗
   
}
void BC28_Init(void)
{
    printf("AT\r\n");
    delay_ms(300);
    strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
    Clear_Buffer();   
    while(strx==NULL)
    {
        Clear_Buffer();   
        printf("AT\r\n");
        delay_ms(300);
        strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
    }
    printf("AT+CFUN=1\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
    delay_ms(300);
    printf("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
    delay_ms(300);
    strx=strstr((const char*)RxBuffer,(const char*)"460");//返460,表明识别到卡了
    Clear_Buffer();   
    while(strx==NULL)
    {
        Clear_Buffer();   
        printf("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
        delay_ms(300);
        strx=strstr((const char*)RxBuffer,(const char*)"460");//返回OK,说明卡是存在的
    }
       printf("AT+CGATT=1\r\n");//激活网络,PDP
        delay_ms(300);
        strx=strstr((const char*)RxBuffer,(const char*)"OK");//返OK
        Clear_Buffer();   
        printf("AT+CGATT?\r\n");//查询激活状态
        delay_ms(300);
        strx=strstr((const char*)RxBuffer,(const char*)"+CGATT:1");//返1
        Clear_Buffer();   
        while(strx==NULL)
        {
            Clear_Buffer();   
            printf("AT+CGATT?\r\n");//获取激活状态
            delay_ms(300);
            strx=strstr((const char*)RxBuffer,(const char*)"+CGATT:1");//返回1,表明注网成功
        }
                        printf("AT+CSQ\r\n");//查看获取CSQ值
                        delay_ms(300);
                        strx=strstr((const char*)RxBuffer,(const char*)"+CSQ");//返回CSQ
        if(strx)
        {
        BC28_Status.CSQ=(strx[7]-0x30)*10+(strx[8]-0x30);//获取CSQ
        if((BC28_Status.CSQ==99)||((strx[7]-0x30)==0))//说明扫网失败
        {
            while(1)
            {
                    BC28_Status.netstatus=0;
                    Uart3_SendStr("信号搜索失败,请查看原因!\r\n");
                    RESET=1;//拉低
                    delay_ms(300);
                    delay_ms(300);   
                    RESET=0;//复位模块
                    delay_ms(300);//没有信号就复位
                                       
            }
        }
                 else
                 {
                         BC28_Status.netstatus=1;
                    }  
                }
        Clear_Buffer();
        }



/*void BC28_CreateUDPSokcet(void)//创建sokcet
{
      u8 i;
    for(i=0;i<5;i++)
    {
        printf("AT+NSOCL=%c\r\n",i+0x30);//关闭上一次socekt连接
        delay_ms(300);
    }
    Clear_Buffer();   
    printf("AT+NSOCR=DGRAM,17,60000,1\r\n");//开启SOCKET连接
    delay_ms(300);
    socketnum=RxBuffer[2];//获取当前的socket号码  
   
}*/

void BC28_CreateTCPSokcet(void)//创建sokcet
{
      uint8_t i;
    for(i=0;i<5;i++)
    {
        printf("AT+NSOCL=%c\r\n",i+0x30);//关闭socekt连接,主要是需要关闭上次的连接,如果用户选择不关闭连接,再重新再同一个端口建立SOCKET就会报错
        delay_ms(300);
    }
                Clear_Buffer();
        //    printf("AT+CSCON?\r\n");
                printf("AT+NSOCR=STREAM,6,60000,1\r\n");                       //创建TCP SOCKET
                delay_ms(300);
                socketnum=RxBuffer[2];//获取当前的socket号码
                printf("AT+NSOCO=%c,118.31.54.195,7788\r\n",socketnum);//连接服务器
            
                delay_ms(300);
                strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  while(strx==NULL)
  {
                strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  }
    Clear_Buffer();
    //    return  socketnum;
}

//数据发送函数
/*void BC28_UDPSend(uint8_t *len,uint8_t *data)
{
   printf("AT+NSOST=%c,118.31.54.195,7889,%s,%s\r\n",socketnum,len,data);//发送0socketIP和端口后面跟对应数据长度以及数据,
    delay_ms(300);
    strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  while(strx==NULL)
  {
    strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  }
    Clear_Buffer();
}*/

//数据发送函数
void BC28_TCPSend(uint8_t *len,uint8_t *data)
{
     
            printf("AT+NSOSD=%c,%s,%s\r\n", socketnum,len,data);//发送数据,字符
            delay_ms(300);

            strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  while(strx==NULL)
  {
    strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
  }
        Clear_Buffer();   

}

void BC28_RECData(void)
{

     // char i;
    strx=strstr((const char*)RxBuffer,(const char*)"+QSONMI");//返回+QSONMI,表明接收到TCP服务器发回的数据
      delay_ms(300);
        Clear_Buffer();
     
    while(strx)
    {
            printf("AT+NSORF=%c,%s\r\n",BC28_Status.Socketnum,BC28_Status..recdata[10]);
            strx=strstr((const char*)RxBuffer,(const char*)"OK");         
    }
      Clear_Buffer();
}



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

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2020-10-15 20:57:26 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 22:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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