STM32串口DMA接收一帧数据分段问题

本文介绍了一种串口通信中遇到的问题:当接收来自上位机的数据时出现分段情况,导致CRC校验失败。提出了改进方案,即接收数据后立即进行CRC校验,若未通过则继续接收直至校验成功或超时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:波特率19200,接收不定长的数据,有其他单片机按字节发送,但是一帧数据有1.7ms间隔。有上位机通过VS的串口接口发送,一帧数据有200ms间隔,最后两个byte都是crc校验。同一时间只会存在一种发送方式。

原方案:缓冲区长度128byte,接收数据8~33byte不等,1ms检查一次接收长度是否变化,若长度无变化则停止一帧的接收。

问题:接收其他单片机数据没问题,但是接收上位机数据会出现分段的情况,不完整的数据导致后面crc校验不通过。

解决:接收完数据后立即进行crc校验,不通过则累计长度,下次数据续接本次数据末尾,直至拼接数据crc校验通过或者总时间超过200ms。

可以看到转移数据后,缓冲区内存立马被DMA修改了
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值