在电子技术领域,通用同步异步收发器(USART)是一种关键的通信接口,广泛应用于各种电子设备中,实现数据的高效传输。本文将详细介绍 WIZnet 推出的高性能以太网 W55MH32 中的 USART,并深入探讨其相关特性和应用。
W55MH32 是 WIZnet 精心打造的一款高性能以太网单片机,它集成了多种强大的组件,为开发者带来了全新的集成化体验。该芯片内置高性能 Arm? Cortex - M3 ,主频可达 216MHz,能够满足高速数据处理的需求。同时,它配备了 1024KB FLASH 与 96KB SRAM,为数据存储和处理提供了充足的空间。此外,芯片集成了 TOE 引擎,包含 WIZnet 全硬件 TCP/IP 协议栈、内置 MAC 以及 PHY,拥有独立的 32KB 以太网收发缓存,可供 8 个独立硬件 socket 使用,真正实现了 All - in - One 解决方案,大大简化了开发过程。
在封装规格方面,W55MH32 提供了 QFN68 和 QFN100 两种选择。QFN68 封装的 W55MH32Q 尺寸为 8x8mm,拥有 36 个 GPIO、3 个 ADC、12 通道 DMA、17 个定时器、2 个 I2C、3 个串口、2 个 SPI 接口(其中 1 个带 I2S 接口复用)、1 个 CAN 以及 1 个 USB 2.0。该版本在保持与同系列其他版本一致性能的基础上,仅减少了部分 GPIO 以及 SDIO 接口,其他参数保持不变,具有显著的性价比优势,尤其适合网关等对空间布局要求较高的场景。而 QFN100 封装的 W55MH32L 版本则拥有更丰富的外设资源,适用于需要多接口扩展的复杂工控场景,且软件使用方法与其他版本一致。
值得一提的是,W55MH32 支持硬件加密算法单元,WIZnet 还推出了 TOE + SSL 应用,涵盖 TCP SSL、HTTP SSL 以及 MQTT SSL 等,为网络通信安全提供了有力保障。为了帮助开发者快速上手和深入开发,基于 W55MH32Q 芯片,WIZnet 精心打造了配套开发板。开发板集成了 WIZ - Link 芯片,借助一根 USB C 口数据线,就能轻松实现调试、以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也得到了大幅提升,便于开发者全面评估芯片性能。

