用得是普中a4的开发板。
u8 idata UART_RX_BUF[UART_RX_BUF_SIZE];
void UART_init(u32 baud, bit isMultiple){
if(isMultiple) PCON = 0x80; else PCON = 0;
TL1 = TH1 = GEN_UART_TH1(baud);//256 - FOSC * 1. * (1 << (PCON >> 7)) / (12 * 32L * baud);//9600
SCON |= 0X50;
TMOD |= 0X20;
ES = 1;
EA = 1;
TR1 = 1;
}
void UART_sendData(u8 dat){
ES = 0;
TI = 0;
SBUF = dat;
while(TI == 0);
TI = 0;
ES = 1;
}
void UART_sendString(u8 *pbuf){
u8 buf;
while(buf = *pbuf++){
UART_sendData(buf);
delay_10us(5);
}
}
==================================================
volatile bit g_wifi_init_rx_complete_resp_Flag = 0;
volatile bit g_wifi_init_at_rst_flag = 0;
void UART_IRQn(void) interrupt 4{
static u8 data i = 0;
if(RI){
TI = 0;
RI = 0;
i = i % (UART_RX_BUF_SIZE - 1);
if(i == 0) {
memset(UART_RX_BUF, '\0', UART_RX_BUF_SIZE);//0.007551 // 0.00649197//memset(UART_RX_BUF, 0, UART_RX_BUF_SIZE);
}
UART_RX_BUF = SBUF;
if(UART_RX_BUF[0] == 'A' || g_wifi_init_at_rst_flag){ // at+...
if(strcmp(UART_RX_BUF, "AT+RST\r\n\r\nOK\r\n") == 0){
g_wifi_init_at_rst_flag = 1;
i++;
}else if(
(i >= 4 && UART_RX_BUF[i-4] == '\n' && strcmp(&UART_RX_BUF[i-3], "OK\r\n") == 0) ||
//(i >= 7 && UART_RX_BUF[i-7] == '\n' && strcmp(&UART_RX_BUF[i-6], "ERROR\r\n") == 0) ||
(i >= 7 && UART_RX_BUF[i-7] == '\n' && strcmp(&UART_RX_BUF[i-6], "ready\r\n") == 0)
){
UART_RX_BUF_SIZE_reset(&i);
g_wifi_init_rx_complete_resp_Flag = 1;
g_wifi_init_at_rst_flag = 0;
}else{i++;}
}else if(
strstr(UART_RX_BUF, ",CONNECT\r\n") != NULL ||
strstr(UART_RX_BUF, ",CLOSED\r\n") != NULL
){
UART_RX_BUF_SIZE_reset(&i);
}else if(i >= 7 && UART_RX_BUF[i-7] == '\n' && strcmp(&UART_RX_BUF[i-6], "ready\r\n") == 0){
UART_RX_BUF_SIZE_reset(&i);
g_wifi_init_rx_complete_resp_Flag = 1;
}else{i++;}
}
}
void UART_RX_BUF_SIZE_reset(u8 *i){
*i = 0;
memset(UART_RX_BUF, '\0', UART_RX_BUF_SIZE);
}
void ESP8266_sendCMD(u8* pbuf){
u8 buf = NULL;
while(buf = *pbuf++){
UART_sendData(buf);
}
UART_sendData('\r');
UART_sendData('\n');
while(!g_wifi_init_rx_complete_resp_Flag);
}
void ESP8266_init(void){
ESP8266_sendCMD("AT+RST");
ESP8266_sendCMD("AT+CWMODE_DEF=1");//STA
ESP8266_sendCMD("AT+CWAUTOCONN=0");
ESP8266_sendCMD("AT+CIPSTA_DEF=\"192.168.1.100\",\"192.168.1.1\",\"255.255.255.0\"");
ESP8266_sendCMD("AT+CWJAP_DEF=\"******\",\"*******\"");
ESP8266_sendCMD("AT+CIPMODE=0");
ESP8266_sendCMD("AT+CIPMUX=1");
ESP8266_sendCMD("AT+CIPSERVER=1");//PORT=333
}
void WIFI_init(void){
UART_init(WIFI_BAUD2, 1);//WIFI_BAUD2==9600 esp8266也是相同波特率
ESP8266_init();
}
|