Bblythe 发表于 2025-5-9 07:38

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

我明明发出去了请求,但有时对方明明回应了,单片机就是没收到,这是时序问题?

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通过定时轮询或中断通知的方式读取缓冲区中的数据
页: [1]
查看完整版本: 用USART做Modbus通信老丢回应包,有人遇到吗?