STM32 - USART串口通讯

USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步 / 异步收发器)是一种串行通信接口,用于实现设备之间的双向数据传输。它支持异步通信(无需时钟信号)和同步通信(需要时钟信号)两种模式,广泛应用于单片机、嵌入式系统、工业控制等领域

并行通信和串行通讯:

  • 串行通信:数据逐位(bit-by-bit)依次通过单一通信线路传输。例如:UART、SPI、$$I^2C$$ 等协议均采用串行方式。

  • 并行通信:多个数据位(如8位)同时通过多条并行的物理线路传输。例如:51和STM32单片机通过GPIO端口连接外部存储器时,使用8根或16根数据线并行传输数据。

    串并行

单工,半双工,全双工通讯:

  • **单工通信:**只允许数据在一个方向上传输,即数据只能从发送端传输到接收端,接收端无法向发送端传输数据。简单来说,就是一种“单向”通信模式,可以类比电视广播。
  • 双工通信:允许数据在两个方向上传输,其下又分为两种类型:半双工全双工
  • *半双工***通信:**允许数据在两个方向上传输,但不能同时进行。在同一时刻,数据只能在一个方向上传输。这意味着通信的两端可以轮流发送和接收数据,但不能同时进行。可以类比对讲机。
  • 全双工通信**:**允许数据同时在两个方向上传输。这种通信方式最为高效,因为它允许通信双方同时发送和接收数据,可以类比电话。

同步和异步通讯:

  1. 同步通讯:
    • 通信双方使用同一个时钟信号来同步数据的发送和接收。
    • 发送方和接收方必须在时钟信号的驱动下严格同步,确保数据在正确的时刻被采样。
  2. 异步通讯:
    • 通信双方没有共享的时钟信号,而是通过起始位停止位来同步数据传输。
    • 发送方和接收方使用各自的时钟(波特率)进行通信,但需要预先约定相同的波特率。

串口介绍:

  • 串口通讯(Serial Communication)是一种异步、全双工的串行通信接口,常用于微控制器与计算机、其他微控制器或外部设备之间的数据交换,下图是UART通信所需的信号线,其中Tx用于发送数据,Rx用于接受数据。

    串口

串口通讯协议:

  1. 数据格式:

    1. 在串口通信中,数据是逐帧(Frame)发送的,每个数据帧通常包括起始位、数据位、校验位(可选)和停止位,具体结构如下图所示。

      串口协议

    • 空闲状态
      • 串口协议规定,当总线处于空闲状态下,也就是没有数据传输时,应为高电平。
    • 起始位
      • 起始位表示一个数据帧的开始,起始位为低电平(区别于空闲状态)。
    • 数据位
      • 传输的主体内容,位于起始位之后,有效数据的长度可以是58位,一般都是8位,正好表示一个字节。先发送最低位,最后发送最高位,低电平表示0,高电平表示1
    • 校验位(可选)
      • 用于校验当前帧的正确性,校验算法可以是奇校验或偶校验。
      • 奇校验(odd parity:如果数据位中1的数目是偶数,则校验位为1,如果1的数目是奇数,校验位为0,目的是保证数据位+校验位中的1的总个数是奇数。
      • 偶校验(even parity:如果数据位中1的数目是偶数,则校验位为0,如果1的数目为奇数,校验位为1,目的是保证数据位+校验位中的1的个数是偶数。
    • 停止位
      • 停止位表示数据帧的结束,通常为1位或2位,停止位为高电平。
  2. 发送方和接收方的约定:

    1. 波特率
      1. 波特率(Baud Rate),他表示每秒钟传输多少个码元,用于表示数据的传输速率。
      2. 因为STM32提供了串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率为 4800、9600、115200等。
      3. 需要注意波特率(Baud Rate)和比特率(Bit Rate)的区别,比特率表示每秒传输的位(bit)数,而波特率表示每秒传输的符号(symbol)数(码元)。但是串口通信中,二进制的世界码元和位是等价的,只有0和1这两个符号(位),因此1个符号用1位就能表示,所以此处的波特率和比特率是等价的。
      4. 解释:二进制符号只有0和1,所以符号和位数一样,四进制中符号有0、1、2、3,但是符号0转化为位数是00,符号1转化为位数是01,符号2转化为位数是10,符号3转化为位数是11,所以说比特率=波特率×log2(M)M 是调制方式中每个符号可以表示的比特数,也可以理解成是进制数,如果是四进制,M就等于4
    2. 数据位
      1. 发送方和接收方需要明确数据位的位数。
    3. 校验位
      1. 发送方和接收方需要明确是否有校验位,如果有,需要明确校验算法是奇校验还是偶校验。
    4. 停止位
      1. 发送方和接收方需要明确停止位的位数。

参考链接: