用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 |
RE:关于stm8串口假死问题的求救
RE:关于stm8串口假死问题的求救
你好,我想问一下,你这个问题后面找到问题的所在了吗?我现在就遇到这个和你差不多一样的问题?