打印
[STM32F1]

如何不定长获取串口数据,并且不会出现丢数据的情况呢?

[复制链接]
343|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangjiaxu|  楼主 | 2024-8-31 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何不定长获取串口数据,并且不会出现丢数据的情况呢?现在有个需求就是串口要接受设备的数据,数据大概1K字节,需要循环收数据,并且1K字节对我设备来说只有256个字节有用,每次我都需要找到这256个字节数据进行数据处理,但这1K字节没有数据头和尾,怎么处理会不丢每一包的数据并且不影响效率呢?

使用特权

评论回复
沙发
失物招領| | 2024-9-24 08:32 | 只看该作者
在处理不定长串口数据时,确保不丢失数据且不影响效率是一个挑战。可以使用缓冲区,创建一个足够大的缓冲区来存储接收到的数据。缓冲区的大小应至少等于你预期的最大数据包大小(例如1K字节)。

使用特权

评论回复
板凳
她已醉| | 2024-9-24 11:00 | 只看该作者
为了提高效率,可以使用中断或直接内存访问(DMA)来处理串口数据。DMA可以在后台自动传输数据到缓冲区,而不会阻塞主程序

使用特权

评论回复
地板
将爱藏于深海| | 2024-9-24 13:00 | 只看该作者
由于你只需要1K字节中的256字节有用数据,可以考虑以下方法来分割和处理数据: 固定位置提取,如果256字节的有用数据在1K字节中的固定位置,可以直接从缓冲区中提取这些数据进行处理。

使用特权

评论回复
5
春日负喧| | 2024-9-24 15:00 | 只看该作者
如果256字节的有用数据没有固定位置,但可以通过某种标记或同步字节来识别,可以在缓冲区中搜索这些标记或同步字节,然后提取相应的数据。

使用特权

评论回复
6
故意相遇| | 2024-9-24 19:00 | 只看该作者
如果1K字节的数据包之间没有明确的分隔,可以考虑将数据分成固定大小的块(例如256字节),然后对每个块进行处理。如果某个块包含不完整或无效的数据,可以丢弃该块并继续处理下一个块。

使用特权

评论回复
7
白马过平川| | 2024-9-24 21:00 | 只看该作者
确保缓冲区大小足够大,以容纳最大数据包。

使用特权

评论回复
8
温室雏菊| | 2024-9-24 23:00 | 只看该作者
正确配置DMA以确保数据传输的正确性和效率。

使用特权

评论回复
9
风凉| | 2024-9-25 02:00 | 只看该作者
根据实际需求,调整数据处理逻辑,确保提取和处理有用数据。

使用特权

评论回复
10
捧一束彼岸花| | 2024-9-25 06:00 | 只看该作者
一般可以使用串口+DMA的方式做环形缓冲区就好了

使用特权

评论回复
11
西洲| | 2024-9-25 08:00 | 只看该作者
不都是用双缓冲比较OK的吗

使用特权

评论回复
12
csv7k1| | 2024-9-29 22:37 | 只看该作者
数据大概1K字节,需要循环收数据

使用特权

评论回复
13
kzlzqi| | 2024-9-29 22:52 | 只看该作者
这1K字节没有数据头和尾

使用特权

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

本版积分规则

认证:嵌入式技术专家
简介:擅长电路设计、物联网产品开发、射频产品开发,喜欢打篮球,技术交流,欢迎各位来聊~

630

主题

2627

帖子

5

粉丝