嵌入式通信 UART 大揭秘:经典面试题深度剖析
出处:网络整理 发布于:2025-06-12 16:35:20
1. UART 和 USART 的区别
UART 即通用异步收发器,只支持异步通信;而 USART 即通用同步异步收发器,既支持同步通信,又支持异步通信。两者在硬件和数据传输方面存在明显差异。
硬件方面
时钟信号:UART 不需要外部时钟信号,它依靠波特率生成时钟。而 USART 在同步模式下需要外部提供时钟信号,用于同步数据传输。例如,在一些对数据同步要求较高的工业控制场景中,USART 的同步模式就能够发挥重要作用。
引脚需求:UART 通常只需和地线等基本引脚。USART 在同步通信时,除了数据线,还需要时钟线来传输时钟信号。这使得 USART 的硬件连接相对复杂,但也为其实现同步通信提供了可能。
数据传输方面
数据帧结构:UART 数据帧一般由起始位、数据位、校验位和停止位组成,结构相对固定。USART 的数据帧结构更灵活,数据位可配置为 5 - 9 位,停止位可选择 1 - 2 位。这种灵活性使得 USART 能够适应更多不同类型的数据传输需求。
传输速率:UART 数据传输速率相对较低,通常在 115200bps 以下。USART 由于支持同步通信,数据传输速率较高,通常可高达 2Mbps。在需要高速数据传输的应用中,如高速数据采集系统,USART 就具有明显的优势。
传输模式:UART 采用异步传输模式,发送方和接收方没有公共时钟,依靠约定的波特率来保持数据同步。USART 有同步和异步两种传输模式,用户可以根据具体的应用场景选择合适的传输模式。
2. UART 要配置那些参数
波特率:指单位时间内传输的二进制位数,常见有 9600bps、115200bps 等。发送方和接收方需设置相同波特率,确保数据位的采样和发送频率一致,实现正确的数据传输。例如,在一个简单的与电脑的通信中,双方都设置为 9600bps,才能保证数据的准确传输。
数据位:指每次传输数据的位数,一般有 5 位、6 位、7 位、8 位或 9 位。它决定了能传输的有效数据量,与被传输的数据类型和协议相关,如 ASCII 码常用 7 位或 8 位数据位。
校验位:用于数据传输校验,有奇校验、偶校验、无校验等方式。奇校验保证数据位和校验位中 “1” 的个数为奇数,偶校验则为偶数。接收方通过校验判断数据是否传输错误。在一些对数据准确性要求较高的通信中,如金融数据传输,通常会采用校验位来保证数据的准确性。
停止位:表示数据帧结束的标志位,位数可为 1 位、1.5 位或 2 位。使接收方有时间处理数据并准备接收下一帧数据,不同通信设备可能需要不同的停止位设置。
流控制:用于协调数据发送方和接收方的速率,有硬件流控制(RTS/CTS)和软件流控制(XON/XOFF)。硬件流控制通过 RTS、CTS 信号控制数据传输;软件流控制用特定字符(如 XON、XOFF)通知对方暂停或继续发送数据,防止数据丢失。在一些大数据量传输的场景中,流控制能够有效地避免数据丢失和传输错误。
3. UART 通信时序
空闲状态:在没有数据传输时,UART 的数据线处于高电平状态,代表逻辑 “1”,此时处于空闲状态。
起始位:当发送方准备发送数据时,首先会将数据线拉低,产生一个逻辑 “0” 信号,持续时间为一个波特周期,以此来表示数据传输的开始,接收方检测到这个下降沿后,就知道有数据要传输了。
数据位:起始位之后是要传输的数据位,数据位可以是 5 位、6 位、7 位、8 位或 9 位等,具体位数由通信双方事先约定。数据位按照低位在前、高位在后的顺序依次发送,每个数据位的持续时间也是一个波特周期。
校验位:校验位紧跟在数据位之后,用于验证数据传输的正确性,可选奇校验、偶校验、0 校验、1 校验或无校验。若采用奇校验,会保证数据位和校验位中 “1” 的个数为奇数;若为偶校验,则保证 “1” 的个数为偶数。校验位的持续时间同样为一个波特周期。
停止位:停止位位于数据帧的末尾,用于表示一帧数据的结束,通常为逻辑 “1”,可以是 1 位、1.5 位或 2 位,其持续时间相应为一个、一个半或两个波特周期。停止位的作用是给接收方提供一个数据接收完成的标志,同时也为双方的时钟同步提供一个短暂的调整时间。
空闲位:在一帧数据传输完成后,总线会自动回到高电平状态,形成空闲位,等待下数据传输的开始。
下面以传输字节数据 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 引脚为什么要上拉
UART 的 RX 引脚进行上拉操作主要有以下几个原因:
抗干扰:当 RX 引脚配置为浮空输入模式时,输入阻抗高,抗干扰能力弱,易受外部电磁干扰和系统内部干扰,如靠近 TX 引脚或 RS485 的 DE 引脚时,易被干扰。上拉后,引脚默认处于高电平,干扰信号需将电平拉低到一定程度才会影响数据接收,能增强抗干扰能力。
确定默认状态:在没有数据传输时,将 RX 引脚设置为上拉,使其处于确定的高电平状态,代表逻辑 “1”。这样接收方可以明确当前没有数据输入,避免因引脚状态不确定而产生误判,认为有数据或出现错误的数据起始信号等。
匹配电平:在某些通信场景中,发送方输出的高电平可能与接收方 RX 引脚的输入高电平阈值存在差异。上拉电阻可以帮助调整 RX 引脚的电平,使其更好地匹配发送方的输出电平,确保接收方能够正确识别发送方发送的逻辑 “1” 信号。
解决未连接问题:当 UART 接口未连接到发送设备时,若 RX 引脚无上拉,其状态可能不确定,会导致 UART 控制器产生误判,出现通信错误。上拉电阻能使未连接时 RX 引脚为高电平,避免此类问题。
5. 串口如何接受不定长数据
串口接收不定长数据可以采用以下几种方法:
基于特定结束标志:在发送数据时,在数据末尾添加一个特定的字符或字符序列作为结束标志。接收方在接收数据时,不断读取串口数据,直到接收到这个结束标志,就认为数据接收完成。例如,假设结束标志为 “\r\n”,接收程序使用循环不断读取串口数据,将数据存储在缓冲区中,当检测到 “\r\n” 时,说明一帧数据接收完毕,然后对缓冲区中的数据进行处理。
基于定时器超时:启动一个定时器,在接收数据的过程中,每接收到一个字节的数据,就重置定时器。如果在一定时间内没有接收到新的数据,定时器就会超时,此时认为数据接收完成。例如,设定定时器超时时间为 100 毫秒,当开始接收数据时启动定时器,每接收到一个字节,就将定时器重新设置为初始值。若 100 毫秒内没有新数据到来,定时器超时,触发接收完成事件,对已接收的数据进行处理。
基于协议规定的长度字段:在数据帧的开头或其他固定位置设置一个字段,用于表示数据帧的长度。接收方首先读取这个长度字段,然后根据长度字段的值来确定需要接收的数据字节数,按照这个数量进行数据接收。例如,假设数据帧的前两个字节表示数据长度,接收方先读取这两个字节,解析出数据长度为 N,然后继续从串口读取 N 个字节的数据,完成数据接收后进行处理。
基于状态机:根据串口数据的格式和通信协议,设计一个状态机。状态机根据接收到的数据和当前状态进行状态转换,当状态机达到特定的结束状态时,认为数据接收完成。例如,初始状态为等待起始标志,接收到起始标志后进入数据接收状态,在数据接收状态中根据协议规则判断是否接收完所有数据,若接收完则进入结束状态,触发数据处理操作。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,//qvqwriy.cn,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 揭秘嵌入式 MCU:浮点数据处理难点及应对策略2025/6/20 15:19:07
- 深度解析:STM32 ADC 自身误差来源大揭秘2025/6/6 16:08:32
- 嵌入式数模电中 MOS 管经典知识2025/5/26 16:26:08
- EMMC和NAND闪存的区别2025/4/30 16:52:00
- RRAM:高性能嵌入式应用程序的非挥发记忆2025/2/25 16:28:35