我在串口一的接收中断中只写了一句检测发送是否完成的函数,如下所示:
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))就一切正常了。
请前辈们指点一下,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
{
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]
一周热门 更多>