您尚未登录。

楼主 # 2025-06-24 06:45:06

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 9
积分: 53

Luban Lite 串口轮循发送函数,没有发送完成就函数返回,导致485芯片发送数据不完整的问题总结

使用芯片:D211BBV
使用Luban Lite SDK版本:V1.2.0
串口模式:RS232 normal


原因分析:
串口轮循发送数据函数返回时,实际串口发送数据并没有结束。如果此时控制485芯片收发引脚,会导致最后几个字节发送失败。原因是官方SDK中串口轮询发送函数发送数据没有检测数据是否发送完成导致的。
错误现象:
1.png

解决办法:   
调用hal_usart_flush函数,确保串口数据真正发送完成。

rt_device_write(serial1, 0, uart[1].tx_buf, uart[1].tx_len);
hal_usart_flush(serial1->user_data, USART_FLUSH_WRITE);

正常发送数据
2.png

最近编辑记录 lqcfly (2025-06-24 07:21:27)

离线

楼主 #2 2025-06-24 13:58:07

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 9
积分: 53

Re: Luban Lite 串口轮循发送函数,没有发送完成就函数返回,导致485芯片发送数据不完整的问题总结

海石生风 说:

芯片支持RS-485硬件自动控制收发方向,即串口支持RS485模式。用硬件RS485-DE引脚不是更方便简单?

这个方式是可以,但是为了兼容以前的硬件和程序,没办法直接使用RS485模式

离线

楼主 #5 2025-07-19 09:31:49

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 9
积分: 53

Re: Luban Lite 串口轮循发送函数,没有发送完成就函数返回,导致485芯片发送数据不完整的问题总结

大林 说:

@lqcfly

理论上就算系统回复发送已经完成,也应该延时一下吧,如果直接拉DE脚也会出现数据发送丢失的现象

_选择区域_20250719092557.png
_选择区域_20250719092523.png
hal_usart_flush函数里边,有个延时等待TEMT状态位的过程。看手册的意思,TEMT状态为1,代表就是数据彻底发送完成了。我觉得这个等待的过程,就相当于延时了吧,而且等待时间也比较精准。

最近编辑记录 lqcfly (2025-07-19 09:39:19)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn