AP模式
AP的SSID:AT+WAP=11BG,LAUVAN(SSID),CHI
AP的KEY::AT+WAKEY=WPA2PSK,AES,22222222
AP模式:AT+WMODE=AP
AP作服务器时的端口号:AT+NETP=TCP,SERVER,6000,192.168.1.56
AP的IP及网关:AT+LANN=192.168.1.1,255.255.255.0
透传模式:AT+ENTM
串口模式:
/****************************************************************************** ***********************
名称:变量定义
******************************************************************************* **********************/
volatile uint8UART3_RxBuf[UART3_RXBUF_SIZE];
volatile uint8UART3_TxBuf[UART3_TXBUF_SIZE];
volatile uint8UART3RxFlag;//接收标志
volatile uint16UART3_RxHead;//接收缓冲区读指针
volatile uint16UART3_RxEnd;//接收缓冲区指针
volatile uint8UART3_RxFullFlag;//接收缓冲区满标志
volatile uint8UART3_RxEmptyFlag;//接收缓冲区空标志
volatile uint8UART3TxFlag;//发送标志
volatile uint16UART3_TxHead;
volatile uint16UART3_TxEnd;
volatile uint8UART3_TxEmptyFlag;//发送缓冲区空标志
volatile uint8UART3OverTime;//超时时间
volatile uint8UART3OverFlag;//超时标志
volatile uint8UART3RxCompTime;//串口接收完成时间
volatile uint8UART3RxCompJudg;//串口接收完成判断
volatile uint8UART3RxCompFlag;//串口接收完成标志
volatile uint16Uart3OverTime;
//WIFI相关参数
volatile uint8WifiStatus=0;
volatile uint8IsWifiBusy;
volatile uint32Channel_Timer_Limit;//限时器
//volatile uint16Dog_IsWifiBusy=DOG_ISGPRSBUSY;
volatile uint16Dog_IsWifiBusy=0;
volatile uint8WifiSendBuf[512];
volatile uint8WifiRecBuf[512];
volatile uint8SetWifiParmFlag=0;
volatile uint8SetWifiUartParmFlag=0;
volatile uint8Send2BTime=0;
volatile uint8WifiOnLinkFlag=0;
volatile uint8WifiSendStartTime=0;
volatile uint8WifiHeartbeatno=0;//Wifi发送心跳次数
volatile uint8WifiSendEnterNetFlag=0;//Wifi发送登录帧标志i
volatile uint8WifiEtherNetFlag=0;//
/****************************************************************************** *********************
**Function name:STM_EVAL_USART3_Init
**Descriptions:串口3中断服务函数
**input parameters:无
**Output parameters::无
**Returned value:无
******************************************************************************* *********************/
void STM_EVAL_USART3_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*Enable and set USART3Interrupt to the0priority*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//嵌套优先级分组为1
NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/****************************************************************************** ***********************
**
**初始化客户端WifiPortIOSet
**
******************************************************************************* **********************/
void WifiIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin=Reload;//定义Reload输出脚20140731
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,Reload);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin=ResetTn;//定义ResetTn输出脚20140731
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,ResetTn);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin=PWR_SW;//定义PWR_SW输出脚20140731
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,PWR_SW);
}
/****************************************************************************** **********************
*名称:USART3_Wifi()
*功能:初始化串口3
*入口参数:
*出口参数:
******************************************************************************* ***********************/
void USART3_Wifi(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/*config USART2clock*/
//RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3|RCC_APB2Periph_GPIOB,
ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
/*USART3GPIO config*/
/*Configure USART3Tx(PB.10)as alternate function push-pull*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*Configure USART3Rx(PB.11)as input floating*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*USART3mode config*/
USART_https://www.wendangku.net/doc/696746470.html,ART_BaudRate=115200;
USART_https://www.wendangku.net/doc/696746470.html,ART_WordLength=USART_WordLength_8b;
USART_https://www.wendangku.net/doc/696746470.html,ART_StopBits=USART_StopBits_1;
USART_https://www.wendangku.net/doc/696746470.html,ART_Parity=USART_Parity_No;
USART_https://www.wendangku.net/doc/696746470.html,ART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_https://www.wendangku.net/doc/696746470.html,ART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
/*使能串口3的发送和接收中断*/
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
USART_Cmd(USART3,ENABLE);
STM_EVAL_USART3_Init();//中断初始化
WifiIOInit();//WIFI控制脚的初始化20140731
}
/****************************************************************************** ***************************
**Function name:USART3_IRQHandler
**Descriptions:串口3中断服务函数
**input parameters:无
**Output parameters::无
**Returned value:无
******************************************************************************* **************************/
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)
{
UART3RxCompJudg=VALID_FLAG;
UART3RxCompTime=0;
Uart3OverTime=0;
if(UART3_RxFullFlag==0)
{
UART3_RxBuf[UART3_RxEnd++]=USART_ReceiveData(USART3);/*保存接收到的数据*/
if(UART3_RxEnd>=UART3_RXBUF_SIZE)
UART3_RxEnd=0;
if(UART3_RxEnd==UART3_RxHead)
UART3_RxFullFlag=1;
UART3_RxEmptyFlag=0;
}
}
//USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
}
/****************************************************************************** ***************************
**Function name:HandleRFSendData
**Descriptions:发送多个字节数据
**input parameters:Buffer:发送数据存储位置
**NByte:发送数据个数
**Output parameters::无
**Returned value:无
******************************************************************************* **************************/
void HandleWifiSendData(unsigned char*buffer,int bufferlen)
{
while(bufferlen>=0)
{
USART_SendData(USART3,*buffer++);
//ResetWdog();
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
bufferlen--;
}
//USART_Cmd(USART3,ENABLE);
}
/****************************************************************************** **************
*名称:HandleRFUartTimer()
*功能:处理读UART1时间
*入口参数:
*出口参数:
******************************************************************************* **************/
void HandleWifiUartTimer(void)
{
if(UART3RxCompJudg==VALID_FLAG)//接收是否完成判断
{
if(++UART3RxCompTime>=UART3_COMP_TIME)//判断接收中断之间超时
{
UART3RxCompTime=0;
UART3RxCompJudg=0;
UART3RxCompFlag=VALID_FLAG;
}
//NoReDataTime=0;
}
else
Uart3OverTime++;
}
/****************************************************************************** *****************
*名称:Uart3ReadBytes()
*功能:读取串口2字符串
*入口参数:*pBuf:读取数据存储区
*出口参数:
******************************************************************************* ******************/
uint16Uart3ReadBytes(uint8*pBuf)
{
uint16nEnd=0;
uint16Size=0;
if(UART3_RxEmptyFlag==0)//串口0接收数据缓冲区不为空
{
nEnd=UART3_RxEnd;//中断可能改变此值
UART3_RxFullFlag=0;
if(UART3_RxHead
{
Size=nEnd-UART3_RxHead;
memcpy(pBuf,(uint8*)&UART3_RxBuf[0]+UART3_RxHead,Size);
UART3_RxHead=nEnd;
}
else//head>end
{
Size=UART3_RXBUF_SIZE+nEnd-UART3_RxHead;
memcpy(pBuf,(uint8*)&UART3_RxBuf[0]+UART3_RxHead,UART3_RXBUF_SIZE-UART3_RxHead);
if(nEnd>0)
memcpy(pBuf+UART3_RXBUF_SIZE-UART3_RxHead,(uint8 *)&UART3_RxBuf[0],nEnd);
UART3_RxHead=nEnd;
}
if(UART3_RxHead==UART3_RxEnd)
UART3_RxEmptyFlag=1;//接收数据缓冲区空
}
else
Size=0;
memset((uint8*)&UART3_RxBuf[0],0x00,512);
return Size;
}
/****************************************************************************** ******************
*名称:GetWifiMode485Data()
*功能:读出接收的数据,取出完整的一帧,放到接收BUF,
*入口参数:无
*出口参数:返回长度和数据BUF。
******************************************************************************* *******************/
uint16GetWifiMode485Data(void)
{
uint16loop,temps,size;
uint16i,starti;
uint8temp1,temp2;
uint16datalen;
memset((uint8*)&WifiRecBuf,0x00,512);
size=Uart3ReadBytes((uint8*)WifiRecBuf);
temps=size;
i=0;
while(WifiRecBuf[i]!=0x68&&i i++; if(i>=size) return0;//错误格式信息 starti=i;//point0x68 i+=7; if(WifiRecBuf[i]!=0x68) return0; i++;//point ctrlcode i++;//point len; temp1=WifiRecBuf[i]; temp2=WifiRecBuf[i+1]; datalen=(uint16)(temp1+temp2*256);//2013-09-05 i+=2; if(i+datalen>=temps) return0; i+=datalen;//point cs i++;//point0x16 if(WifiRecBuf[i]!=0x16) return0; size=datalen+9;//head(9)+cs+0x16 for(loop=0;loop WifiRecBuf[loop]=WifiRecBuf[loop+starti]; return size; } /****************************************************************************** ****************** *名称:GetWifiATData() *功能:读出接收的数据,取出完整的一帧,放到接收BUF, *入口参数:无 *出口参数:返回长度和数据BUF。 ******************************************************************************* *******************/ uint16GetWifiATData(void) { uint16size; memset((uint8*)&WifiRecBuf,0x00,512); size=Uart3ReadBytes((uint8*)WifiRecBuf); return size; } /****************************************************************************** ***** ** **初始化客户端WifiParmSet ** ******************************************************************************* *****/ void WifiParmSet(void) { GPIO_SetBits(GPIOB,Reload); GPIO_ResetBits(GPIOB,ResetTn); Channel_Timer_Limit=200; GPIO_SetBits(GPIOA,PWR_SW); WifiStatus=Wifi_INIT; SetWifiParmFlag=VALID_FLAG; WifiEtherNetFlag=0; } /****************************************************************************** * *名称:WifiATFrame() *功能:整理上发数据包并发送 *入口参数:status:状态,*pData:数据地址,dataSize:数据大小设置WIFI用户名及密码:AT+WAP=11BG,LAUVAN(SSID),CHI AT+WAKEY=WPA2PSK,AES,22222222 *出口参数:OK:正确,ERROR:错误 ******************************************************************************* */ //void WifiATFrame(uint8status,uint8*pData,uint16dataSize) void WifiATFrame(uint8status) { uint8*ptr; uint8len; uint16size=0; uint16temp,temp1,temp2,temp3,temp4; uint16severport; size=0; ptr=(uint8*)&WifiSendBuf; *(ptr++)=0x41;//A *(ptr++)=0x54;//T *(ptr++)=0X2B;//+ size+=3; if(status==Wifi_STA)//AT+WMODE=AP { *(ptr++)=0x57;//W *(ptr++)=0x4D;//M *(ptr++)=0X4F;//O *(ptr++)=0x44;//D *(ptr++)=0x45;//E *(ptr++)=0x3D;//= *(ptr++)=0x41;//A *(ptr++)=0x50;//P //*(ptr++)=0x41;//A size+=8; } else if(status==Wifi_WSSSID)//AT+WAP=11BG,LAUVAN(SSID),CHI { *(ptr++)=0x57;//W *(ptr++)=0x41;//A *(ptr++)=0X53;//P *(ptr++)=0x50;//= size+=4; len=WifiName[0]; memcpy(ptr,(uint8*)&WifiName[1],len); ptr+=len; size+=len; } else if(status==Wifi_WSKEY)//AP的KEY:: AT+WAKEY=WPA2PSK,AES,22222222 { *(ptr++)=0x57;//W *(ptr++)=0x41;//A *(ptr++)=0x4b;//K *(ptr++)=0x45;//E *(ptr++)=0x59;//Y *(ptr++)=0x3D;//= *(ptr++)=0x57;//W *(ptr++)=0x50;//P *(ptr++)=0x41;//A *(ptr++)=0x32;//2 *(ptr++)=0x50;//P *(ptr++)=0x53;//S *(ptr++)=0x4b;//K *(ptr++)=0x2c;//, *(ptr++)=0x41;//A *(ptr++)=0x45;//E *(ptr++)=0x53;//S *(ptr++)=0x2c;//, size+=18; len=WifiPass[0]; memcpy(ptr,(uint8*)&WifiPass[1],len); ptr+=len; size+=len; } else if(status==Wifi_WANN)//AP的IP及网关: AT+LANN=192.168.1.1,255.255.255.0 { *(ptr++)=0x4C;//L *(ptr++)=0x41;//A *(ptr++)=0x4E;//N *(ptr++)=0x4E;//N *(ptr++)=0x3D;//= *(ptr++)=0x31;//1 *(ptr++)=0x39;//9 *(ptr++)=0x32;//2 *(ptr++)=0X2E;//. *(ptr++)=0x31;//1 *(ptr++)=0x36;//6 *(ptr++)=0x38;//8 *(ptr++)=0x2E;//. *(ptr++)=0x31;//1 *(ptr++)=0x2E;//. *(ptr++)=0x31;//1 *(ptr++)=0x2C;//, *(ptr++)=0x32;//2 *(ptr++)=0x35;//5 *(ptr++)=0x35;//5 *(ptr++)=0X2E;//. *(ptr++)=0x32;//2 *(ptr++)=0x35;//5 *(ptr++)=0x35;//5 *(ptr++)=0X2E;//. *(ptr++)=0x32;//2 *(ptr++)=0x35;//5 *(ptr++)=0x35;//5 *(ptr++)=0X2E;//. *(ptr++)=0x31;//0 size+=30; } else if(status==Wifi_NETP)//AT+NETP=TCP,CLIENT,6000,192.168.1.56 { *(ptr++)=0x4E;//N *(ptr++)=0x45;//E *(ptr++)=0x54;//T *(ptr++)=0x50;//P *(ptr++)=0x3D;//= *(ptr++)=0x54;//T *(ptr++)=0x43;//C *(ptr++)=0x50;//P *(ptr++)=0x2C;//, *(ptr++)=0x53;//S *(ptr++)=0x45;//E *(ptr++)=0x52;//R *(ptr++)=0X56;//V *(ptr++)=0x45;//E *(ptr++)=0x52;//R *(ptr++)=0x2C;//, size+=16; severport=(uint16)(SeverIPTemp[4]+SeverIPTemp[5]*256); temp=severport%10000; temp1=(severport/10000); *(ptr++)=0x30|(temp1&0x0f);//8 temp2=(temp%1000); temp3=(temp/1000); *(ptr++)=0x30|(temp3&0x0f);//8 temp=(temp2%100); temp4=(temp2/100); *(ptr++)=0x30|(temp4&0x0f);//8 temp2=(temp%10); temp1=(temp/10); *(ptr++)=0x30|(temp1&0x0f);//8 *(ptr++)=0x30|(temp2&0x0f);//8 size+=5; *(ptr++)=0x2C;//, temp=(SeverIPTemp[0]%100); temp1=(SeverIPTemp[0]/100); *(ptr++)=0x30|(temp1&0x0f);//8 temp2=(temp%10); temp3=(temp/10); *(ptr++)=0x30|(temp3&0x0f);//8 *(ptr++)=0x30|(temp2&0x0f);//8 *(ptr++)=0X2E;//. size+=4; temp=(SeverIPTemp[1]%100); temp1=(SeverIPTemp[1]/100); *(ptr++)=0x30|(temp1&0x0f);//8 temp2=(temp%10); temp3=(temp/10); *(ptr++)=0x30|(temp3&0x0f);//8 *(ptr++)=0x30|(temp2&0x0f);//8 *(ptr++)=0X2E;//. size+=4; temp=(SeverIPTemp[2]%100); temp1=(SeverIPTemp[2]/100); *(ptr++)=0x30|(temp1&0x0f);//8 temp2=(temp%10); temp3=(temp/10); *(ptr++)=0x30|(temp3&0x0f);//8 *(ptr++)=0x30|(temp2&0x0f);//8 *(ptr++)=0X2E;//. size+=4; temp=(SeverIPTemp[3]%100); temp1=(SeverIPTemp[3]/100); *(ptr++)=0x30|(temp1&0x0f);//8 temp2=(temp%10); temp3=(temp/10); *(ptr++)=0x30|(temp3&0x0f);//8 *(ptr++)=0x30|(temp2&0x0f);//8 //*(ptr++)=0X2E;//. size+=3; } else if(status==Wifi_Reset)//AT+Z { *(ptr++)=0x5a;//z size+=1; WifiStatus=Wifi_INIT; //SetWifiUartParmFlag=VALID_FLAG; SetWifiParmFlag=0; } *(ptr++)=0x0d;//CR *(ptr++)=0x0a;//LF size+=2; HandleWifiSendData((uint8*)&WifiSendBuf,size); } /****************************************************************************** ***** ** **定时查询处理Wifi任务HandleWifiLinkTimer ** ******************************************************************************* *****/ void HandleWifiLinkTimer(void) { //处理Wifi流程 if((SetWifiParmFlag==VALID_FLAG)&&(Channel_Timer_Limit==0)) { GPIO_SetBits(GPIOB,ResetTn); switch(WifiStatus) { case Wifi_INIT://先发+++ memset((uint8*)&WifiSendBuf[0],0x2b,3); HandleWifiSendData((uint8*)&WifiSendBuf,1); Send2BTime++; if(Send2BTime>2) { Channel_Timer_Limit=100; Send2BTime=0; } else Channel_Timer_Limit=10; break; case Wifi_A://再发a WifiSendBuf[0]=0x61; HandleWifiSendData((uint8*)&WifiSendBuf[0],1); Channel_Timer_Limit=100; break; default://开始发AT指令 WifiATFrame(WifiStatus); Channel_Timer_Limit=100; break; } } //处理Wifi串口模式 else if((SetWifiUartParmFlag==VALID_FLAG)&&(Channel_Timer_Limit==0)) { GPIO_SetBits(GPIOB,ResetTn); switch(WifiStatus) { case Wifi_INIT://先发+++ if(WifiSendStartTime>5) { //SendGprsEnterFrame(3); WifiSendStartTime=0; Channel_Timer_Limit=200; WifiSendEnterNetFlag=VALID_FLAG; break; } WifiSendEnterNetFlag=0; memset((uint8*)&WifiSendBuf[0],0x2b,3); HandleWifiSendData((uint8*)WifiSendBuf,1); Send2BTime++; if(Send2BTime>2) { Channel_Timer_Limit=100; Send2BTime=0; WifiSendStartTime++; } else Channel_Timer_Limit=10; break; case Wifi_A://再发a if(WifiSendStartTime>5) { //SendGprsEnterFrame(3); WifiSendStartTime=0; Channel_Timer_Limit=200; WifiSendEnterNetFlag=VALID_FLAG; break; } WifiSendBuf[0]=0x61; HandleWifiSendData((uint8*)WifiSendBuf,1); Channel_Timer_Limit=100; WifiSendStartTime++; break; default://开始发AT指令 WifiATFrame(WifiStatus); Channel_Timer_Limit=50; break; } //Channel_Timer_Limit=100; } } /****************************************************************************** ****************** *名称:HandleWifiData() *功能:处理上行串口接收到的数据 *入口参数: *出口参数: ******************************************************************************* ******************/ void HandleWifiData(void) { uint16DataLen; GprsFrameType*pLCFrame; if(SetWifiParmFlag==VALID_FLAG&&WifiSendEnterNetFlag!=VALID_FLAG) { DataLen=GetWifiATData(); switch(WifiStatus) { case Wifi_INIT: if(WifiRecBuf[0]==0x61) WifiStatus=Wifi_A; break; case Wifi_A: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) { if(SetWifiParmFlag!=0) WifiStatus=Wifi_STA; else WifiStatus=Wifi_WSLK; } break; case Wifi_STA: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) WifiStatus=Wifi_WSSSID; Channel_Timer_Limit=0; break; case Wifi_WSSSID: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) WifiStatus=Wifi_WSKEY; Channel_Timer_Limit=0; break; case Wifi_WSKEY: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) WifiStatus=Wifi_WANN; Channel_Timer_Limit=0; break; case Wifi_WANN: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) WifiStatus=Wifi_NETP; Channel_Timer_Limit=0; break; case Wifi_NETP: if(WifiRecBuf[0]==0x2b&&WifiRecBuf[1]==0x6f&&WifiRecBuf[2]==0x6b) WifiStatus=Wifi_Reset; Channel_Timer_Limit=0; break; default: break; } if(DataLen>10) { if(UpTaskFrame.UpTaskFlag==VALID_FLAG) return; //DataLen=GetWifiMode485Data(); //if(DataLen<10) //return; if(DataLen>=512)// return; if(CmpFrameIs((uint8*)&WifiRecBuf[0])==OK)//判断数据帧格式(对集中器本身的命令) { UpTaskFrame.UpTaskFlag=VALID_FLAG; pLCFrame=(GprsFrameType*)WifiRecBuf; HandleUpProtocolMain(pLCFrame,3);//处理数据帧 WifiOnLinkFlag=VALID_FLAG; WifiStatus=Wifi_INIT; SetWifiUartParmFlag=0; SetWifiParmFlag=0; } } } else { if(UpTaskFrame.UpTaskFlag==VALID_FLAG) return; DataLen=GetWifiMode485Data(); if(DataLen<8) return; if(DataLen>=512)// return; if(CmpFrameIs((uint8*)&WifiRecBuf[0])==OK)//判断数据帧格式(对集中器本身的命令) { UpTaskFrame.UpTaskFlag=VALID_FLAG; pLCFrame=(GprsFrameType*)WifiRecBuf; HandleUpProtocolMain(pLCFrame,3);//处理数据帧 WifiOnLinkFlag=VALID_FLAG; WifiStatus=Wifi_INIT; SetWifiUartParmFlag=0; SetWifiParmFlag=0; } } }