打印
[STM32F0]

用USART做Modbus通信老丢回应包,有人遇到吗?

[复制链接]
349|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bblythe|  楼主 | 2025-5-9 07:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我明明发出去了请求,但有时对方明明回应了,单片机就是没收到,这是时序问题?

使用特权

评论回复
沙发
Clyde011| | 2025-5-9 07:41 | 只看该作者
会不会发包太快,对方来不及响应?

使用特权

评论回复
板凳
周半梅| | 2025-5-9 07:42 | 只看该作者
波特率同步了吗?

使用特权

评论回复
地板
公羊子丹| | 2025-5-9 07:43 | 只看该作者
接收中断和DMA你怎么配的?

使用特权

评论回复
5
帛灿灿| | 2025-5-9 07:44 | 只看该作者
有没有加Modbus超时判断?

使用特权

评论回复
6
童雨竹| | 2025-5-9 07:44 | 只看该作者
是不是串口收缓冲满了?

使用特权

评论回复
7
万图| | 2025-5-9 07:45 | 只看该作者
你试试串口上加个逻辑分析仪抓包。

使用特权

评论回复
8
Wordsworth| | 2025-5-9 07:46 | 只看该作者
半双工?方向控制加了吗?

使用特权

评论回复
9
Bblythe|  楼主 | 2025-5-9 07:47 | 只看该作者
会不会是接收中断被其他中断抢走了?

使用特权

评论回复
10
Pulitzer| | 2025-5-9 07:48 | 只看该作者
看看有没有帧校验错误被你丢包?

使用特权

评论回复
11
Uriah| | 2025-5-9 07:49 | 只看该作者
你是轮询发包还是中断触发?

使用特权

评论回复
12
捧一束彼岸花| | 2025-6-14 09:00 | 只看该作者
发送端与接收端波特率不同,导致数据传输错误。确保双方波特率一致,例如都设置为9600或115200

使用特权

评论回复
13
西洲| | 2025-6-14 10:30 | 只看该作者
信号在线缆上传输过程中衰减或受到噪声影响。建议使用高质量的电缆,缩短线缆长度,使用终端电阻或信号放大器来改善信号质量

使用特权

评论回复
14
白马过平川| | 2025-6-14 11:00 | 只看该作者
外部电磁干扰、电源波动等可能导致信号失真。使用屏蔽电缆,确保良好的接地,远离强电磁场源,使用滤波器或稳压器来减少电源波动的影响

使用特权

评论回复
15
将爱藏于深海| | 2025-6-14 12:00 | 只看该作者
高优先级中断抢占了USART中断的处理时间。使用nvic_setpriority函数设置USART中断优先级高于其他非关键中断,避免在同一优先级下存在多个中断源,防止中断嵌套引发延迟

使用特权

评论回复
16
春日负喧| | 2025-6-14 13:00 | 只看该作者
DMA中断可能影响USART中断状态,导致数据丢失。确保DMA通道正确配置,避免DMA中断与USART中断冲突。例如,在ADC采样时,若使用DMA中断且计算耗时过长,可去掉有效值计算,把除法计算改成直接移位,加大采样Buf,减少中断次数

使用特权

评论回复
17
风凉| | 2025-6-14 20:30 | 只看该作者
接收超时时间设置得太短,可能会误认为没有数据到达而关闭接收操作。根据实际应用情况合理设置超时时间,确保有足够的时间来接收数据

使用特权

评论回复
18
她已醉| | 2025-6-15 00:00 | 只看该作者
数据处理逻辑耗时过长,未能及时清空接收缓冲区。优化数据处理逻辑,减少不必要的计算,确保在中断服务函数中快速读取并处理数据

使用特权

评论回复
19
故意相遇| | 2025-6-15 00:30 | 只看该作者
如未正确读取缓冲区数据、错误处理不当等。仔细检查和测试接收代码,确保数据读取和处理逻辑正确无误

使用特权

评论回复
20
温室雏菊| | 2025-6-15 08:00 | 只看该作者
USART硬件接收缓冲区有限,在高速通信场景下容易发生溢出。设计合理的缓存管理机制,采用环形缓冲区可以有效解决缓冲区溢出问题。CPU通过定时轮询或中断通知的方式读取缓冲区中的数据

使用特权

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

本版积分规则

100

主题

5052

帖子

0

粉丝