中断函数源代码
void USART3_4_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收到一个字节,进入接收中断
{
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
UartRx_Buff[Rx_Cnt] = USART_ReceiveData(USART3);
Rx_Cnt++;
if(Rx_Cnt>100) Rx_Cnt = 0; //数据长度不超过100
}
现象:
使用串口工具发送数据1次后,程序进入中断函数中出不来了,无法进行第二次发送数据。
原因分析:使用串口工具发送数据时,自动包含“/r/n”两个字符,而此时USART_ReceiveData()函数只能读取第一个数据,被读取才把RXEN标志位清除,但是还未清除时,“/r/n”两个字符又传进来了,导致数据溢出,产生ORE标志位,中断还未处理完成,从而使中断继续反复执行。
如何解决:???