应该是接收数据线上偶尔有个电平变化,产生了一个起始位,这样就会触发超时中断,但是因为不是有效数据,不会触发接收中断,接收缓冲区中的数据不会改变,就会出现这个现象。应该在接收超时中断中判断是否接收到有效数据。
if( USART_GetITStatus(USART1, USART_IT_RTO) != RESET ) // 接收超时中断
{
if(Usart1_it_rx.Index)
{
Usart1_it_rx.FinishedFlag = SET;
Usart1_it_rx.Len = Usart1_it_rx.Index;
Usart1_it_rx.Index = 0;
}
USART_ClearITPendingBit(USART1, USART_IT_RTO);
}
实测加上判断后就不会出现这个问题
|