找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4422|回复: 3
打印 上一主题 下一主题
收起左侧

STM32驱动BC26程序开发—UDP透传

[复制链接]
跳转到指定楼层
楼主
BC26模块开发,实现UDP透传方式



STM32BC26源码如下:
#include "BC26.h"
#include "main.h"
#include "string.h"
char *strx,*extstrx;
char atstr[BUFLEN];
int err;  
char socketnum='0'
BC26 BC26_Status;

#define SERVERIP "47.104.238.90"
#define SERVERPORT 1001

void Clear_Buffer(void)
{
    printf(buf_uart2.buf);
    Delay(300);
    buf_uart2.index=0;
    memset(buf_uart2.buf,0,BUFLEN);
}

int BC26_Init(void)
{
    int errcount = 0;
    err = 0;  
    printf("start init BC26\r\n");
    Uart2_SendStr("AT\r\n");
    Delay(300);
    printf(buf_uart2.buf);   
    printf("get back BC26\r\n");
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
    Clear_Buffer();        
    while(strx==NULL)
    {
        printf("\r\nμ¥Ƭ»úÕyÔúᬽóμ½Ä£¿é...\r\n");
        Clear_Buffer();        
        Uart2_SendStr("AT\r\n");
        Delay(300);
        strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");
    }

    Uart2_SendStr("AT+CIMI\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"ERROR")
    if(strx==NULL)
    {
        printf("ÎòμÄ¿¨oÅêÇ : %s \r\n",&buf_uart2.buf[8]);
        Clear_Buffer();        
        Delay(300);
    }
    else
    {
        err = 1;
        printf("¿¨′íÎó : %s \r\n",buf_uart2.buf);
        Clear_Buffer();
        Delay(300);
    }

    Uart2_SendStr("AT+CGATT=1\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
    Clear_Buffer();        
    if(strx)
    {
        Clear_Buffer();        
        printf("init PDP OK\r\n");
        Delay(300);
    }
    Uart2_SendStr("AT+CGATT?\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1")
    Clear_Buffer();        
    errcount = 0;
    while(strx==NULL)
    {
        errcount++;
        Clear_Buffer();        
        Uart2_SendStr("AT+CGATT?\r\n")
        Delay(300);
        strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1")
        if(errcount>100)   
        {
            err=1;
            errcount = 0;
            break;
        }
    }


    Uart2_SendStr("AT+QBAND?\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
    if(strx)
    {
        printf("========BAND========= \r\n %s \r\n",buf_uart2.buf);
        Clear_Buffer();
        Delay(300);
    }

    Uart2_SendStr("AT+CSQ\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"+CSQ")
    if(strx)
    {
        printf("DÅoÅÖêá¿:%s\r\n",buf_uart2.buf);
        Clear_Buffer();
        Delay(300);
    }
    Uart2_SendStr("AT+CEREG?\r\n");
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"+CEREG: 0,1")
    extstrx=strstr((const char*)buf_uart2.buf,(const char*)"+CEREG: 1,1")
    Clear_Buffer();        
    errcount = 0;
    while(strx==NULL&&extstrx==NULL
    {
        errcount++;
        Clear_Buffer();
        Uart2_SendStr("AT+CEREG?\r\n")
        Delay(300);
        strx=strstr((const char*)buf_uart2.buf,(const char*)"+CEREG: 0,1")
        extstrx=strstr((const char*)buf_uart2.buf,(const char*)"+CEREG: 1,1")
        if(errcount>100)     //·àÖ1ËàÑ-»·
        {
            err=1;
            errcount = 0;
            break;
        }
    }
    return err;
}

//激活场景
void BC26_PDPACT(void
{
    int errcount = 0;
    Uart2_SendStr("AT+CGPADDR=1\r\n")
    Delay(300);
    Clear_Buffer();
    Uart2_SendStr("AT+CGATT?\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1")
    Clear_Buffer();        
    while(strx==NULL)
    {
        errcount++;
        Clear_Buffer();
        Uart2_SendStr("AT+CGATT?\r\n")
        Delay(300);
        strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1")
        if(errcount>100)   
        {
            errcount = 0;
            break;
        }
    }
    Uart2_SendStr("AT+QSOCL=0\r\n")
    Delay(300);
    Clear_Buffer();        
    printf("\r\njust close old socket\r\n");
}

//UDP连接
void BC26_ConUDP(void)
{
    int errcount = 0;
    Uart2_SendStr("AT+QSOC=1,2,1\r\n")
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"QSOC")
    strx=strstr((const char*)strx+1,(const char*)"QSOC");
    if(strx)
    {
      socketnum=strx[5];  

    }
    Clear_Buffer();
    printf("socket number = %c\r\n",socketnum);
    memset(atstr,0,BUFLEN);
    sprintf(atstr,"AT+QSOCON=%c,%d,\"%s\"\r\n",socketnum,SERVERPORT,SERVERIP);
    Uart2_SendStr(atstr)
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//·μ»ØOK
    errcount = 0;
    while(strx==NULL)
    {
        errcount++;
        strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
        if(errcount>100)  
        {
            errcount = 0;
            break;
        }
    }
    Clear_Buffer();        
}

//发送数据
void BC26_Senddata(uint8_t *len,uint8_t *data)
{
    int errcount=0;
    memset(atstr,0,BUFLEN);
    sprintf(atstr,"AT+QSOSEND=%c,%s,%s\r\n",socketnum,len,data);
    Uart2_SendStr(atstr)
    Delay(300);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
    while(strx==NULL)
    {
        errcount++;
        strx=strstr((const char*)buf_uart2.buf,(const char*)"OK")
        if(errcount>100)   
        {
            errcount = 0;
            break;
        }
    }
                strx=strstr((const char*)buf_uart2.buf,(const char*)"ERROR");
                if(strx)
                {
                                GPIO_SetBits(GPIOC,GPIO_Pin_7);                //
                                Delay(500);
                                GPIO_ResetBits(GPIOC,GPIO_Pin_7);
                                Delay(300);
                                NVIC_SystemReset();        //
                }
    Clear_Buffer();        

}

/*
+NSONMI:0,4
AT+NSORF=0,4
0,47.104.238.90,1001,4,31323334,0

OK*/
//接收数据
void BC26_RECData(void)
{
    strx=strstr((const char*)buf_uart2.buf,(const char*)"+QSONMI")
    if(strx)
    {
        Delay(300)
        Clear_Buffer();

    }
    memset(atstr,0,BUFLEN);
    sprintf(atstr,"AT+QSORF=%c,%d\r\n",socketnum,100);
    Uart2_SendStr(atstr)
    Delay(300);
    Clear_Buffer();
}

源码资料下载
STM32L1xx_UDP透传.7z (1.1 MB, 下载次数: 98)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:531721 发表于 2019-6-27 09:25 | 只看该作者
这两天项目正好需要用到,感谢分享~~~帮大忙啦
回复

使用道具 举报

板凳
ID:618984 发表于 2019-10-4 14:00 | 只看该作者
谢谢大佬
回复

使用道具 举报

地板
ID:196419 发表于 2021-9-26 14:55 | 只看该作者
刚好在找相关资料,先下来看看,谢谢了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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