本帖最后由 影烛光 于 2020-12-24 21:51 编辑
求问个各位大佬,有什么想法或者思路吗。485通讯, 波特率是115200 处理方法是中断收发数据,(中断优先级最高),主程序中检测到总线大于2ms空闲后,进行接收数据处理,再重新发送。
错误的概率不高,但是偶尔会出现。
目前最严重的情况是直接导致单片机和屏幕无法进行通讯(无法自己调节,重启后仍可能无法通讯,从这个现象来看是不是干扰的可能性大点?)
检测到的错误语句类似于:
上位机:
01 03 00 00 00 20 CRC1 CRC2
单片机:
03 00 00 00 20 CRC1 CRC2
或者
00 00 00 20 CRC1 CRC2
|
@zyj9490 :1000ms是正常的就是我延时太长,实际上是在通讯的
@影烛光 :100MS无法通信,应是变量没处理好吧。
@zyj9490 :我这个也是这样处理的,在定时中断中累加空闲时间,然后接收字节后清零.
@影烛光 :如果采用的是商用的485模块的话,它们的切换时间是固定的,不可更改,也就是说模块的方向脚改变,对外485端口不能马上切换。也可以用低波特率试下,稳定度好于高波特率。
@影烛光 :计空闲变量OVERFLOW的原因。
@影烛光 :纯属是软件问题,我处理问题从机,有空闲时间计数器,一方面由定时中断不断累加,另一方面由串口接收中断不断清零,只要接收到一个字节就清零。后从主程序里判空闲时间是否足够。其余。。。。
@影烛光 :这种问题应是计时变量一出的问题,无法判断空闲时间了。
@zyj9490 :没断.就是比较慢,看起来就像是刷新不出来
@zyj9490 :有个奇怪的现象,根据理解,如果主机发送延时1000ms,应该也能正常通讯的吧,但是延时1000ms,就通讯不上了
@zyj9490 :我设置主机接收到数据后延时20ms通讯,也有一定概率出错.