在本节中,我们将了解MCU如何使用串行通信与外部外围设备进行通信。MCU充当嵌入式设备的“大脑”,而外围设备则充当“手和脚”。这意味着MCU必须与这些单元中的每一个进行通信。例如,考虑我们如何连接传感器。MCU的内置GPIO(通用输入/输出)端口,在本系列的第一部分中解释过,可用于将8条信号线与传感器连接,使传感器能够一次发送8位数据——最多使用8个GPIO数据引脚.这种类型的传输称为并行传输,因为一个完整字节的数据一次沿并行线路传输。(参见图1,左)但使用8条线连接到单个传感器通常是一种资源浪费。
有没有办法用更少的行来完成同样的事情?
当然有。我们可以通过一条数据线一次发送一个位。因为这些位现在是串行发送的,所以我们称之为串行通信。(参见图1,右侧)但是请注意,MCU使用并行通信进行其内部处理和通信。这意味着MCU还必须处理必要的转换:从传感器接收到的数据的“串行到并行”转换,以及发送到传感器的数据的“并行到串行”转换。
总结一下:假设我们希望发送单个文本字符,这需要我们发送一个八位字符类型的值。如果使用并行传输,则每一位需要一根数据线。对于串行并行,我们通过同一条线路一个接一个地发送8个数据位。
显然,串行通信需要更少的引脚和电线。在当今世界,大多数MCU到外设的连接都是串行的。串行模式不仅用于与开关和来自ON/OFF传感器的通信,还用于GPIO输出软件生成的电机驱动信号、LED闪烁信号等。
内置UART实现轻松串行通信
根据不同的电气特性和不同协议的要求,串行通信可以通过多种方式实现。最简单的实现,只需要一根电线——被称为“启动-停止同步通信”。在与无线LAN模块和驱动器监视器通信时,通常使用此模式。
在起停同步通信中,数据以字符单位1发送。出于控制目的,在每组的开头放置一个起始位,在结尾放置一个停止位。(参见图2)这消除了通过使用单独的时钟信号线来控制传输时序的需要,正如其他常见串行模式所要求的那样,例如I2C(“I平方C”)和SPI(串行并行接口)。为了帮助确保传输准确性,启动/停止数据集还可以包括奇偶校验位。启动-停止同步通信由称为“UART”(通用异步接收器/发送器)的组件处理。