STM32-UART通信

本文基于STM32F407ZGT6
—————————————
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通信步骤:

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

USART通信还是比较复杂的,更具体的内容可以看《STM32F4xx中文参考手册》
在这里插入图片描述

USART通信编程流程:

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

关于USART串口GPIO的配置:
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值