新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2021-4-21
- 在线时间
- 4 小时
|
1金钱
在串口助手里只打印收←◆0. AT,之前测试stm32h7本身串口通讯正常,esp8266与USB_TTL通过发送AT指令,也能连接上wifi,二者连上就果咩了。
/***这是发送数据的函数**/
void USART2_SendData(uint8_t steam)
{
while((USART2->ISR&0X40)==0);
USART2->TDR =steam;
}
void Usart_SendString(UART_HandleTypeDef *USARTx, unsigned char *str, unsigned short len)
{
unsigned short count = 0;
for(; count < len; count++)
{
USART2_SendData(*str++);
// HAL_UART_Transmit(&huart2,(unsigned char*)str++,sizeof(str),100); //发送数据
while(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TC) == RESET); //等待发送完成
}
/**发送命令**/
_Bool ESP8266_SendCmd(char *cmd, char *res)
{
unsigned char timeOut = 200;
Usart_SendString(&huart2, (unsigned char *)cmd, strlen((const char *)cmd));
while(timeOut--)
{
if(ESP8266_WaitRecive() == REV_OK) //如果收到数据
{
if(strstr((const char *)esp8266_buf, res) != NULL) //如果检索到关键词
{
ESP8266_Clear(); //清空缓存
return 0;
}
}
HAL_Delay(10);
}
return 1;
}
/**发送数据**/
void ESP8266_SendData(unsigned char *data, unsigned short len)
{
char cmdBuf[32];
ESP8266_Clear(); //清空接收缓存
sprintf(cmdBuf, "AT+CIPSEND=%d\r\n", len); //发送命令
if(!ESP8266_SendCmd(cmdBuf, ">")) //收到‘>’时可以发送数据
{
Usart_SendString(&huart2, data, len); //发送设备连接请求数据
}
}
/**8266初始化**/
在这一步中,串口1只能打印0.AT而没有下一步操作,不知道是否是sendcmd的问题
void ESP8266_Init(void)
{
ESP8266_Clear();
printf("0. AT\r\n");
while(ESP8266_SendCmd("AT\r\n", "OK"))
HAL_Delay(500);
printf( "1. RST\r\n");
while(ESP8266_SendCmd("AT+RST\r\n", "OK"))
HAL_Delay(500);
printf( "2.AT+CIPCLOSE. RST\r\n");
while(ESP8266_SendCmd("AT+CIPCLOSE\r\n", "OK"))
HAL_Delay(500);
printf("3. CWMODE\r\n");
while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
HAL_Delay(500);
printf("4. AT+CWDHCP\r\n");
while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
HAL_Delay(500);
printf("5. CWJAP\r\n");
while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
HAL_Delay(500);
printf("6. CIPSTART\r\n");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
HAL_Delay(500);
printf("7. ESP8266 Init OK\r\n");
}
/**串口二中断**/
void USART2_IRQHandler(void)
{
uint8_t Res;
if(__HAL_UART_GET_IT(&huart2, UART_IT_RXNE) != RESET) //接收中断
{
HAL_UART_Receive(&huart2,&Res,1,1000);
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //防止串口被刷爆
esp8266_buf[esp8266_cnt++] = USART2->RDR;
HAL_UART_IRQHandler(&huart2);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);//清标志
}
}
/**主函数部分关于串口2*/
......
MX_USART2_UART_Init();
ESP8266_Init();
printf(" esp8266 ok \r\n");//插入换行
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);//开启串口2中断
while(1)
{......}
|
|