zjwwyhello 发表于 2013-2-27 17:37:53

关于stm8串口假死问题的求救

用stm8做的两个设备,A设备与B设备通信,A设备发命令码给B,B收到后就发应答码给A,间隔时间约10秒再重复一次,如此循环,如果B没有应答码给A则A会重发命令码。通信是用 uart2 RX TX, 一般情况下工作都正常,B设备程序就这样收发收发两三天,就不再给A设备应答了,B的串口有没有还在收,我不是很清楚,因为我还没有去读寄存器值,但我可以确定B没有死机,B设备其它功能都可以操作,比如按钮可以按,有反应的。但就是不给A发应答码或者A发的数据B不再收进来(没收进来当然也没有应答了),这样的情况,都要几天一两天出现一次,我怀疑是线路的干扰让B设备进入了某种状态了,这种状态就串口不能收或发了,但其它工作正常。如果B设备重启上电,或者操作B设备上的按钮,让B设备主动执行一个有往外发送数据的动作,之后B设备的串口收发就重新正常了。
  然后为重现跟踪问题,我就偿试了很多方法,我发现在没通信数据传输的时间段,我拿地线G去碰一下B设备的TX脚(无数据为高电平)人为将TX拉低了一下,则B设备Uart就如前述一样假死了,A再怎么发码给B,B也不作应答了。这种人为产生的情况会不会与非人为时偶尔发现的情况是否同属一种情况呢? 这种情况出现,我又纳闷了,请问为什么? 在总线空闲状态下,用G去碰一下B的串口TX,会出这样的情况,难道这个TX空闲时受到什么干扰会让单片机进入某种中断?或者进入halt状态?(手册上说halt时uart口通过总线数据是唤醒不了的)。串口设置我觉得也没什么问题呀,不然也不会正常收发两天了。应该是某种干扰或者是不对的数据造成B串口假死的。还有A设备发出来的码每次都是一样的,也不会次次被干扰,B设备呢也有对数据错误进行处理的,一次不行了,第二次第三次循环发码过来也会行的。所以逻辑上应该是可靠的,但就是串口不工作。

   请高手指点迷津呀!先谢了!
  
        另公司招聘软件工程师,有意的加我QQ:1478712032

zykzyk-93033 发表于 2013-2-27 20:44:45

RE:关于stm8串口假死问题的求救

可能是软件激活了某种状态标志,但是软件没有处理,导致串口一直不能正常进行接收了。你试试做一个按键串口发送数据的功能,等出现问题时,你看看按键串口还能否发送数据。然后加以判断分析。:D

zjwwyhello 发表于 2013-2-28 07:58:09

RE:关于stm8串口假死问题的求救

在假死时是可以发送数据的,等发送完了,有时能激活接收,有时不能。说明接收有问题,或者接收后的处理有问题。但还是想不明白,TX被碰了一下G以后为什么对串口收发的使能或者程序的正常运行会有影响?用G去碰RX是不会的,为什么就碰TX会这样? 是什么样的影响过程原理?

laoganzheng 发表于 2016-9-9 20:56:56

你好,我想问一下,你这个问题后面找到问题的所在了吗?我现在就遇到这个和你差不多一样的问题?

laoganzheng 发表于 2016-9-9 20:57:46


你好,我想问一下,你这个问题后面找到问题的所在了吗?我现在就遇到这个和你差不多一样的问题?

Edan 发表于 2018-9-20 21:06:33

:funk:我也遇到相似的问题,没有楼主的那么容易复现。现在也是懵得很。最后怎么处理的?
页: [1]
查看完整版本: 关于stm8串口假死问题的求救