单片机学习小组
直播中

莫联雪

7年用户 1116经验值
私信 关注

USART和RS232/RS-422/RS485的关系是什么?

USART和RS232/RS-422/RS485的关系是什么?
STM32-USART通信步骤是怎样的?
USART通信编程流程是怎样的?

回帖(1)

刘海欢

2022-2-16 10:15:48
USART其实就是一种通信协议,用于进行数据交换。
UART与USART:
UART:通用异步收发器
USART:通用同步异步收发器



  • 在单片机中,名称为UART的接口一般只能用于异步串行通讯,
  • 而名称为USART的接口可以用于同步串行通讯和异步串行通讯。可以理解UART是USART的剪裁版,只支持异步通信。
  • UART是全双工异步通信,可以同时收发数据。

同步通信:指通信双方共用一个时钟,通信双方有共同的SCLK时钟线(IIC、SPI)
异步通信:通信双方的时钟独立分开,通信双方无SCLK时钟线(USART)
UART通信双方必须采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程。
USART和RS232、RS-422、RS485的关系:

首先说一下RS-232、RS-422、RS-485 不是通讯协议,它们仅是关于UART通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面)。
也就是说RS232、RS-422、RS485是基于UART通信协议的通信的,它们只是一些接口标准,通常实现RS232、RS-422、RS485通信需要另外搭建转换威廉希尔官方网站 。
STM32F407ZGT6 的串口资源相当丰富的可提供 6 路串口,通用同步异步收发器 (USART) 能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求。
UART通信协议:
● 发送或接收前保持空闲线路
● 起始位
● 数据位(字长 8 位或 9 位),最低有效位在前 ,最后一位可以是奇偶校验位,也可以采用无奇偶校验的方式。
● 停止位:用于指示帧传输已完成,可以有 0.5 个、1 个、1.5 个、2 个
奇偶校验:
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。若采用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。

STM32-USART通信步骤:



  • 通过向 USART_CR1 寄存器中的 UE 位写入 1 使能 USART。
  • 对 USART_CR1 中的 M 位进行编程以定义字长。
  • 对 USART_CR2 中的停止位数量进行编程。
  • 如果将进行多缓冲区通信,请选择 USART_CR3 中的 DMA 使能 (DMAT位)。按照多缓冲区
    通信中的解释说明配置 DMA 寄存器。
  • 使用 USART_BRR 寄存器选择所需波特率。
  • 将 USART_CR1 中的 TE 位置 1 以便在首次发送时发送一个空闲帧。
  • 在 USART_DR 寄存器中写入要发送的数据(该操作将清零 TXE 位)。为每个要在单缓
    冲区模式下发送的数据重复这一步骤。
  • 向 USART_DR 寄存器写入最后一个数据后,等待至 TC=1。这表明最后一个帧的传送已
    完成。禁止 USART 或进入暂停模式时需要此步骤,以避免损坏最后一次发送。

USART通信还是比较复杂的,更具体的内容可以看《STM32F4xx中文参考手册》

USART通信编程流程:


  • 串口时钟使能,GPIO 时钟使能。
  • 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。
  • GPIO 初始化设置:要设置模式为复用功能。
  • 串口参数初始化:设置波特率,字长,奇偶校验等参数。
  • 开启中断并且初始化 NVIC,使能中断(如果是用中断接收时,才需要开启中断;usart还可以采用查询方式接收)。
  • 使能串口。
  • 编写中断处理函数:函数名格式为 USARTxIRQHandler(x 对应串口号)。

关于USART串口GPIO的配置:

最后还有一个较为重要的操作就是重定义printf函数
由于函数具体操作较多,建议直接看原子哥或火哥的例程。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分