串行通信基础

串行通信接口/异步串行通信/UART

常称为“串口”或SCI,在USB未普及之前,是PC机必备通信接口之一。
通信方式为单字节通信,是最简单的串行通信方式(RS232 RS485)
接线简单,与微控制器引脚相连,只需要发送线TxD、接收线RxD和地线SG

串行通信格式

串行通信的数据以字节为单位,按位的顺序从发送线送出,从微控制器的引脚来看,高电平为逻辑1,低电平为逻辑0

 

串口能进bios吗 串口sg_串口能进bios吗

波特率

每秒内传送的位数。(单位:bps)
常用波特率有9600、19200。

在包含开始位和停止位的情况下,发送一个字节需要10位。在特定波特率下,发送1k字节所需时间为:

波特率越高,位长越小,易受电磁干扰,所以串行通信只能适当提高波特率,提高幅度有限。

 

画出发送数据0x65的串行时许格式图

 

设串行发送引脚高电平为3.3v,低电平为0v,连接发送字符A,发送引脚上的平均电平是多少?

异步串行通信格式

实际的异步串行通信采用NRZ数据格式(标准不归零传传号/空号数据格式)

不归零:用负电平表示一种二进制值,正电平表示另一种二进制的值,不使用零电平。

传号/空号:分别表示两种状态的物理名称,逻辑名称“1/0”

RS233总线标准

采用负逻辑。

-15v~-3v为逻辑“1”。

+3v~+15v为逻辑“0”。

最大传输距离是30m。

通讯速率一般低于20Kbps。

一般使用9芯串行接口。

串口能进bios吗 串口sg_串行通信_02

通信中,仅使用接收线RxD、发送线TxD和地线SG。

串口能进bios吗 串口sg_串口能进bios吗_03

在发送端,需要用驱动电路将TTL电平转换成RS232电平

在接收端,需要用接收电路将RS232电平转换成TTL电平。

串口能进bios吗 串口sg_串行通信_04

随着USB普及,9芯串口逐渐消失,出现232-USB转换线TTL-USB转换线。在PC机上安装相应的驱动软件,使用一般的串行通信编程方式,通过USB接口实现与MCU的串行通信。

串行通信接口主要功能

接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部。

发送时,把需要发送的一个字节的并行数据转换为单线输出。

串口能进bios吗 串口sg_嵌入式_05

编程时,程序员直接与UART数据寄存器打交道。

发送时,程序员通过判定状态寄存器的相应位,了解是否可以发送一个新的数据。

若可以发送,将待发送的数据放入UART数据寄存器中,剩下的工作交由微控制器MCU内部硬件电路自动完成。

MCU会将数据从UART数据寄存器送到发送移位寄存器,硬件驱动将发送移位寄存器的数据一位一位地按照规定的波特率移到发送引脚TxD,供对方接收。

接收时,数据一位一位地从接收引脚RxD进入接收移位寄存器,当收到一个完整的字节时,MCU会自动将数据送入UART数据寄存器,将状态寄存器的相应位改变,供程序员判定并取出数据。

串口驱动构件的组成

头文件uart.h 和源代码文件uart.c ⇒ 串口驱动构件,供应用程序开发调研

串口初始化、发送和接收

首先必须确定使用哪个串口(串口号);其次必须确定使用什么速度收发(波特率)。 

UART驱动构件的基本函数,还应包括发送单个多个字节、接收单个多个字节的函数,以及使能及禁止接收中断,获取接收中断状态的函数。

除了使用UART驱动构件中封装的API函数,还可以使用格式化输出函数printf来灵活的从串口输出调试信息,配合PC机上的串口调试工具,进行嵌入式程序的调试。

串行通信编程