需求:波特率19200,接收不定长的数据,有其他单片机按字节发送,但是一帧数据有1.7ms间隔。有上位机通过VS的串口接口发送,一帧数据有200ms间隔,最后两个byte都是crc校验。同一时间只会存在一种发送方式。
原方案:缓冲区长度128byte,接收数据8~33byte不等,1ms检查一次接收长度是否变化,若长度无变化则停止一帧的接收。
问题:接收其他单片机数据没问题,但是接收上位机数据会出现分段的情况,不完整的数据导致后面crc校验不通过。
解决:接收完数据后立即进行crc校验,不通过则累计长度,下次数据续接本次数据末尾,直至拼接数据crc校验通过或者总时间超过200ms。
可以看到转移数据后,缓冲区内存立马被DMA修改了