【STM32实践篇】:串口通信

文章目录

  • [1. 串行通信与并行通信](#1. 串行通信与并行通信)
  • [2. 异步通信与同步通信](#2. 异步通信与同步通信)
  • [3. 单工,半双工和全双工通信](#3. 单工,半双工和全双工通信)
  • [4. 通信速率和接口标准](#4. 通信速率和接口标准)
  • [5. USART 结构框图](#5. USART 结构框图)
  • [6. 串口电路](#6. 串口电路)
    • [6.1 串口之间的连接](#6.1 串口之间的连接)
    • [6.2 串口与 RS232 的转换和连接](#6.2 串口与 RS232 的转换和连接)
    • [6.3 串口与 RS485 的转换和连接](#6.3 串口与 RS485 的转换和连接)
    • [6.4 串口与 USB 的转换和连接](#6.4 串口与 USB 的转换和连接)
  • [7. USART 字符说明](#7. USART 字符说明)


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 结构框图

  1. 功能引脚

    • RX:接收数据输入引脚。
    • TX:发送数据输出引脚。
    • 同步模式下需要 SCLK:发送器时钟输出。
    • 硬件流控制模式下需要 :
      • nRTS (Request To Send,低有效):
        • 若接收缓冲区有空间 ,nRTS 输出低电平(请求发送方 "可以发数据")。
        • 若接收缓冲区已满 ,nRTS 输出高电平(告诉发送方 "暂停发送,避免溢出")。
      • nCTS (Clear To Send,低有效):
        • 若外部设备 nRTS 为低电平 ,USART 的 CTS 检测到后,启动发送
        • 若外部设备 nRTS 为高电平 ,USART 的发送自动挂起,直到 CTS 变低。
  2. 数据寄存器

    • 发送流程 CPU → 外部设备:CPU/DMA 写并行数据 → 存入 TDR 发送数据寄存器 → 转移到 发送移位寄存器进行并行→串行拆分 → 按帧格式逐位输出到 TX 引脚,串行信号输出。
    • 接收流程 外部设备 → CPU:RX 引脚输入串行信号 → 送入 接收移位寄存器进行串行→并行拼接 → 拼接为完整数据存入 RDR 接收数据寄存器 → CPU/DMA 读并行数据。
  3. 控制器

    • 发送控制:
      • CR1 寄存器 → TE:
        • 置 1 → 激活发送移位寄存器,允许从 TDR 取数据并串行输出。
        • 置 0 → 关闭发送,TX 引脚回到空闲状态(高电平)。
    • 接收器控制:
      • CR1 寄存器 → RE:
        • 置 1 → 激活接收移位寄存器,允许从 RX 引脚采样串行信号。
        • 置 0 → 关闭接收,RX 引脚输入被忽略。
    • USART 中断:
  4. 波特率发生器

    • 波特率 = 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

6. 串口电路

6.1 串口之间的连接

  • 串口数据收发线交叉连接,并且共GND
  1. 带硬件控制流:
  2. 无硬件控制流:

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时将生成相应的发送时钟和接收时钟。

相关推荐
Ronin-Lotus22 分钟前
嵌入式硬件篇---继电器
嵌入式硬件·继电器
才不是麻花4 小时前
初学者STM32—PWM驱动电机与舵机
stm32·单片机·嵌入式硬件
DIY机器人工房4 小时前
完整的 SquareStudio 注册登录功能实现方案:已经烧录到开发板正常使用
linux·嵌入式硬件·嵌入式·diy机器人工房
不做无法实现的梦~4 小时前
stm32mp157f-dk2安装镜像并且部署qt全流程
stm32·嵌入式硬件·qt
soulermax7 小时前
数字ic后端设计从入门到精通12(含fusion compiler, tcl教学)全定制设计进阶
嵌入式硬件·硬件架构
wind_one19 小时前
STM32小实验四--按键控制LED灯
stm32·单片机·嵌入式硬件
LZA18512 小时前
网络编程之 UDP:用户数据报协议详解与实战
单片机·嵌入式硬件
jingjing~12 小时前
STM32计数器记数实验(TIM2 + OLED显示)| 附完整源码
stm32·单片机·嵌入式硬件
XINVRY-FPGA19 小时前
XC7A35T‑2FGG484I Xilinx FPGA Artix‑7 AMD
嵌入式硬件·fpga开发·云计算·硬件架构·硬件工程·fpga·pcb工艺