不是处理不过来的问题……
是STM32的一个bug,一旦启用接收中断,会默认启动溢出中断……但是库例程里都没有处理溢出中断……
此时只要你的电路没做好保护,在MCU初始化前就收到了数据,只要你一使能串口接收中断就会出不来,不管波特率是多少都一样。
改一下串口中断函数就可以了:
void USart1Handler(void)
{
...//原来的接收中断处理
...//原来的发送中断处理
//新添加溢出中断处理:
//溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
if(USART_GetFlagStatus(g_ulUARTBase[ulPort],USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE);//读SR
USART_ReceiveData(USART1);//读DR
}
}
|