F407通过串口转485给F070发送数据,出错
uart3,波特率115200,发送ASCII码,一组报文7个字符包括尾部的回车换行。每20ms发一组报文。HAL_UART_Transmit(&huart3,(uint8_t *)send_value,7,100);监视串口发送数据,一千条报文中总会出一包出错。
比如正常报文是“SC300/r/n”,出错报文为“SC3”或“SC30”
发送间隔改为100ms,还是会出现这种错误。
请教高手
这种漏字节很像是 485 驱动芯片的发送/接收切换没切好,检查下 DE/RE 控制。 你是半双工吗?485 发完后没延时就切换方向,数据尾巴可能没发完。 HAL_UART_Transmit 会阻塞到发完,但有时候 DMA 还没清,试试加个延时再切 DE。 把波形抓出来看看,确认 TX 线是不是真的发了 7 个字节。 也有可能是总线干扰,485 线上有反射或接地不良也会丢字节。 试试用环形缓冲或 DMA 连续发,看会不会稳定些。 把波特率调低一点试试,有时高波特率对线缆质量要求高。 你尾部的 \r\n 是不是字符串里没放对?最好用十六进制监视下发了啥。 F070 那边接收缓冲够不够?溢出的话也可能导致短帧。 要不先换成普通串口直连测试,排除是不是 485 硬件的问题。 若前一次发送未完成(硬件仍在发送),就调用HAL_UART_Transmit,可能导致数据覆盖或发送不完整。 中断冲突或优先级问题吧。。 HAL 库版本或配置问题。某些 HAL 库版本存在 UART 发送的 Bug,需检查更新。 降低 UART 中断优先级。 增加 HAL_UART_Transmit 超时时间。 UART3 的发送中断可能被其他高优先级中断抢占,导致发送未完成。 如果用 DMA,可能 DMA 中断未正确处理。 HAL_UART_Transmit() 的超时参数可能不足,尤其在系统负载较高时。 RS485 半双工通信中,方向控制信号切换延迟可能导致数据丢失。
页:
[1]