UART(通用异步收发传输器)的寄存器配置因具体芯片厂商和型号而异,比如常见的8250/16550系列、STM32、ESP32或NXP等平台的寄存器名称和功能都有差异。不过,大多数UART模块的核心寄存器结构是相似的,通常包括以下几个关键寄存器:

  1. 发送数据寄存器(Transmit Holding Register, THR)
    当你要发送数据时,CPU将字节写入这个寄存器。一旦写入,UART硬件会自动开始通过TX引脚逐位发送数据。有些架构中,THR和接收缓冲区共享同一个地址空间,通过状态寄存器区分当前是读还是写。

  2. 接收数据寄存器(Receive Buffer Register, RBR)
    当UART从RX引脚接收到完整的一个字节后,会将数据存入这个寄存器。CPU读取该寄存器即可获取收到的数据。注意:如果新数据到达而前一个未被读取,可能会发生溢出错误。

  3. 中断使能寄存器(Interrupt Enable Register, IER)
    用于控制哪些事件会触发中断。例如,可以设置当发送缓冲区为空、接收数据就绪、线路状态变化或 modem 信号变化时产生中断。这对高效处理串行通信非常重要,避免轮询浪费CPU资源。

  4. 线路控制寄存器(Line Control Register, LCR)
    配置数据帧格式,包括:

  • 数据位长度(5、6、7、8位)
  • 停止位数(1或2位)
  • 校验方式(无校验、奇校验、偶校验等)
  • 是否启用分隔符检测功能
  1. 调制解调器控制寄存器(Modem Control Register, MCR)
    用于控制硬件流控信号,如RTS(请求发送)、DTR(数据终端就绪)等。在使用RS232或需要硬件握手的项目中,这个寄存器很关键。

  2. 线路状态寄存器(Line Status Register, LSR)
    提供当前UART的状态信息,例如:

  • 接收缓冲区是否有数据(DR位)
  • 发送移位寄存器是否为空(THRE位)
  • 是否发生帧错误、奇偶校验错误或溢出错误(FE/PE/OE位)
  1. 调制解调器状态寄存器(Modem Status Register, MSR)
    反映外部 modem 信号的状态,如CTS、DSR、RI、DCD等引脚的电平变化。常用于硬件流控和连接状态检测。

  2. 波特率发生器相关寄存器(Baud Rate Divisor Registers)
    用于设置通信速率。通常由两个8位寄存器组成一个16位的除数锁存值,结合系统时钟计算实际波特率。有些现代MCU将这部分集成在专用APB或AHB总线上,配置方式更简化。

补充说明:

  • 不同厂商可能合并或拆分某些寄存器,例如STM32使用DR、SR、CR1/CR2/CR3等命名。
  • FIFO(先进先出缓冲区)在现代UART中普遍存在,需额外配置FIFO控制寄存器以提高吞吐量。
  • 实际开发时务必查阅对应芯片的数据手册,因为寄存器偏移地址、位定义和访问权限都可能不同。
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