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, 下载次数: 100)
|