通用同步异步收发器(USART)为与使用工业标准 NRZ 异步串行数据格式的外部设备之间进行全双工数据交换提供了一种灵活的方法。它利用分数波特率,能够提供宽范围的波特率选择,支持同步单向通信、半双工单线通信,还支持 LIN(局部互连网)、智能卡协议和 IrDA(红外数据组织)SIRENDEC 规范,以及调制解调器(CTS/RTS)操作,同时允许多处理器通信。使用多缓冲器配置的 DMA 方式,可以实现高速数据通信。
W55MH32 的 USART 具有众多出色的特性,以下为您详细介绍:
- 全双工异步通信:能够同时进行数据的发送和接收,实现高效的双向通信。
- NRZ 标准格式:采用非归零(NRZ)数据格式,确保数据传输的准确性。
- 分数波特率发生器系统:发送和接收共用可编程波特率,可达 4.5Mbits/s,可根据实际需求灵活调整。
- 可编程数据字长度:可通过编程选择 8 位或 9 位的数据字长度,满足不同应用场景的需求。
- 可配置的停止位:支持 0.5、1、1.5 和 2 个停止位的配置,为数据传输提供了更多的灵活性。
- LIN 主发送同步断开符及从检测断开符能力:在 LIN 模式下,能够准确发送和检测断开符,确保通信的稳定性。
- 发送方为同步传输提供时钟:为同步通信提供稳定的时钟信号,保证数据传输的同步性。
- IRDASIR 编码器解码器:在正常模式下支持 3/16 位的持续时间,可实现红外数据的编码和解码。
- 智能卡模拟功能:智能卡接口支持 ISO7816 - 3 标准里定义的异步智能卡协议,使用 0.5 和 1.5 个停止位,满足智能卡通信的需求。
- 单线半双工通信:通过内部互连的 TX 和 RX 引脚,实现单线半双工通信,节省硬件资源。
- 可配置的使用 DMA 的多缓冲器通信:在 SRAM 里利用集中式 DMA 缓冲接收 / 发送字节,提高数据传输效率。
- 单独的发送器和接收器使能位:可以独立控制发送器和接收器的开启和关闭,方便灵活操作。
- 检测标志:包括接收缓冲器满、发送缓冲器空、传输结束标志等,便于实时监控数据传输状态。
- 校验控制:能够发送校验位,并对接收数据进行校验,提高数据传输的可靠性。
- 四个错误检测标志:可检测溢出错误、噪音错误、帧错误和校验错误,及时发现和处理通信故障。
- 10 个带标志的中断源:可根据不同的事件触发中断,实现及时的响应和处理。
- 多处理器通信:支持多处理器通信,可通过地址匹配实现静默模式和唤醒功能。
- 从静默模式中唤醒:可通过空闲总线检测或地址标志检测从静默模式中唤醒,提高系统的灵活性。
- 两种唤醒接收器的方式:即地址位(MSB,第 9 位)和总线空闲,为唤醒接收器提供了多种选择。
USART 接口通过三个引脚与其他设备连接,任何 USART 双向通信至少需要接收数据输入(RX)和发送数据输出(TX)两个引脚。
- RX 引脚:接收数据串行输入,通过过采样技术来区别数据和噪音,从而恢复数据。
- TX 引脚:发送数据输出。当发送器被禁止时,输出引脚恢复到它的 I/O 端口配置;当发送器被激活,并且不发送数据时,TX 引脚处于高电平。在单线和智能卡模式里,此 I/O 口被同时用于数据的发送和接收。
- 数据传输格式:总线在发送或接收前应处于空闲状态,数据传输包括一个起始位、一个数据字(8 或 9 位,有效位在前)、0.5、1.5 或 2 个停止位,以表明数据帧的结束。同时,使用分数波特率发生器,采用 12 位整数和 4 位小数的表示方法。
- 相关寄存器:包括状态寄存器(USART_SR)、数据寄存器(USART_DR)、波特率寄存器(USART_BRR,12 位的整数和 4 位小数)以及智能卡模式下的保护时间寄存器(USART_GTPR)。关于这些寄存器中每个位的具体定义,可参考寄存器描述第 23.6 节:USART 寄存器描述。
在同步模式中,还需要 CK 引脚,该引脚为发送器时钟输出,用于同步传输的时钟。在智能卡模式里,CK 可以为智能卡提供时钟;在 IrDA 模式里,需要 IrDA_RDI(数据输入)和 IrDA_TDO(数据输出)引脚;在硬件流控模式中,需要 nCTS 输入和 nRTS 输出引脚。

- 字长设置:字长可以通过编程 USART_CR1 寄存器中的 M 位,选择成 8 或 9 位。在起始位期间,TX 脚处于低电平,在停止位期间处于高电平。空闲符号被视为完全由 '1' 组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位;断开符号被视为在一个帧周期内全部收到 '0'。
- 发送器
- 字符发送:发送器根据 M 位的状态发送 8 位或 9 位的数据字。当发送使能位(TE)被设置时,发送移位寄存器中的数据在 TX 脚上输出,相应的时钟脉冲在 CK 脚上输出。每个字符之前都有一个低电平的起始位,之后跟着可配置数目的停止位。
- 可配置的停止位:随每个字符发送的停止位的位数可以通过控制寄存器 2 的位 13、12 进行编程,可选择 1 个、2 个、0.5 个或 1.5 个停止位。
- 发送配置步骤:激活 USART、定义字长、配置停止位、选择波特率、设置 TE 位发送空闲帧、写入数据、等待传输结束等。
- 单字节通信:清零 TXE 位通过对数据寄存器的写操作完成,TXE 位由硬件设置,表明数据发送开始和 TDR 寄存器被清空。当一帧发送完成且设置了 TXE 位,TC 位被置起。
- 断开符号和空闲符号:设置 SBK 可发送断开符号,置位 TE 将发送空闲帧。

