查了若干资料,参考手册,如下:
1、打开RXNEIE,默认会同时打开RXNE和ORE中断。
3、错误就是ORE导致的。
4、解决办法要清除ORE。
解决办法:
void USART2_IRQHandler(void){ u8 key = 0; if(USART_GetITStatus(USART2USART_IT_RXNE)!=Bit_RESET) //检查 USART 是否发生中断 { USART_ClearITPendingBit(USART2USART_IT_RXNE); // 清中断标志 key=USART_ReceiveData(USART2); // save key at here. } if(USART_GetFlagStatus(USART2USART_FLAG_ORE) == SET) // 检查 ORE 标志 { USART_ClearFlag(USART2USART_FLAG_ORE); USART_ReceiveData(USART2); }}
我遇到过中断优先级配置错误出现这种情况的,你查看下你中断优先级是不是配置有问题
串口上面,如果使用了接收中断,那应该还有个中断,叫做ORE的,这个中断只是有数据溢出的现象,如果不清除这个中断,就会导致中断多次进入,而造成卡死在中断的假象,清除这个中断的方法是读取DR的数据,同时读走SR寄存器的数据
要验证这个现象,可以在硬件调试模式下面,查看串口寄存器的情况