esp8266连接stm32每次发送数据时上次发送的数据生效

问题遇到的现象和发生背景

通过手机发送数据,控制led灯

问题相关代码,请勿粘贴截图

void USART3_IRQHandler(void) //串口3中断服务程序
{
u8 Res;

if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    {
    Res =USART_ReceiveData(USART3);    //读取接收到的数据
        if(Res == ':'||USART_RX_STA>0)
        {
            if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                if(USART_RX_STA&0x4000)//接收到了0x0d
                    {
                    if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                    else USART_RX_STA|=0x8000;    //接收完成了 
                    }
                else //还没收到0X0D
                    {    
                    if(Res==0x0d)USART_RX_STA|=0x4000;
                    else
                        {
                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                        USART_RX_STA++;      
                        }         
                    }
                }
        }                
    }

}

下面是主函数里的循环部分
while(1)
{
if((USART_RX_STA&0x8000)==0x8000) //接收完成
{
switch(USART_RX_BUF[1])
{
case 'A':LED1_on();break;
case 'B':LED2_on();break;
case 'C':LED_off();break;
default:break;
}
USART_RX_STA = 0;
memset(USART_RX_BUF,0x00,sizeof(USART_RX_BUF));
}
}

运行结果及报错内容

大概就是
开机连接
发送A,无响应
发送B,响应A
发送B,响应B
每次发送就响应上次的数据

我的解答思路和尝试过的方法

这样可以暴力解决,但是我还是不懂为什么上面就不行
//void USART3_IRQHandler(void) //串口3中断服务程序
//{
// u8 Res;
//
// if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
// {
// Res = USART_ReceiveData(USART3); //读取接收到的数据
// if(Res == ':'||USART_RX_STA>0)
// {
// USART_RX_STA++;
// switch(Res)
// {
// case 'A':LED1_on();USART_RX_STA=0;break;
// case 'B':LED2_on();USART_RX_STA=0;break;
// case 'C':LED_off();USART_RX_STA=0;break;
// default:break;
// }
// }
// }
//
//}

我想要达到的结果

补充,换了个app把指令结尾的/n换成/r就解决了,可能和esp8266具体接受的指令格式有关,或者说手机发送指令的格式有关。具体我也不知道

switch(USART_RX_BUF[1])
{
case 'A':LED1_on();break;
case 'B':LED2_on();break;
case 'C':LED_off();break;
default:break;
}
改成----------------
switch(USART_RX_BUF[0])
{
case 'A':LED1_on();break;
case 'B':LED2_on();break;
case 'C':LED_off();break;
default:break;
}

单步调试,发送A之后看看程序执行到哪里卡住了。