发新帖我要提问
12
返回列表
打印
[STM32G4]

串口不定长接收怎么做更好

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
loutin| | 2024-4-12 16:02 | 只看该作者 回帖奖励 |倒序浏览
为了避免程序陷入无限等待,可以设置一个合理的超时时间。如果在规定时间内仍未接收到数据,则可以认为当前数据帧已经结束。

使用特权

评论回复
22
pl202| | 2024-4-15 12:04 | 只看该作者
在发送的数据末尾添加一个特定的结束符。当接收到这个结束符时,就知道当前帧的数据已经完全接收完毕。这种方法简单高效,但需要注意结束符不能是通信中可能传输的字符。

使用特权

评论回复
23
timfordlare| | 2024-4-15 15:26 | 只看该作者
环形缓冲区可以在固定大小的内存空间中循环存放数据,从而避免了固定长度缓冲区的限制。

使用特权

评论回复
24
pl202| | 2024-4-16 12:23 | 只看该作者
在接收过程中,可能会遇到数据丢失、乱码等问题。因此,需要设计合适的错误处理机制,如校验和、重传等,以确保数据的完整性和准确性。

使用特权

评论回复
25
usysm| | 2024-4-16 19:23 | 只看该作者
为接收的数据分配一个缓冲区,当串口接收到数据时,将其存储到缓冲区中。这样可以确保即使数据不是一次性到达,也能完整地保存下来。

使用特权

评论回复
26
hearstnorman323| | 2024-4-17 11:20 | 只看该作者
双方约定数据包的开始和结束标志,例如使用特定的字节序列作为帧的起始和结束。当接收端检测到起始标志时,开始接收数据,直到检测到结束标志为止。

使用特权

评论回复
27
updownq| | 2024-4-19 13:42 | 只看该作者
将串口接收设置为中断触发模式,每当有数据到达时,就触发一个中断服务例程来处理接收到的数据。这样可以及时响应串口数据的到来,而不必一直轮询串口状态。

使用特权

评论回复
28
burgessmaggie| | 2024-4-20 18:14 | 只看该作者
设置一个定时器,定时检查串口是否接收到数据。如果定时器到期时串口仍没有接收到数据,则认为当前帧接收完毕。这种方法适用于数据传输速率较慢或数据帧之间间隔较长的情况。

使用特权

评论回复
29
huquanz711| | 2024-4-20 22:09 | 只看该作者
用串口空闲中断处理

使用特权

评论回复
30
jimmhu| | 2024-4-22 13:23 | 只看该作者
使用缓冲区来存储接收到的数据,直到整个数据包接收完成。确保缓冲区的大小足够大,以防止数据溢出。

使用特权

评论回复
31
dspmana| | 2024-4-22 22:33 | 只看该作者
在某些协议中,数据包末尾会有一个特定的结束符,如换行符"\n"或回车符"\r"。通过检测这个结束符,可以确定一帧数据的结束位置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则