嵌入式通信协议:关于UART面试题能答上几个呢?
嵌入式工程师成长日记 2025-06-11

1.UART和USART的区别?

UART:即通用异步收发器,只支持异步通信。
USART:即通用同步异步收发器,既支持同步通信,又支持异步通信。

(1)硬件方面

时钟信号:UART不需要外部时钟信号,靠波特率发生器生成时钟。USART在同步模式下需要外部提供时钟信号,用于同步数据传输。

引脚需求:UART通常只需数据线和地线等基本引脚。USART在同步通信时,除了数据线,还需要时钟线来传输时钟信号。

(2)数据传输方面

数据帧结构:UART数据帧一般由起始位、数据位、校验位和停止位组成,结构相对固定。USART的数据帧结构更灵活,数据位可配置为5-9位,停止位可选择1-2位。

传输速率:UART数据传输速率相对较低,通常在115200bps以下。USART由于支持同步通信,数据传输速率较高,通常可高达2Mbps。

传输模式:UART采用异步传输模式,发送方和接收方没有公共时钟,依靠约定的波特率来保持数据同步。USART有同步和异步两种传输模式。


2.UART要配置那些参数?

(1)波特率

定义:指单位时间内传输的二进制位数,常见有9600bps、115200bps等。

作用:发送方和接收方需设置相同波特率,确保数据位的采样和发送频率一致,实现正确的数据传输。

(2)数据位

定义:指每次传输数据的位数,一般有5位、6位、7位、8位或9位。

作用:决定了一次能传输的有效数据量,与被传输的数据类型和协议相关,如ASCII码常用7位或8位数据位。

(3)校验位

定义:用于数据传输校验,有奇校验、偶校验、无校验等方式。

作用:奇校验保证数据位和校验位中“1”的个数为奇数,偶校验则为偶数。接收方通过校验判断数据是否传输错误。

(4)停止位

定义:表示数据帧结束的标志位,位数可为1位、1.5位或2位。

作用:使接收方有时间处理数据并准备接收下一帧数据,不同通信设备可能需要不同的停止位设置。

(5)流控制

定义:用于协调数据发送方和接收方的速率,有硬件流控制(RTS/CTS)和软件流控制(XON/XOFF)。

作用:硬件流控制通过RTS、CTS信号控制数据传输;软件流控制用特定字符(如XON、XOFF)通知对方暂停或继续发送数据,防止数据丢失。


3.UART通信时序?

(1)空闲状态

在没有数据传输时,UART的数据线处于高电平状态,代表逻辑“1”,此时总线处于空闲状态。

(2)起始位

当发送方准备发送数据时,首先会将数据线拉低,产生一个逻辑“0”信号,持续时间为一个波特周期,以此来表示数据传输的开始,接收方检测到这个下降沿后,就知道有数据要传输了。

(3)数据位

起始位之后是要传输的数据位,数据位可以是5位、6位、7位、8位或9位等,具体位数由通信双方事先约定。


数据位按照低位在前、高位在后的顺序依次发送,每个数据位的持续时间也是一个波特周期。

(4)校验位

校验位紧跟在数据位之后,用于验证数据传输的正确性,可选奇校验、偶校验、0校验、1校验或无校验。

若采用奇校验,会保证数据位和校验位中“1”的个数为奇数;

若为偶校验,则保证“1”的个数为偶数。校验位的持续时间同样为一个波特周期。

(5)停止位

停止位位于数据帧的末尾,用于表示一帧数据的结束,通常为逻辑“1”,可以是1位、1.5位或2位,其持续时间相应为一个、一个半或两个波特周期。


停止位的作用是给接收方提供一个数据接收完成的标志,同时也为双方的时钟同步提供一个短暂的调整时间。

(6)空闲位

在一帧数据传输完成后,总线会自动回到高电平状态,形成空闲位,等待下一次数据传输的开始。

下面以传输字节数据0x55(二进制为01010101)为例,假设采用1位起始位、8位数据位、偶校验、1位停止位,波特率为9600bps,其时序如下:首先是起始位的低电平,持续约104.2μs(1/9600s);然后依次发送数据位的10101010,每个数据位持续104.2μs;接着是偶校验位为0,持续104.2μs;最后是停止位的高电平,持续104.2μs。


4.UART的RX引脚为什么要上拉?

(1)抗干扰:当RX引脚配置为浮空输入模式时,输入阻抗高,抗干扰能力弱,易受外部电磁干扰和系统内部干扰,如靠近TX引脚或RS485的DE引脚时,易被干扰。


上拉后,引脚默认处于高电平,干扰信号需将电平拉低到一定程度才会影响数据接收,能增强抗干扰能力。

(2)确定默认状态:在没有数据传输时,将RX引脚设置为上拉,使其处于确定的高电平状态,代表逻辑“1”。这样接收方可以明确当前没有数据输入,避免因引脚状态不确定而产生误判,认为有数据或出现错误的数据起始信号等。

(3)匹配电平:在某些通信场景中,发送方输出的高电平可能与接收方RX引脚的输入高电平阈值存在差异。


上拉电阻可以帮助调整RX引脚的电平,使其更好地匹配发送方的输出电平,确保接收方能够正确识别发送方发送的逻辑“1”信号。

(4)解决未连接问题:当UART接口未连接到发送设备时,若RX引脚无上拉,其状态可能不确定,会导致UART控制器产生误判,出现通信错误。上拉电阻能使未连接时RX引脚为高电平,避免此类问题。


5.串口如何接受不定长数据?

(1)基于特定结束标志

原理:在发送数据时,在数据末尾添加一个特定的字符或字符序列作为结束标志。接收方在接收数据时,不断读取串口数据,直到接收到这个结束标志,就认为数据接收完成。

示例:假设结束标志为“\r\n”,接收程序使用循环不断读取串口数据,将数据存储在缓冲区中,当检测到“\r\n”时,说明一帧数据接收完毕,然后对缓冲区中的数据进行处理。

(2)基于定时器超时

原理:启动一个定时器,在接收数据的过程中,每接收到一个字节的数据,就重置定时器。如果在一定时间内没有接收到新的数据,定时器就会超时,此时认为数据接收完成。

示例:设定定时器超时时间为100毫秒,当开始接收数据时启动定时器,每接收到一个字节,就将定时器重新设置为初始值。若100毫秒内没有新数据到来,定时器超时,触发接收完成事件,对已接收的数据进行处理。

(3)基于协议规定的长度字段

原理:在数据帧的开头或其他固定位置设置一个字段,用于表示数据帧的长度。接收方首先读取这个长度字段,然后根据长度字段的值来确定需要接收的数据字节数,按照这个数量进行数据接收。

示例:假设数据帧的前两个字节表示数据长度,接收方先读取这两个字节,解析出数据长度为N,然后继续从串口读取N个字节的数据,完成数据接收后进行处理。

(4)基于状态机

原理:根据串口数据的格式和通信协议,设计一个状态机。状态机根据接收到的数据和当前状态进行状态转换,当状态机达到特定的结束状态时,认为数据接收完成。

示例:初始状态为等待起始标志,接收到起始标志后进入数据接收状态,在数据接收状态中根据协议规则判断是否接收完所有数据,若接收完则进入结束状态,触发数据处理操作。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 工业
  • 安防
  • 航空
  • CAN
下载排行榜
更多
评测报告
更多
广告