跳转到主要内容

串口

单片机串口接收不定长数据的通用方法

cathy 提交于

接收完一个字节以后,如果超过了一定的时间,就认为是接收完一帧数据了。首先我们要知道,串口是接收一个字节,就会发生一次中断,如果一帧数据包含10个字节,就会发生10次中断。在接收一个字节以后,会紧跟着接收下一个字节,如果时间超了一定值,就代表一帧数据已经发完了。

在MCU中,如何实现串口的不定长数据包接收?

demi /

在MCU的应用中,经常需要通过串口进行不定长数据包的传输。发送方很简单,不需特别的考虑,而接收方则需要能够侦测到数据包的结束。接收方的简单做法是结合串口的IDLE中断,或使用DMA并利用DMA的超时传输机制。

但有些MCU在设计时出于成本上的考虑,简化了串口接收的IDLE模式以及DMA超时传输机制。没有串口IDLE中断或者DMA超时传输的机制,我们就不知道什么时候通信结束了。这种情况下,为了实现通过串口传输不定长数据包的要求,需要使用软件和其它片内外设的配合,协同完成指定的功能。

LPC54101系列的UART模块,支持FIFO的接收超时,能够方便地实现上述功能。除此之外,本文介绍一种基于LPC54101和SDK,通过使用引脚中断和定时器配合,实现串口DMA接收超时,实现串口DMA接收超时的机制。

单片机串行口介绍

judy /

串行口是单片机与外界进行信息交换的工具,8051单片机的通信方式有两种:

并行通信:数据的各位同时发送或接收。

串行通信:数据一位一位次序发送或接收。
<center><img src="http://mcu.eetrend.com/files/2018-04/wen_zhang_/100011070-38983-1.jpg&q…; alt="单片机串行口介绍"></center>

<strong>串行通信的方式</strong>

• 异步通信

○ 用一个起始位0表示字符的开始,用停止位1表示字符的结束,中间夹着8个数据位,字符能一个接一个传送