硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1138|回复: 11
收起左侧

[UART] 485通信的在高波特率下有时候收不到数据

[复制链接]

13

主题

54

回帖

93

积分

初级会员

积分
93
发表于 2022-9-9 17:37:15 | 显示全部楼层 |阅读模式
我这边做了块板子和一个485设备通信,使用的是modbus协议,现在测试38400的波特率下跟设备通信,03功能码,读取长度大于50的时候,有时候会收不到数据这是什么情况呢,然后我用usb转串口加485模块接上板子,用电脑模拟modbus通信在这个波特率下又是正常的。其他情况分别测试在9600、19200下是可以通信上的。
接线的话:只单独接了AB两根线,板子的电源是设备提供的24V



image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2022-9-10 01:03:30 | 显示全部楼层
示波器测试下你配置的38400的波特率误差略大,有可能是这个问题。
回复

使用道具 举报

6

主题

640

回帖

658

积分

金牌会员

积分
658
QQ
发表于 2022-9-11 11:30:06 | 显示全部楼层
加个共地线试试呢
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-13 08:47:13 | 显示全部楼层
eric2013 发表于 2022-9-10 01:03
示波器测试下你配置的38400的波特率误差略大,有可能是这个问题。

ok  我用示波器测一测
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-13 08:48:32 | 显示全部楼层
yklstudent 发表于 2022-9-11 11:30
加个共地线试试呢

接了好像没什么用  分别有两个接地的好像:shleld、com 这两个我都接了 但是效果一样
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2022-9-13 09:23:50 | 显示全部楼层
1. “有时候会收不到数据”请补充表述下,是无响应,还是有响应但校验失败?
2. 既然测了波形,可以考虑分析下异常情况下波形
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-19 09:48:59 | 显示全部楼层
emwin 发表于 2022-9-13 09:23
1. “有时候会收不到数据”请补充表述下,是无响应,还是有响应但校验失败?
2. 既然测了波形,可以考虑分 ...

用示波器测量,波特率没有问题,我在调试状态下通信,在接收的位置查看,发现接收到的数据丢失了,包头数据正确,但是尾部缺失了,每次缺失的长度都不同。串口部分的代码使用的是串口+空闲中断+dma接收(有其他板子用的是232,通信正常,没有出现这个现象)
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-19 15:57:13 | 显示全部楼层
新发现:
1.我将接收到的长度进行打印,发现不知道为什么一帧数据被分成了两帧,两帧的数据长度正好等于正常访问的数据长度。
2.正常的数据 【----OK-----RecvPlc_len=19b】长度即:0x19b
3.错误的数据
bad count=0        recLen=0x158
bad count=1        recLen=0x43
image.png
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-19 17:20:56 | 显示全部楼层
myNameIsLin 发表于 2022-9-19 09:48
用示波器测量,波特率没有问题,我在调试状态下通信,在接收的位置查看,发现接收到的数据丢失了,包头数 ...

我将每次接收到的长度打印出来,发现两次数据的长度加在一起就等于完整数据的长度,从情况看好像空闲中断被提前触发了?
回复

使用道具 举报

3

主题

47

回帖

56

积分

初级会员

积分
56
发表于 2022-9-19 19:32:16 | 显示全部楼层
Modbus的帧间隔是3.5个字符,正常情况下是要开一个定时器,确定3.5个字符的时间没有消息的话才是一帧数据,不是一次空闲中断就是一帧数据
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-20 09:43:04 | 显示全部楼层
baobao5 发表于 2022-9-19 19:32
Modbus的帧间隔是3.5个字符,正常情况下是要开一个定时器,确定3.5个字符的时间没有消息的话才是一帧数据, ...

好的,谢谢, 之前没有认真看协议
回复

使用道具 举报

13

主题

54

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2022-9-20 10:53:40 | 显示全部楼层
解决了,谢谢,我把空闲中断换成超时中断,然后再去取dma的数据,现在能完整收到一帧数据了。
image.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 19:19 , Processed in 0.192959 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表