收藏官网首页
查看: 7026|回复: 0

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

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2015-8-24 13:57:40 | 显示全部楼层 |阅读模式
校园创客福利
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[UART_HandleStruct.UART_Count]=vlue;
                                                UART_HandleStruct.UART_Count++;       
                                                UART_HandleStruct.UART_Flag1 = 1;
                                }                       
                                return ;
                        }
                        else if(UART_HandleStruct.UART_Flag2 ==0)
                        {
                                        UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count]=vlue;
                                        UART_HandleStruct.UART_Count++;
                                        if(UART_HandleStruct.UART_Buf[1] == 0xff)
                                        {
                                                UART_HandleStruct.UART_Flag2 = 1;       
                                               
                                        }                                       
                                        else
                                        {
                                                UART_HandleStruct.UART_Flag1 = 0;
                                        }
                                        return ;
                        }
                        else
                        {
                                UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count] = vlue;
                                if(UART_HandleStruct.UART_Count >=4 && UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count] == 0x55 && UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count - 1] == 0xFF)
                                {}
                                else
                                UART_HandleStruct.UART_Count++;
                                if(UART_HandleStruct.UART_Count == 0x04)
                                {
                                        UART_HandleStruct.UART_Cmd_len = UART_HandleStruct.UART_Buf[2]*256+  UART_HandleStruct.UART_Buf[3];        

                                }
                                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,就不能正确接收新一帧数据.




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表