地瓜patch 发表于 2025-7-18 17:47

F407通过串口转485给F070发送数据,出错

uart3,波特率115200,发送ASCII码,一组报文7个字符包括尾部的回车换行。每20ms发一组报文。HAL_UART_Transmit(&huart3,(uint8_t *)send_value,7,100);
监视串口发送数据,一千条报文中总会出一包出错。
比如正常报文是“SC300/r/n”,出错报文为“SC3”或“SC30”

发送间隔改为100ms,还是会出现这种错误。




请教高手

公羊子丹 发表于 2025-7-25 07:26

这种漏字节很像是 485 驱动芯片的发送/接收切换没切好,检查下 DE/RE 控制。

周半梅 发表于 2025-7-25 07:27

你是半双工吗?485 发完后没延时就切换方向,数据尾巴可能没发完。

帛灿灿 发表于 2025-7-25 07:28

HAL_UART_Transmit 会阻塞到发完,但有时候 DMA 还没清,试试加个延时再切 DE。

童雨竹 发表于 2025-7-25 07:29

把波形抓出来看看,确认 TX 线是不是真的发了 7 个字节。

万图 发表于 2025-7-25 07:30

也有可能是总线干扰,485 线上有反射或接地不良也会丢字节。

Wordsworth 发表于 2025-7-25 07:30

试试用环形缓冲或 DMA 连续发,看会不会稳定些。

Bblythe 发表于 2025-7-25 07:31

把波特率调低一点试试,有时高波特率对线缆质量要求高。

Pulitzer 发表于 2025-7-25 07:32

你尾部的 \r\n 是不是字符串里没放对?最好用十六进制监视下发了啥。

Uriah 发表于 2025-7-25 07:33

F070 那边接收缓冲够不够?溢出的话也可能导致短帧。

Clyde011 发表于 2025-7-25 07:34

要不先换成普通串口直连测试,排除是不是 485 硬件的问题。

wang6623 发表于 2025-7-28 14:17

若前一次发送未完成(硬件仍在发送),就调用HAL_UART_Transmit,可能导致数据覆盖或发送不完整。

stormwind123 发表于 2025-7-28 15:13

中断冲突或优先级问题吧。。

elephant00 发表于 2025-7-28 15:17

HAL 库版本或配置问题。某些 HAL 库版本存在 UART 发送的 Bug,需检查更新。

duo点 发表于 2025-7-28 15:18

降低 UART 中断优先级。

onlycook 发表于 2025-7-28 15:18

增加 HAL_UART_Transmit 超时时间。

probedog 发表于 2025-7-28 16:13

UART3 的发送中断可能被其他高优先级中断抢占,导致发送未完成。

classroom 发表于 2025-7-28 18:14

如果用 DMA,可能 DMA 中断未正确处理。

flycamelaaa 发表于 2025-7-28 19:14

HAL_UART_Transmit() 的超时参数可能不足,尤其在系统负载较高时。

powerantone 发表于 2025-7-28 20:15

RS485 半双工通信中,方向控制信号切换延迟可能导致数据丢失。
页: [1]
查看完整版本: F407通过串口转485给F070发送数据,出错