久芯网

串口通讯偶尔出现故障,不能自行恢复,如何解决

avatar scfor123456 提问时间: 2023-09-29 07:29:26 / 未解决
跟上位机实时跟MCU进行串口通讯,偶尔上位机报通讯数据错误,后续无法恢复一直报故障,上位机重启也是如此,但MCU其他的功能都是正常的,MCU重启就好了,这个现象出现的机率很低,但总是个隐患
6个回答
  • avatar yklstudent
    回答时间: 2023-09-28 07:57:48

    这个需要确认是串口怪了还是协议处理挂了 两个问题,分别处理,在线模拟故障然后分析原因

  • avatar scfor123456
    回答时间: 2023-09-28 08:27:50
    yklstudent-1794 发表于 2020-6-22 16:34
    这个需要确认是串口怪了还是协议处理挂了 两个问题,分别处理,在线模拟故障然后分析原因 ...

    以前也发现过类型问题,状态寄存器中某个错误位出错了,自行复位不了

  • avatar scfor123456
    回答时间: 2023-09-28 08:55:29

    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; }

  • avatar yklstudent
    回答时间: 2023-09-28 09:23:52

    串口溢出错误了,那你要检测判断出处理掉

  • avatar Glenxu
    回答时间: 2023-09-28 09:45:17

    凡是通讯,都存在不稳定和掉线情况,所以都需要完善的检错、纠错以及意外处理程序。 可惜的是很多通讯程序里看不到这些。要考虑尽可能多的意外和处理。 另外,串口掉线是比较常见的,主要处理好软件中的硬件检测以及对可靠性进行有效检测,当出现掉线时,及时回复连接(这个比较难,一般人做不好)。

  • avatar scfor123456
    回答时间: 2023-09-28 10:13:40

    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,是否正确?

会员中心 微信客服
客服
回到顶部