xiaobendan 发表于 2025-12-9 09:18:05

请教STC15F2K32和串口屏通讯失败的问题

如题,上电是正常的,大概几小时后,偶尔会发现通讯失败,屏端有重发机制,屏发给单片机的是正常的,但是单片机收到后要回复一个数据,屏端收不到就一直重发。

实测发生情况就是单片机的发送不正常了。
这个是单片机接收到的信号,波特率9600
这个是单片机发送的内容,很明显是不对的。

这是啥情况?
出现概率不大,5%以下吧,时间也不一定,有时候通电运行好几天也没有。有时候不到1小时就出现。出现时屏幕操作对输出是有效的。但是屏收不到任何信息了。只能断电重启才能恢复正常,怎样避免这种情况发生?单片机端有啥办法可以实施?

lcwswust 发表于 2025-12-9 10:02:14

大概率是你的代码写得有问题

Ayb_ice 发表于 2025-12-9 10:13:15

这明显是你程序问题,建议接收用队列缓冲区,主循环取出数据处理

xiaobendan 发表于 2025-12-9 10:22:08

Ayb_ice 发表于 2025-12-9 10:13
这明显是你程序问题,建议接收用队列缓冲区,主循环取出数据处理

是用中断方式的,每次TI后发送下个字节。直到缓冲区内容发送完毕。如果程序问题,为何有的好使有的不好使,大部分都没问题啊。有问题的也不是一直有,不定时出现,同一个板子,大概率只会出一次,断电重启后就连续几天都不会出了。
看起来只是发送了一个起始位,连续的起始位,没有数据。这个板子用的P16和17.
另外一个没有转移,是30和31的,一样的也会这样,都是偶尔出现。

xiaobendan 发表于 2025-12-9 10:24:32

Ayb_ice 发表于 2025-12-9 10:13
这明显是你程序问题,建议接收用队列缓冲区,主循环取出数据处理

就算程序问题,起码也要发送一个完整的字节吧。
难道发送没完成1毫秒时又写了SBUF就会重启发送起始位?而不是等待完成再发?
我发送第一个字节是直接写SBUF的,剩余的都是在TI发生以后才发送的啊

xiaobendan 发表于 2025-12-9 10:25:21

Ayb_ice 发表于 2025-12-9 10:13
这明显是你程序问题,建议接收用队列缓冲区,主循环取出数据处理

即便是第一个字节,也是在RI中发送的。

Ayb_ice 发表于 2025-12-9 10:29:16

xiaobendan 发表于 2025-12-9 10:24
就算程序问题,起码也要发送一个完整的字节吧。
难道发送没完成1毫秒时又写了SBUF就会重启发送起始位?而 ...

每次发送都要等待前一发送完成,建议第一字节发帝直接延时一段时间再发

_奶咖君_ 发表于 2025-12-9 10:35:47

xiaobendan 发表于 2025-12-9 10:24
就算程序问题,起码也要发送一个完整的字节吧。
难道发送没完成1毫秒时又写了SBUF就会重启发送起始位?而 ...

我觉得你应该把你的代码甩到他们脸上,,让他们看看

网老四 发表于 2025-12-9 10:44:17

串口屏重发周期是多少?会不会偶发的单片机发送处理错误,串口屏拼命重发导致单片机来不及处理,一直重发一直出错锁死了

xiaobendan 发表于 2025-12-9 11:35:26

网老四 发表于 2025-12-9 10:44
串口屏重发周期是多少?会不会偶发的单片机发送处理错误,串口屏拼命重发导致单片机来不及处理,一直重发一直 ...

看波形,锁死就会出现这种波形?关键是屏上的操作单片机这边还是有正常的动作的,重发间隔和正常工作时是一样的。而且出问题时,屏幕没有任何操作。只是不断的请求一些数据用来显示的。
页: [1] 2 3
查看完整版本: 请教STC15F2K32和串口屏通讯失败的问题