初级会员

- 积分
- 61
- 金钱
- 61
- 注册时间
- 2019-11-24
- 在线时间
- 8 小时
|
5金钱
直接贴代码如下:while(esp_8266_send_cmd("AT","OK",20))
{
..................
}
u8 esp_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
printf("执行进esp_8266_send_cmd()\r\n");
u8 res=0;
USART3_RX_STA=0;
printf("USART3_RX_STA=0\r\n");
u3_printf("%s\r\n",cmd); //通过串口3发送命令给esp8266
printf("excute u3_printf...\r\n");
if(ack&&waittime) //需要等待应答
{
printf("进入第一个if\r\n");
while(--waittime) //等待倒计时
{
printf("进入if_while\r\n");
delay_ms(10);
if(USART3_RX_STA&0X8000)//检测USART3_RX_STA最高位是否为1,若为1则接收到数据完成
{
printf("进入到第二个if");
if(esp_8266_check_cmd(ack))//检测得到的应答,即是否接到应答结果
{
printf("进入到第三个if");
printf("ack:%s\r\n",(u8*)ack);//接到了应答结果将其通过串口1输出
break;//得到有效数据
}
USART3_RX_STA=0;
}
}
if(waittime==0)
{
printf("返回值到底是几.......\r\n");
res=1; //返回值为1时,发送失败
}
}
printf("执行if语句\r\n");
return res;
}
由主程序中的while(esp_8266_send_cmd("AT","OK",20)),调用执行u8 esp_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
。我是通过串口1打印执行信息,发现红色部分的if条件判断未执行进去,也就是说判断条件不成立,USART3_RX_STA最高位不为1,是未收到esp8266的返回信息嘛?个人觉得u8 esp_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)函数写错了?因为蓝色部分的的if()判断总会在执行完while()循环后被执行到,那么res就被赋为1,函数返回1(发送失败)。请帮忙解答一下,不胜感激!
|
|