您尚未登录。

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

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

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)

离线

#1 2025-06-24 12:43:37

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 718
积分: 852
个人网站

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

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

离线

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

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

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

海石生风 说:

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

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

离线

#3 2025-06-28 09:43:31

大林
会员
注册时间: 2022-07-08
已发帖子: 27
积分: 37

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

@lqcfly

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

离线

#4 2025-06-28 14:22:02

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 718
积分: 852
个人网站

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

大林 说:

@lqcfly

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

是的,flush只是确保没有缓存了,但最后一个字节可能还没发送完成。所以至多还要延时10个bit的传输时长。

还有一个方法就是RS485芯片的DE和RE引脚分开控制,让发送的同时使能RE并开启串口接收,当接收到的数据长度跟发送的一致时,表示发送已经完成。
这样做还有一个额外的功能,发送的同时接收,如果接收到数据跟发送的不一致,就表示发送有问题。

最近编辑记录 海石生风 (2025-06-28 14:28:48)

离线

页脚

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

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