上一篇是實作了将STM32從序列槽1收到的指令通過序列槽2發送給esp8266,在将從esp8266傳回的通過序列槽1發送給電腦
如果隻是使用電腦序列槽1發送資料給esp8266連接配接的TCP server的話,可以使用上一篇那樣的手動配置,不過那樣有很多問題,不是很友善,那麼怎麼讓STM32自己完成連接配接AP,設定單連接配接,建立TCP,設定透傳的步驟呢?
需要注意的是:
esp8266需要獲得帶回車換行的AT指令才執行,是以需要 \r\n
要判斷一條指令是不是真的已經通過序列槽2發送給esp8266了
如果上一個指令還沒傳回就很快的發下一個指令,可能會不執行
具體代碼如下:
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT, sizeof(AT), 0xFFFF)==HAL_OK)
{
HAL_Delay(1000);
printf("AT......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_RST, sizeof(AT_RST), 0xFFFF)==HAL_OK)
{
HAL_Delay(1000);
printf("AT_RST......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CWJAP_CUR, sizeof(AT_CWJAP_CUR), 0xFFFF)==HAL_OK)
{
HAL_Delay(2000);
printf("AT_CWJAP_CUR......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMUX, sizeof(AT_CIPMUX), 0xFFFF)==HAL_OK)
{
HAL_Delay(2000);
printf("AT_CIPMUX......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSTART, sizeof(AT_CIPSTART), 0xFFFF)==HAL_OK)
{
HAL_Delay(5000);
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSTART, sizeof(AT_CIPSTART), 0xFFFF);
printf("AT_CIPSTART......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMODE, sizeof(AT_CIPMODE), 0xFFFF)==HAL_OK)
{
HAL_Delay(2000);
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMODE, sizeof(AT_CIPMODE), 0xFFFF);
printf("AT_CIPMODE......\n");
if(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSEND, sizeof(AT_CIPSEND), 0xFFFF)==HAL_OK)
{
HAL_Delay(2000);
printf("AT_CIPSEND......\n");
HAL_UART_Transmit(&huart1, (uint8_t *)finish, sizeof(finish), 0xFFFF);
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_CIPSEND, sizeof(AT_CIPSEND), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSEND, sizeof(AT_CIPSEND), 0xFFFF);
} while (HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSEND, sizeof(AT_CIPSEND), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_CIPMODE, sizeof(AT_CIPMODE), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMODE, sizeof(AT_CIPMODE), 0xFFFF);
} while (HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMODE, sizeof(AT_CIPMODE), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_CIPSTART, sizeof(AT_CIPSTART), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSTART, sizeof(AT_CIPSTART), 0xFFFF);
}while(HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPSTART, sizeof(AT_CIPSTART), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_CIPMUX, sizeof(AT_CIPMUX), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMUX, sizeof(AT_CIPMUX), 0xFFFF);
} while (HAL_UART_Transmit(&huart2, (uint8_t *)AT_CIPMUX, sizeof(AT_CIPMUX), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_CWJAP_CUR, sizeof(AT_CWJAP_CUR), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_CWJAP_CUR, sizeof(AT_CWJAP_CUR), 0xFFFF);
} while (HAL_UART_Transmit(&huart2, (uint8_t *)AT_CWJAP_CUR, sizeof(AT_CWJAP_CUR), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT_RST, sizeof(AT_RST), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT_RST, sizeof(AT_RST), 0xFFFF);
}while(HAL_UART_Transmit(&huart2, (uint8_t *)AT_RST, sizeof(AT_RST), 0xFFFF)==HAL_OK);
}
}
else {
do {
printf("{");
HAL_UART_Transmit(&huart1, (uint8_t *)AT, sizeof(AT), 0xFFFF);
printf("}");
HAL_UART_Transmit(&huart2, (uint8_t *)AT, sizeof(AT), 0xFFFF);
}while(HAL_UART_Transmit(&huart2, (uint8_t *)AT, sizeof(AT), 0xFFFF)==HAL_OK);
}