文章目录
1. 串行通信与并行通信
- 串行通信是一种数据逐位顺序传输的通信方式,发送设备把 8 位数据(D0~D7)通过单条线路“顺次传送”,接收设备逐位接收后再还原成完整数据。
- 并行通信是一种多位二进制数据通过多条独立线路同时传输的通信方式,下图中:发送端先发 “询问”,接收端回复 “应答”,发送设备与接收设备间有 8 条数据线,8 位数据通过这 8 条线同时发送,接收端在同一时刻采样所有数据线的电平,直接还原出完整的 8 位数据。
2. 异步通信与同步通信
- 异步通信是一种 “以字符为单位、无需全局时钟同步” 的串行通信方式,数据按 “字符 / 字节” 独立封装传输,字符与字符之间的时间间隔完全任意,发送端可随时发送下一个字符,但每个字符中的各位是以固定的时间传送的,收发双方通过“起始位 + 停止位”实现字符级局部同步。
- 字符帧是异步串行通信中传输单个字符(或字节)的 “标准化数据包”:
- 空闲状态:通信线路在无数据传输时的默认状态;
- 起始位:标志一个字符帧的开始,固定为 1 位低电平;
- 数据位:实际传输的有效字符数据,位数可灵活配置(5/6/7/8 位常见);
- 校验位:用于简单错误检测(奇校验 / 偶校验 / 无校验);
- 停止位:标志一个字符帧的结束,固定为 1 位,1.5 位或 2 位高电平;
- 同步通信是一种 “依赖全局时钟信号,实现连续数据流同步传输” 的通信方式,收发双方通过 “统一时钟节奏” 采样数据。
- 外同步使用独立时钟线,发送方同时传输 “数据信号”(如01101)和 “时钟信号”,接收方通过时钟信号的边沿(上升 / 下降沿) 采样数据位。
- 自同步无独立时钟线,发送方将 “时钟信息嵌入数据信号”,接收方通过解码数据信号的跳变提取时钟。
3. 单工,半双工和全双工通信
- 单工通信是一种 “数据只能沿单一固定方向传输,无法反向反馈” 的通信方式。
- 半双工通信是一种 “数据可双向传输,但同一时刻只能单向进行” 的通信方式。
- 全双工通信是一种 “通信双方可同时双向传输数据,发送与接收完全独立、互不干扰” 的通信方式。
4. 通信速率和接口标准
- 比特率表示每秒传输的二进制位数,bps(bits per second,比特 / 秒)。
- 波特率表示每秒传输的码元数量,一个码元可表示多个二进制位;比特率与波特率的关系由每个码元携带的比特数决定,公式为:比特率=波特率×每个码元的比特数。
- RS–232C 接口:25针 – DB25,9针 – DB9。
- 9针公头和母头
- 9针和25针管脚功能:
- RS–232C 电平标准:逻辑1:-3V ~ -15V(负电压),逻辑0:+3V ~ +15V(正电压)。
- 常用通信格式:96-N-8-1。
- 96:波特率9600 bps;
- N:无校验;
- 8:数据位8位;
- 1:停止位1位;
5. USART 结构框图
功能引脚
- RX:接收数据输入引脚。
- TX:发送数据输出引脚。
- 同步模式下需要 SCLK:发送器时钟输出。
- 硬件流控制模式下需要 :
- nRTS(Request To Send,低有效):
- 若接收缓冲区有空间,nRTS 输出低电平(请求发送方 “可以发数据”)。
- 若接收缓冲区已满,nRTS 输出高电平(告诉发送方 “暂停发送,避免溢出”)。
- nCTS(Clear To Send,低有效):
- 若外部设备 nRTS 为低电平,USART 的 CTS 检测到后,启动发送。
- 若外部设备 nRTS 为高电平,USART 的发送自动挂起,直到 CTS 变低。
- nRTS(Request To Send,低有效):
数据寄存器
- 发送流程 CPU → 外部设备:CPU/DMA 写并行数据 → 存入 TDR 发送数据寄存器 → 转移到 发送移位寄存器进行并行→串行拆分 → 按帧格式逐位输出到 TX 引脚,串行信号输出。
- 接收流程 外部设备 → CPU:RX 引脚输入串行信号 → 送入 接收移位寄存器进行串行→并行拼接 → 拼接为完整数据存入 RDR 接收数据寄存器 → CPU/DMA 读并行数据。
控制器
- 发送控制:
- CR1 寄存器 → TE:
- 置 1 → 激活发送移位寄存器,允许从 TDR 取数据并串行输出。
- 置 0 → 关闭发送,TX 引脚回到空闲状态(高电平)。
- CR1 寄存器 → TE:
- 接收器控制:
- CR1 寄存器 → RE:
- 置 1 → 激活接收移位寄存器,允许从 RX 引脚采样串行信号。
- 置 0 → 关闭接收,RX 引脚输入被忽略。
- CR1 寄存器 → RE:
- USART 中断:
- 发送控制:
波特率发生器
- 波特率 = f PCLK 8 × ( 2 − OVER8 ) × USARTDIV \text{波特率} = \frac{f_{\text{PCLK}}}{8 \times (2 - \text{OVER8}) \times \text{USARTDIV}} 波特率=8×(2−OVER8)×USARTDIVfPCLK
- fPCLK:系统总线时钟。
- OVER8=0:采用 16 倍过采样;OVER8=1:采用 8 倍过采样。
- USARTDIV = DIV_Mantissa + DIV_Fraction 16 \text{USARTDIV} = \text{DIV\_Mantissa} + \frac{\text{DIV\_Fraction}}{16} USARTDIV=DIV_Mantissa+16DIV_Fraction
- 波特率 = f PCLK 8 × ( 2 − OVER8 ) × USARTDIV \text{波特率} = \frac{f_{\text{PCLK}}}{8 \times (2 - \text{OVER8}) \times \text{USARTDIV}} 波特率=8×(2−OVER8)×USARTDIVfPCLK
6. 串口电路
6.1 串口之间的连接
- 串口数据收发线交叉连接,并且共GND。
- 带硬件控制流:
- 无硬件控制流:
6.2 串口与 RS232 的转换和连接
- SP3232 是一款双通道 RS-232 电平转换芯片,核心功能是实现 TTL/CMOS 电平与 RS-232 电平的双向转换,解决不同电平标准的设备间通信问题。
- 引脚功能:
- 电源与接地引脚:VCC – 接系统电源;GND – 与系统地共地。
- 电荷泵电容引脚:C1+,C2+ – 外接电容正极;C1-,C2- – 外接电容负极。
- 串口通信引脚:
- RINx – 接 RS-232 的 RX 引脚。
- ROUTx – 接单片机的 UART RX 引脚。
- DINx – 接单片机的 UART TX 引脚。
- DOUTx – 接 RS-232 的 TX 引脚。
6.3 串口与 RS485 的转换和连接
- SP3485 是一款低功耗半双工 RS-485 收发器芯片,核心功能是实现 TTL/CMOS 电平与 RS-485 差分电平的双向转换。
- 电源与接地引脚:VCC – 接系统电源;GND – 与系统地共地。
- 数据收发与使能控制引脚:
- RO – 接单片机的 UART RX 引脚。
- DI – 接单片机的 UART TX 引脚。
- RE – 通常与 DE 引脚短接。
- DE – 与 RE 短接后,接单片机的 GPIO 引脚(控制收发方向)。
- RS-485 总线差分引脚:
- A 差分正端 – 接 RS-485 总线的 A 线。
- B 差分负端 – 接 RS-485 总线的 B 线。
6.4 串口与 USB 的转换和连接
- CH340C 是 USB 转串口芯片,支持 USB 转 TTL/RS232/RS485 等接口。
- 电源与接地引脚:VCC – 接系统电源;GND – 与系统地共地。
- USB 通信引脚:D+,D- 直接连接 USB 接口的 D +,D - 信号线,无需串联电阻,芯片内置 USB 上拉电阻。
- 串口通信引脚:TXD 串口数据发送端,连接MCU 的 RXD 引脚,RXD 串口数据接收端,连接MCU 的 TXD 引脚。
- RTS#:请求发送信号,低电平有效;低电平时,三极管导通,BOOT0 被拉到高电平,进入下载模式。
- DTR#:数据终端就绪信号,低电平有效;低电平时,三极管导通,RESET 被拉到低电平,触发复位。
7. USART 字符说明
- 可通过对 USART_CR1 寄存器中的 M 位进行编程来选择8位或9位的字长,一般设置为8位。
- TX 引脚在起始位工作期间处于低电平状态,在停止位工作期间处于高电平状态。
- 空闲字符可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。
- 停止字符可理解为在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入1或2个停止位(逻辑“1”位)以确认起始位。
- 发送和接收由通用波特率发生器驱动,发送器和接收器的使能位分别置1时将生成相应的发送时钟和接收时钟。