关于串口实验的一点疑问:电脑发送数据比程序处理快的情况下

2019-07-20 13:38发布

        串口实验的中断里前面几句是这样写的:
      if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
           {
                Res =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
               
                if((USART_RX_STA&0x8000)==0)//接收未完成
        {
              、、、、、、、

       }

     意思是当状态标志变量最高位为1时则不进行余下的操作,我在主程序中加了delay_ms(500);    的语句,然后让串口每50ms,发一次数据,
    按照程序的意思,这种情况下,主程序来不及处理,新的接收又开始了,由于USART_RX_STA最高位未在主函数中清零,接收被忽略,
    这样当主程序处理了接收,中断中再次处理新的接收时,这时候好多数据被忽略了,接收应该不完整了,但是调试助手上看数据没问题啊?
   为什么呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。