关于卡死在串口接收中断问题

2019-07-20 08:53发布

我在串口一的接收中断中只写了一句检测发送是否完成的函数,如下所示:

void USART1_IRQHandler (void)
{       
#if SYSTEM_SUPPORT_OS
    OSIntEnter();
#endif
   if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
   {
     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
   }
#if SYSTEM_SUPPORT_OS          
        OSIntExit();
#endif
}


这样写开机重启时有一定几率卡死在中断中是为什么?
在 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET)前再加上一句USART_SendData(USART1,USART_ReceiveData(USART1))就一切正常了。
请前辈们指点一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
HXYDJ
1楼-- · 2019-07-20 12:57
仔细看看这句话的含义就知道为啥卡住了
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
kbq1950361006
2楼-- · 2019-07-20 13:38
这样写,就再也不会死掉[mw_shl_code=c,true]void USART1_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
        {
        unsigned int Res;
        if (USART_GetFlagStatus(USART1, USART_FLAG_PE) != RESET)
        {
                        USART_ReceiveData(USART1);
                        USART_ClearFlag(USART1, USART_FLAG_PE);
        }

        if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
        {
                        USART_ReceiveData(USART1);
                        USART_ClearFlag(USART1, USART_FLAG_ORE);
        }
        if (USART_GetFlagStatus(USART1, USART_FLAG_FE) != RESET)
        {
                        USART_ReceiveData(USART1);
                        USART_ClearFlag(USART1, USART_FLAG_FE);
        }
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï
        {             
                        USART_ClearFlag(USART1, USART_FLAG_RXNE);  
                        USART_ClearITPendingBit(USART1, USART_IT_RXNE);   //Çå3yÖD¶Ï±êÖ¾       
                        Res =USART_ReceiveData(USART1);        //¶á衽óêÕμ½μÄêy¾Y
                  g_Uart1_Timer=1;//èç1ûóDêy¾Y£¬¿aÆô±ê־룬¶¨ê±Æ÷¿aê¼¼Æêy
                  if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
                        {               
                                USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                USART_RX_STA++;
                                if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                  }                  
   }

} [/mw_shl_code]
kbq1950361006
3楼-- · 2019-07-20 16:54
 精彩回答 2  元偷偷看……
hanzixi_angel
4楼-- · 2019-07-20 20:10
你这写的啥啊  接收中断里面判断发送完成   不卡死才怪  

一周热门 更多>