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

[复制链接]
764|10
 楼主| Bblythe 发表于 2025-5-9 07:38 | 显示全部楼层 |阅读模式
我明明发出去了请求,但有时对方明明回应了,单片机就是没收到,这是时序问题?
Clyde011 发表于 2025-5-9 07:41 | 显示全部楼层
会不会发包太快,对方来不及响应?
周半梅 发表于 2025-5-9 07:42 | 显示全部楼层
波特率同步了吗?
公羊子丹 发表于 2025-5-9 07:43 | 显示全部楼层
接收中断和DMA你怎么配的?
帛灿灿 发表于 2025-5-9 07:44 | 显示全部楼层
有没有加Modbus超时判断?
童雨竹 发表于 2025-5-9 07:44 | 显示全部楼层
是不是串口收缓冲满了?
万图 发表于 2025-5-9 07:45 | 显示全部楼层
你试试串口上加个逻辑分析仪抓包。
Wordsworth 发表于 2025-5-9 07:46 | 显示全部楼层
半双工?方向控制加了吗?
 楼主| Bblythe 发表于 2025-5-9 07:47 | 显示全部楼层
会不会是接收中断被其他中断抢走了?
Pulitzer 发表于 2025-5-9 07:48 | 显示全部楼层
看看有没有帧校验错误被你丢包?
Uriah 发表于 2025-5-9 07:49 | 显示全部楼层
你是轮询发包还是中断触发?
捧一束彼岸花 发表于 2025-6-14 09:00 | 显示全部楼层
发送端与接收端波特率不同,导致数据传输错误。确保双方波特率一致,例如都设置为9600或115200
西洲 发表于 2025-6-14 10:30 | 显示全部楼层
信号在线缆上传输过程中衰减或受到噪声影响。建议使用高质量的电缆,缩短线缆长度,使用终端电阻或信号放大器来改善信号质量
白马过平川 发表于 2025-6-14 11:00 | 显示全部楼层
外部电磁干扰、电源波动等可能导致信号失真。使用屏蔽电缆,确保良好的接地,远离强电磁场源,使用滤波器或稳压器来减少电源波动的影响
将爱藏于深海 发表于 2025-6-14 12:00 | 显示全部楼层
高优先级中断抢占了USART中断的处理时间。使用nvic_setpriority函数设置USART中断优先级高于其他非关键中断,避免在同一优先级下存在多个中断源,防止中断嵌套引发延迟
春日负喧 发表于 2025-6-14 13:00 | 显示全部楼层
DMA中断可能影响USART中断状态,导致数据丢失。确保DMA通道正确配置,避免DMA中断与USART中断冲突。例如,在ADC采样时,若使用DMA中断且计算耗时过长,可去掉有效值计算,把除法计算改成直接移位,加大采样Buf,减少中断次数
风凉 发表于 2025-6-14 20:30 | 显示全部楼层
接收超时时间设置得太短,可能会误认为没有数据到达而关闭接收操作。根据实际应用情况合理设置超时时间,确保有足够的时间来接收数据
她已醉 发表于 2025-6-15 00:00 | 显示全部楼层
数据处理逻辑耗时过长,未能及时清空接收缓冲区。优化数据处理逻辑,减少不必要的计算,确保在中断服务函数中快速读取并处理数据
故意相遇 发表于 2025-6-15 00:30 | 显示全部楼层
如未正确读取缓冲区数据、错误处理不当等。仔细检查和测试接收代码,确保数据读取和处理逻辑正确无误
温室雏菊 发表于 2025-6-15 08:00 | 显示全部楼层
USART硬件接收缓冲区有限,在高速通信场景下容易发生溢出。设计合理的缓存管理机制,采用环形缓冲区可以有效解决缓冲区溢出问题。CPU通过定时轮询或中断通知的方式读取缓冲区中的数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

162

主题

6081

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部