飞思卡尔Kinetis系列的UART模块自带IDLE Line即总线空闲检测功能,如下图。这个IDLE Line detection和DMA巧妙结合起来可以很好的解决上述的问题,即当连续的一帧数据发送过来时(长度不确定),可以通过DMA将数据存放到RAM区的Buffer中(事先给Buffer预留一定的空间),当一帧数据发送完成时IDLE Detection功能会从最后一个数据的STOP位开始检测,当检测到连续10或者13个高电平时,即表示没有start位过来了,即判断上一帧数据已经传输完毕,此时UART可以产生IDLE Line中断(即在整个传送过程中只有这一次中断),在此中断中可以置一个数据帧接收完成标志,然后在主程序可以对接收到的数据进行解包处理。 |