伯爵云锁 发表于 2015-8-24 13:57:40

微信宠物屋MCU串口接收程序有问题

void USART2_IRQHandler(void)
{
        uint8_t         vlue;
       
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
//                printf("**\r\n");
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);
                vlue = USART_ReceiveData(USART2);
                if(UART_HandleStruct.Package_Flag ==0)
                {
                       
                        if(UART_HandleStruct.UART_Flag1 ==0)
                        {
                                if(vlue == 0xff)
                                {   
                                                UART_HandleStruct.UART_Count = 0;                                               
                                                UART_HandleStruct.UART_Buf=vlue;
                                                UART_HandleStruct.UART_Count++;       
                                                UART_HandleStruct.UART_Flag1 = 1;
                                }                       
                                return ;
                        }
                        else if(UART_HandleStruct.UART_Flag2 ==0)
                        {
                                        UART_HandleStruct.UART_Buf=vlue;
                                        UART_HandleStruct.UART_Count++;
                                        if(UART_HandleStruct.UART_Buf == 0xff)
                                        {
                                                UART_HandleStruct.UART_Flag2 = 1;       
                                               
                                        }                                       
                                        else
                                        {
                                                UART_HandleStruct.UART_Flag1 = 0;
                                        }
                                        return ;
                        }
                        else
                        {
                                UART_HandleStruct.UART_Buf = vlue;
                                if(UART_HandleStruct.UART_Count >=4 && UART_HandleStruct.UART_Buf == 0x55 && UART_HandleStruct.UART_Buf == 0xFF)
                                {}
                                else
                                UART_HandleStruct.UART_Count++;
                                if(UART_HandleStruct.UART_Count == 0x04)
                                {
                                        UART_HandleStruct.UART_Cmd_len = UART_HandleStruct.UART_Buf*256+UART_HandleStruct.UART_Buf;        

                                }
                                if(UART_HandleStruct.UART_Count ==(UART_HandleStruct.UART_Cmd_len + 4))
                                {
                                        UART_HandleStruct.Package_Flag = 1;
                                        UART_HandleStruct.UART_Flag1 = 0;
                                        UART_HandleStruct.UART_Flag2 = 0;
//                                        printf("Package_Flag =1 \r\n");
                                }       
                        }
                }               
}       
}

假如接收串口数据有丢失,if(UART_HandleStruct.UART_Count ==(UART_HandleStruct.UART_Cmd_len + 4))这句就一直不进去,这时,UART_HandleStruct.UART_Flag1为1,UART_HandleStruct.UART_Flag2为1,串口接收程序就乱套了,UART_HandleStruct.UART_Flag1不为0,UART_HandleStruct.UART_Flag2不为0,就不能正确接收新一帧数据.




页: [1]
查看完整版本: 微信宠物屋MCU串口接收程序有问题