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

[复制链接]
1059|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字节中的固定位置,可以直接从缓冲区中提取这些数据进行处理。
春日负喧 发表于 2024-9-24 15:00 | 显示全部楼层
如果256字节的有用数据没有固定位置,但可以通过某种标记或同步字节来识别,可以在缓冲区中搜索这些标记或同步字节,然后提取相应的数据。
故意相遇 发表于 2024-9-24 19:00 | 显示全部楼层
如果1K字节的数据包之间没有明确的分隔,可以考虑将数据分成固定大小的块(例如256字节),然后对每个块进行处理。如果某个块包含不完整或无效的数据,可以丢弃该块并继续处理下一个块。
白马过平川 发表于 2024-9-24 21:00 | 显示全部楼层
确保缓冲区大小足够大,以容纳最大数据包。
温室雏菊 发表于 2024-9-24 23:00 | 显示全部楼层
正确配置DMA以确保数据传输的正确性和效率。
风凉 发表于 2024-9-25 02:00 | 显示全部楼层
根据实际需求,调整数据处理逻辑,确保提取和处理有用数据。
捧一束彼岸花 发表于 2024-9-25 06:00 | 显示全部楼层
一般可以使用串口+DMA的方式做环形缓冲区就好了
西洲 发表于 2024-9-25 08:00 | 显示全部楼层
不都是用双缓冲比较OK的吗
csv7k1 发表于 2024-9-29 22:37 来自手机 | 显示全部楼层
数据大概1K字节,需要循环收数据
kzlzqi 发表于 2024-9-29 22:52 来自手机 | 显示全部楼层
这1K字节没有数据头和尾
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

805

主题

3383

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部