串口通信基础知识详解

通信基础知识

  首先两个设备间的通信方式可分为并行通信和串行通信两种他们区别如下:

并行通信 串行通信
传输原理 数据各个位同时传输 数据按位顺序传输
优点 速度快 占用引脚资源少
缺点 占用引脚资源多 速度相对较慢

串行通信的分类

  • 单工数据传输只支持数据在一个方向上传输
  • 半双工允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口
  • 全双工允许数据同时在两个方向上传输,因此全双工通信是两个单工方式的结合,需要独立的接收端和发送端
    在这里插入图片描述
      按照通信方式分为:
  • 同步通信:带时钟同步信号的传输,比如SPI,IIC通信接口
  • 异步通信:不带时钟同步信号,比如UART(通用异步收发器),单总线
    在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方协调,同步数据,例如通讯中双方会统一规定在时钟信号的上升沿或者下降沿对数据进行采样;
      在异步通讯中不使用时钟信号进行数据同步,他们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据,通信双方需要约定好数据传输的速率(波特率:每秒发送的二进制位数),以便更好地同步。

  常见的串行通信接口

通信标准 引脚说明 通信方式 通信方向
UART(通用异步收发器) TXD:发送端
RXD:接收端
GND:接地
异步通信 全双工
1-wire(单总线) DQ:发送/接收端 异步通信 半双工
SPI SCK:同步时钟
MISO:主机输入,从机输出
MOSI主机输出,从机输入
同步通信 全双工
I2C SCK:同步时钟
SDA:数据输入/输出端
同步通信 半双工

STM32串口通信基础(UART)

STM32串口通信接口有两种,分别是:UART(通用异步收发器)USART(通用同步异步收发器),对于大容量STM32F10x系列芯片,分别由3个USART和两个UART。
  UART引脚连接方法:

  • TXD:数据发送引脚;
  • RXD:数据输入引脚
    在这里插入图片描述
      对于两芯片的间的连接,两个芯片GND共地,同时TXD和RXD交叉连接,这样两个芯片间可进行TTL电平通信
      但如果对于芯片和PC机相连,除了共地条件外,不能使用如上的直接交叉连接,虽然两者都有TXD和RXD引脚,但通常PC机使用的是RS232接口(9针),通常是TXC和RXD经过电平转换得到,故如果要使芯片与PC机的RS232接口直接通信,需要将芯片的输入输出端口也电平转换为RS232类型,再交叉连接,二者的电平标准不同:
  • 单片机的点评标准(TTL电平):+5V表示1,0V表示0;
  • RS232电平标准:+15/+13V表示0,-15/-13表示1。

  RS232协议标准串口设备通讯结构如下:
在这里插入图片描述
  因此单片机与PC机进行串口通信应该遵循:在单片机串口与上位机给出的RS232口之间,通过电平转换电路实现TTL电平与RS232点评间的转换

STM32的UART特点

  • 全双工异步通信
  • 通信双方需要协商相同波特率
  • 可编程数据字长度(8位或9位;
  • 可配置的使用DMA多缓冲通信
  • 单独的发送器和接收器使能位
  • 检测标志:接收缓冲器、发送缓冲器、传输结束标志;
  • 多个带标志的中断源,触发中断
  • 其他:校验控制,四个错误检测标志。

串口通信过程

在这里插入图片描述
  根据下图的红色箭头不难看出:对接收来说,通过编码解码块,然后直接进入接收移位寄存器,接受移位寄存器一位一位接收数据,然后再将接收到的数据一次性的写到接收数据寄存器(RDR)中,这样CPU可通过读取接受数据寄存器(RDR)来读到接收的数据。
在这里插入图片描述
  同样对于发送来说,CPU将数据写入到发送数据寄存器(TDR),发送数据寄存器(TDR)将数据一次性的发送给发送移位寄存器,然后通过波特率将数据一位一位的移出,如下:
在这里插入图片描述
  发送方和接收方需要实现定好波特率,如下图所示在接收位移寄存器、发送位移寄存器分别连接到接收器控制、发送器控制,在这两者连接又是接收器时钟,发送器时钟,即使异步通信中没有时钟同步信号,但在串口内部提供了时钟信号来控制,可看到接收器时钟和发送器时钟又被连接到同一个控制单元,二者共用一个波特率发生器:
在这里插入图片描述
  下图中显示我们可通过向波特率寄存器(USART_BRR)写入参数,来修改串口时钟的分频值。只要知道USARTDIV的值就可知道串口波特率寄存器的值,波特率计算公式:
在这里插入图片描述
  例如假设串口1要设置波特率为115200,时钟源PLCK2的时钟频率为72MHZ,根据上面的公式,我们可推出:USARTDIV = 72000000 / (16115200) = 39.0625,此时表达式为一个带有小数的浮点数,将小数部分和整数部分分开,将整数部分39 写入USART_BRR的后12位(DIV_Mantissa);小数部分乘16位后得到的整数值0.62516 =1写入到USART_BRR前四位部分(DIV_Fraction).
USARTDIV是对串口外设的时钟源进行分频,不同的USART挂载总线不同,因此时钟源fPCLK不同,USART1挂载在APR2总线上,时钟源为fPCLK2(高速);USART2、3、4挂载在APR1上,其时钟源为fPCLK1(低速),串口时钟源经USARTDIV分频后,分别输出作为发送器时钟和接收器时钟控制发送和接收的时序

UART中设置的参数

  串口通信的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,需要双方数据包格式一致才能收发数据,异步串口通信需要指定的参数:起始位、数据位(8或9位)、奇偶校验位(第9位)、停止位(1、15位)、波特率设置。UART串口数据包常用帧结构:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位,如下所示:
在这里插入图片描述
  奇偶校验位分计奇校验和偶校验,是一种简单的数据误码校验方法,奇校验是每帧数据中,包括数据位和校验位的9个位中1的个数需要为奇数,偶校验则是包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数

感谢【STM32】串口通信基本原理(超基础、详细版)

猜你喜欢

转载自blog.csdn.net/weixin_42647166/article/details/106993823