串口中断处理代码中一定要先加这样的判断,否则可能因出错而导致串口死循环
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
temp = USART_ReceiveData(USART1); // 读取状态后必须紧跟着读取缓冲数据
......
}
USART_ReceiveData(USART1); // 确保读取状态后能紧跟着有读缓冲数据的动作
就是要保证在中断里一定先读SR再读DR这样的一个完整序列,才能清除串口的各种出错状态,这是STM32清串口状态特有的,编写STM32串口程序应该特别注意的。
中断优先级就是说当有两个中断同时到来时,或者中断嵌套的时候,优先处理优先级高的中断。
一个中断通常需要两个设置,一个是使能相应的中断,还有一个就是设置中断向量。