不等长数据即每次发送的数据帧长度不固定,对应单片机来说,就需要判断帧开始和帧结束,帧开始自动发送起始位,接收端也可以自动判断出帧起始。那么接下来对于发送端就是依次发送出要发送的数据(完整一帧数据),对于接收端,中间的数据很简单,接收到后保存就可以,最后什么时候结束,以及数据的长度,比较简单的办法是使用stm32 uart的空闲中断来判断帧结束,两个数据帧的发送之间必然是有时间间隔的,通过空闲中断可以去判断数据帧的结束。
想要数据更加完整,可以参考modbus的协议,每个字节赋予不同的含义,在结束的时候增加数据校验字节,最后空闲中断后,把接收到的本次数据进行校验验证即可。
1.超时判断,类似于modbus协议;
2.协议判断,增加帧头,通过帧头判断;
目前最简单的方法就是用空闲中断,但空闲中断是STM32自带的一个功能,后面不好移植到别的硬件平台
第二种方法是弄个定时器,然后设好定时器定时,超过这个时间没收到数据,就认为一帧数据已经结束