串口的接收方式可以有很多种,之前也提到过使用延时判断串口接收指正的值是否改变来进行接收完成的判断。也介绍过使用DMA的空闲中断触发以判断串口接收完成。以上两种方式,在一定情况下可以使用效果也还可以。延时判断的方式,对于不跑操作系统的工程里影响不大,但是到了一个跑实时系统的工程里,这种方式就显得不稳定了。而DMA方式接收,效率很高而且不占用处理器时间,但是这样接收就是太快了,在数据频繁发送的情况下,经常会把两条应该是分开的数据合为了一条。
结合定时器的使用,以10ms为数据包间的最大间隔,如果超过10ms没有接收到新的数据,那么这一次数据就可以认为已经发送完成了。如果在10ms内接收到了新的数据,则把定时器的值重装并开始计时。
|