串口通讯偶尔出现故障,不能自行恢复,如何解决
跟上位机实时跟MCU进行串口通讯,偶尔上位机报通讯数据错误,后续无法恢复一直报故障,上位机重启也是如此,但MCU其他的功能都是正常的,MCU重启就好了,这个现象出现的机率很低,但总是个隐患 这个需要确认是串口怪了还是协议处理挂了两个问题,分别处理,在线模拟故障然后分析原因 yklstudent-1794 发表于 2020-6-22 16:34
这个需要确认是串口怪了还是协议处理挂了
两个问题,分别处理,在线模拟故障然后分析原因 ...
以前也发现过类型问题,状态寄存器中某个错误位出错了,自行复位不了 if(USART2->ISR&0x07)
{
USART2->ICR=0x07;
scicommflg.all=0;
scidata.SciRxcnt=0;
scidata.SciTxcnt=0;
scidata.SciRxrecord=0;
// USART2_Init_Config();//键盘通讯
temp = USART2->RDR;
return;
} 串口溢出错误了,那你要检测判断出处理掉 凡是通讯,都存在不稳定和掉线情况,所以都需要完善的检错、纠错以及意外处理程序。
可惜的是很多通讯程序里看不到这些。要考虑尽可能多的意外和处理。
另外,串口掉线是比较常见的,主要处理好软件中的硬件检测以及对可靠性进行有效检测,当出现掉线时,及时回复连接(这个比较难,一般人做不好)。 if(USART2->ISR&0x0f)
{
USART2->ICR=0x0f;
scicommflg.all=0;
scidata.SciRxcnt=0;
scidata.SciTxcnt=0;
scidata.SciRxrecord=0;
// USART2_Init_Config();//键盘通讯
temp = USART2->RDR;
return;
}
ISR的BIT0~3这四个位如此清0,是否正确?
页:
[1]