- 接收器
- 起始位侦测:通过特定的采样序列来侦测起始位,若满足条件则确认收到起始位,设置 RXNE 标志位;若不满足条件则回到空闲状态。
- 字符接收:数据的有效位首先从 RX 脚移进,USART_DR 寄存器包含内部总线和接收移位寄存器之间的缓冲器。
- 接收配置步骤:激活 USART、定义字长、配置停止位、选择波特率、设置 RE 位激活接收器。
- 断开符号和空闲符号:接收到断开帧时按帧错误处理,检测到空闲帧时若 IDLEIE 位被设置将产生中断。
- 溢出错误:若 RXNE 未复位又接收到字符,则发生溢出错误,数据需在 RXNE 位清零后才能转移到 RDR 寄存器。
- 噪音错误和帧错误:检测到噪音或帧错误时,相应标志位被置起,可通过读 USART_SR 和 USART_DR 寄存器清除标志位。

- 分数波特率的产生:接收器和发送器的波特率由 USARTDIV 的整数和小数寄存器中的值决定,计算公式为 Tx/Rx 波特率 = fck/(16 ? USARTDIV),其中 fCK 是给外设的时钟。在写入 USART_BRR 之后,波特率计数器会被新值替换,因此不要在通信进行中改变波特率寄存器的数值。
- USART 接收器容忍时钟的变化:USART 异步接收器正常工作要求整体的时钟系统变化小于其能够容忍的范围,影响因素包括发送器误差、接收器端波特率取整误差、接收器端变化以及传输线路产生的变化等。
- 多处理器通信:通过 USART 可以实现多处理器通信,根据 USART_CR1 寄存器中的 WAKE 位状态,可采用空闲总线检测或地址标记检测两种方法进入或退出静默模式。
- 校验控制:设置 USART_CR1 寄存器上的 PCE 位,可使能奇偶控制,根据 M 位定义的帧长度,有不同的帧格式。传输时,写进数据寄存器的数据的 MSB 位被校验位替换后发送,若奇偶校验失败,USART_SR 寄存器中的 PE 标志被置 '1'。
- LIN(局域互联网)模式:通过设置 USART_CR2 寄存器的 LINEN 位选择 LIN 模式,在该模式下,发送和接收有特定的要求和区别,如发送 13 位 '0' 作为断开符号等。
- USART 同步模式:通过写 CLKEN 位选择同步模式,在该模式下,发送器和接收器的工作方式与异步模式有所不同,需要注意时钟极性、相位等参数的配置。
- 单线半双工通信:通过设置 USART_CR3 寄存器的 HDSEL 位选择单线半双工模式,在该模式下,RX 不再使用,TX 在空闲或接收状态时表现为标准 I/O 口,通信由软件管理线上冲突。
- 智能卡模式:设置 USART_CR3 寄存器的 SCEN 位选择智能卡模式,该模式下需满足特定的位清零条件,支持智能卡异步协议,在数据传输、校验错误处理等方面有特殊要求。
- IrDA SIR ENDEC 功能模块:通过设置 USART_CR3 寄存器的 IREN 位选择 IrDA 模式,该模式采用反相归零调制方案,实现红外数据的发送和接收,是半双工通信协议。
- 利用 DMA 连续通信:USART 可以利用 DMA 实现连续通信,分别通过设置 USART_CR3 寄存器上的 DMAT 和 DMAR 位激活发送和接收的 DMA 功能,为数据传输提供了高效的解决方案。
- 硬件流控制:利用 nCTS 输入和 nRTS 输出可以控制 2 个设备间的串行数据流,通过将 UASRT_CR3 中的 RTSE 和 CTSE 置位,分别独立地使能 RTS 和 CTS 流控制。
USART 的各种中断事件包括发送完成、发送数据寄存器空、接收数据就绪可读、检测到数据溢出、检测到空闲线路、奇偶检验错、断开标志、噪声标志等,若设置了对应的使能控制位,这些事件就可以产生各自的中断。

以 USART_Asyn 为例,程序在初始化阶段会进行延时初始化、串口 1 初始化,并获取系统时钟频率,通过串口打印相关信息。在主循环阶段,程序会进行数据的接收和发送操作,包括禁用相应的 DMA 通道、使能 DMA 请求、配置 DMA 接收或发送、等待完成标志置位以及打印相关信息等。整个过程会不断重复,持续进行串口数据的接收和发送,并输出相应的提示信息。
