485通讯偶尔出现第一个字节或者前两个字节丢失

[复制链接]
17470|25
手机看帖
扫描二维码
随时随地手机跟帖
影烛光|  楼主 | 2020-12-24 21:45 | 显示全部楼层 |阅读模式
本帖最后由 影烛光 于 2020-12-25 10:29 编辑

485通讯, 波特率是115200  思路是中断收发数据,主程序中检测到总线大于2ms空闲后,进行接收数据处理,再重新发送。
错误的概率不高,但是偶尔会出现。
目前最严重的情况是直接导致单片机和屏幕无法进行通讯(无法自己调节,重启后仍可能无法通讯)
214644ocw3dwwwyrl36ycr.jpg.thumb.jpg 补充一下,这个是原理图

使用特权

评论回复

相关帖子

天意无罪| | 2020-12-25 08:35 | 显示全部楼层
485总线跑115200?通讯距离好远?MCU和屏幕通讯是什么接口?

使用特权

评论回复
oufuqiang| | 2020-12-25 08:55 | 显示全部楼层
空闲电平是否保持在1电平?空闲时是否有杂波在RXD?

使用特权

评论回复
steelen| | 2020-12-25 09:58 | 显示全部楼层
收发转换冲突,不是干扰
你慢慢理解吧

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 10:02 | 显示全部楼层
天意无罪 发表于 2020-12-25 08:35
485总线跑115200?通讯距离好远?MCU和屏幕通讯是什么接口?

距离就几米,接口用的是DB9的串口线

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 10:03 | 显示全部楼层
oufuqiang 发表于 2020-12-25 08:55
空闲电平是否保持在1电平?空闲时是否有杂波在RXD?

用10K电阻上拉,示波器看并没有杂波

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 10:06 | 显示全部楼层
steelen 发表于 2020-12-25 09:58
收发转换冲突,不是干扰
你慢慢理解吧

你好,发送完成之后,切换到接受状态有小概率出现数据帧丢失前一个或者前两个字节。
是在切换方向线后,需要一定延时?我尝试过改变方向信号后,设置的2ms延时,仍旧有概率出错

使用特权

评论回复
评论
zyj9490 2020-12-25 10:51 回复TA
如果相当延时(主机)还是有问题,应怀疑单片机的中断间的协调性了。 
zyj9490 2020-12-25 10:50 回复TA
主机方收到响应后,空闲一段时间后(为了让从机有足够时间切换到接收状态准备)。再发下一贞命令。相信主机方的切换足够快。 
zyj9490 2020-12-25 10:47 回复TA
切换不过快,应在发送端(主机方)切换时间拉长。 
天意无罪| | 2020-12-25 10:50 | 显示全部楼层
影烛光 发表于 2020-12-25 10:02
距离就几米,接口用的是DB9的串口线

那应该还是你程序逻辑处理有问题

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 11:04 | 显示全部楼层
天意无罪 发表于 2020-12-25 10:50
那应该还是你程序逻辑处理有问题

蛮奇怪的,现在把所有东西都屏蔽掉了,只剩下通讯。  还是有概率会出现错误帧

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 11:04 | 显示全部楼层
天意无罪 发表于 2020-12-25 10:50
那应该还是你程序逻辑处理有问题

现在整个程序就初始化的引脚配置 ,然后定时器中断,优先级比UART要低。然后就是中断接收数据了。。

使用特权

评论回复
天意无罪| | 2020-12-25 11:42 | 显示全部楼层
终端电阻1K?

使用特权

评论回复
评论
steelen 2020-12-25 12:03 回复TA
与这个关系不大 
影烛光|  楼主 | 2020-12-25 13:50 | 显示全部楼层

不接,或者120R,1K都会出现这个问题.

使用特权

评论回复
天意无罪| | 2020-12-25 13:54 | 显示全部楼层
影烛光 发表于 2020-12-25 13:50
不接,或者120R,1K都会出现这个问题.

没看明白你这个描述,485通讯出错怎么又导致你的MCU和屏幕不通了?485通信就是MCU和屏幕之间的通信接口?

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 14:01 | 显示全部楼层
天意无罪 发表于 2020-12-25 13:54
没看明白你这个描述,485通讯出错怎么又导致你的MCU和屏幕不通了?485通信就是MCU和屏幕之间的通信接口? ...

是的,485是MCU和屏幕之间的通讯

使用特权

评论回复
天意无罪| | 2020-12-25 16:54 | 显示全部楼层
影烛光 发表于 2020-12-25 14:01
是的,485是MCU和屏幕之间的通讯

我的理解是这样的,你写屏幕和读屏幕是不是都要先发命令,屏幕接收到命令后,将485切换为发状态然后发送数据,如果这时候你MCU的485还处于发状态,那肯定就会出现数据丢帧或出错。不知道你的应用逻辑是否这样?

使用特权

评论回复
影烛光|  楼主 | 2020-12-25 17:19 | 显示全部楼层
天意无罪 发表于 2020-12-25 16:54
我的理解是这样的,你写屏幕和读屏幕是不是都要先发命令,屏幕接收到命令后,将485切换为发状态然后发送 ...

在屏幕上加个控件,触摸屏刷新数据需要一直从MCU获取数据。逻辑就是   MCU一直处于接收状态,获取触摸屏发送过来的数据,MCU接收数据响应,将485方向线切换到发送,数据返还给触摸屏。MCU发送结束后将485方向线切换到接收,等待触摸屏下一次指令到来。

使用特权

评论回复
cjseng| | 2020-12-26 21:38 | 显示全部楼层
触摸屏是主机,MCU是从机,那么,是触摸屏发给MCU的数据丢失,还是MCU发给触摸屏的数据丢失?用的MODBUS?
我觉得问题可能出在通讯双方波特率误差太大。

使用特权

评论回复
天意无罪| | 2020-12-26 22:08 | 显示全部楼层
影烛光 发表于 2020-12-25 17:19
在屏幕上加个控件,触摸屏刷新数据需要一直从MCU获取数据。逻辑就是   MCU一直处于接收状态,获取触摸屏发 ...

原来如此,那你的屏幕在数据接收处理这个过程有特殊说明和要求没?

使用特权

评论回复
影烛光|  楼主 | 2020-12-27 14:01 | 显示全部楼层
天意无罪 发表于 2020-12-26 22:08
原来如此,那你的屏幕在数据接收处理这个过程有特殊说明和要求没?

没有特别要求的。现在已经解决了,是收发程序  中断没协调好

使用特权

评论回复
影烛光|  楼主 | 2020-12-27 14:02 | 显示全部楼层
谢谢各位大佬们提的宝贵意见和想法,问题已经解决了。是我在主程序中处理接收的程序和中断发生重合了,然后刚好丢失第一或者前两个字节了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

67

帖子

0

粉丝