STM32 USART详细解读(理论知识)

文章目录


前言

本篇文章来给大家讲解一下STM32中的USART,USART是STM32中非常重要的一个模块,本篇文章将从STM32F1的参考手册出发进行讲解。

一、同步传输和异步传输

同步传输和异步传输是指在数据通信中数据传输的两种基本方式。它们之间的主要区别在于数据传输的方式和实时性。

同步传输:

1.在同步传输中,数据的发送和接收是基于某种时钟信号或同步信号进行的。

2.发送端和接收端之间需要共享时钟信号或通过其他方式保持同步,以确保数据的正确传输。

3.传输速率通常是固定的,因为数据的发送和接收都是根据同一个时钟信号进行同步的。

4.典型的同步传输包括 SPI(Serial Peripheral Interface)和 I2C(Inter-Integrated Circuit)等总线协议。在这些协议中,主设备通常负责生成时钟信号,从设备则在时钟信号的边沿接收或发送数据。

异步传输:

1.在异步传输中,数据的发送和接收是基于各自独立的时钟信号进行的,而不需要共享时钟信号。

2.发送端和接收端之间不需要保持同步,因为数据中包含了用于确定数据开始和结束的特定标志,例如起始位和停止位。

3.传输速率可以是可变的,并且不受外部时钟的限制。

4.典型的异步传输包括 UART(Universal Asynchronous Receiver-Transmitter)等串行通信协议。在 UART 中,数据的传输不依赖于外部时钟信号,而是通过起始位、数据位、停止位和可能的校验位来确定数据的传输时序。

同步传输需要发送端和接收端之间保持同步,通常具有固定的传输速率,而异步传输则不需要共享时钟信号,可以具有更灵活的传输速率,并且通过特定的起始位和停止位来确定数据的传输时序。

二、UART协议

UART(Universal Asynchronous Receiver/Transmitter)是一种串行通信协议,用于在设备之间传输数据。它是一种异步协议,这意味着发送和接收端之间不需要共享时钟信号,而是使用起始位、数据位、校验位和停止位来组织数据帧。

基本的UART通信包括以下几个要素:

起始位(Start Bit): 表示数据帧的开始。它始终是逻辑0,并且指示接收端开始读取数据。

数据位(Data Bits): 这是实际的数据比特,可以是5位、6位、7位或8位。

校验位(Parity Bit): 用于错误检测。可以选择在数据帧中添加一个奇偶校验位,以帮助检测数据传输中的错误。

停止位(Stop Bit): 表示数据帧的结束。通常是一个或两个停止位。

UART通信只需要两根线,它们分别是:

TX(Transmit): 发送线,用于从发送端发送数据到接收端。

RX(Receive): 接收线,用于从接收端接收数据。

这两根线允许双向通信,其中TX线传输数据,RX线接收数据。UART通信没有明确的主从之分,设备之间可以灵活地进行通信。通常,两个设备之间进行UART通信时,它们的TX线连接到对方的RX线,而RX线连接到对方的TX线。

UART通常使用TTL(Transistor-Transistor Logic)或CMOS(Complementary Metal-Oxide-Semiconductor)逻辑电平进行通信。这些是常见的逻辑电平标准,用于表示数字信号的高低电平状态。

在UART通信中,逻辑电平标准通常定义了高电平(逻辑1)和低电平(逻辑0)的电压范围,以及在这些电平下传输数据的方式。

标准的TTL/CMOS逻辑电平一般如下定义:

高电平(逻辑1): 通常在+3.3V或+5V左右。对于TTL逻辑,+3.3V或+5V被认为是逻辑高电平。对于CMOS逻辑,通常在VDD(供电电压)的70%以上被认为是逻辑高电平。

低电平(逻辑0): 通常在0V附近,接近地电位(GND)。对于TTL逻辑,接近0V被认为是逻辑低电平。对于CMOS逻辑,通常在VDD的30%以下被认为是逻辑低电平。

UART通信在这些逻辑电平下工作,发送端将数据转换为相应的电平信号进行传输,接收端根据这些电平信号来解析接收到的数据。这种标准化的逻辑电平确保了不同设备之间的兼容性,并简化了UART通信的实现和集成。

UART通常使用标准的TTL或CMOS逻辑电平进行数据传输,其中高电平代表逻辑1,低电平代表逻辑0,这些电平标准为UART通信提供了稳定和可靠的传输环境。

三、UART硬件结构

1.波特率,数据位,校验位,停止位设置

USART_BRR(USART Baud Rate Register)是用于设置 USART(Universal Synchronous Asynchronous Receiver Transmitter)模块的波特率的寄存器。波特率是指每秒传输的比特数,通常用 bps(bits per second)来表示。

在设置波特率时,USART_BRR 寄存器的值取决于USART的时钟源频率和所需的波特率。通常,波特率的计算公式如下:

\\text{BRR} = \\frac{\\text{时钟源频率}}{(\\text{波特率} \\times 16)}

在具体设置时,步骤如下:

1.确定USART的时钟源频率,这通常由微控制器的系统时钟提供。

2.确定所需的波特率。

3.使用上述公式计算得到USART_BRR的值。

4.将该值写入USART_BRR寄存器。



USART_CR1控制寄存器可以设置数据位的长度和校验位。


USART_CR1控制寄存器可以设置停止位

2.数据发送流程

当使用 USART 模块发送数据时,涉及到几个关键寄存器:

1.TDR 寄存器(Transmit Data Register):用于存放待发送的数据。当向 TDR 寄存器写入数据后,数据会立即被发送移位寄存器发送。

2.TXE 标志位(Transmit Data Register Empty):用于指示 TDR 寄存器是否为空。当 TXE 标志位被置位时,表示 TDR 寄存器为空,可以接受新的数据写入。CPU 可以通过监视 TXE 标志位来确定何时向 TDR 寄存器写入新的数据。

3.TC 标志位(Transmission Complete):用于指示当前的数据传输是否完成。当 USART 完成发送 TDR 寄存器中的最后一个数据后,TC 标志位会被置位。这可以作为发送完成的标志,以便 CPU 可以在必要时采取后续操作。

在数据发送的过程中,大致步骤如下:

1.CPU 将要发送的数据写入 TDR 寄存器。

2.数据进入发送移位寄存器开始发送。

3.USART 开始逐位发送数据,并在发送过程中不断监视 TXE 标志位。

4.当 TXE 标志位被置位时,表示 TDR 寄存器已经空闲,可以接受新的数据。CPU 可以继续向 TDR 寄存器写入下一个数据。

5.当发送移位寄存器中的所有数据位都被发送完毕时,USART 会自动置位 TC 标志位,表示整个数据传输过程完成。

6.CPU 可以检测到 TC 标志位被置位,从而知道当前的数据传输已经完成,可以进行下一步操作,如关闭 USART 或者准备发送下一个数据。

通过 TXE 和 TC 标志位,USART 模块能够有效地协调数据的发送,并向 CPU 提供发送状态的反馈,以便 CPU 及时作出相应的处理。

3.数据接收流程

串口接收数据的流程通常涉及以下几个关键组件:

1.接收移位寄存器(Receive Shift Register):用于暂存从串口线接收到的数据位。这是串口接收数据的第一站,数据在此处按位接收。

2.RDR 寄存器(Receive Data Register):用于存放接收到的完整数据字节。接收移位寄存器中的数据位被组装成完整的字节,并存储在 RDR 寄存器中,以便 CPU 读取。

3.RXNE 标志位(Receive Data Register Not Empty):用于指示 RDR 寄存器中是否有可读取的数据。当 RXNE 标志位被置位时,表示 RDR 寄存器中有新的接收数据,可以被 CPU 读取。

串口接收数据的流程如下:

1.数据接收:当外部设备通过串口发送数据时,数据会通过串口线进入接收移位寄存器。

2.逐位接收:接收移位寄存器将逐位接收数据,直到完整的数据字节被接收完毕。在此过程中,数据位被暂存在接收移位寄存器中。

3.数据组装:一旦接收移位寄存器中的数据位被接收完毕,这些数据位会被组装成完整的字节,并存储在 RDR 寄存器中。

4.RXNE 标志位置位:当 RDR 寄存器中有新的接收数据时,RXNE 标志位会被置位,通知 CPU 可以读取 RDR 寄存器中的数据。

5.数据读取:CPU 可以通过读取 RDR 寄存器来获取接收到的数据。一旦 CPU 读取了 RDR 寄存器中的数据,RXNE 标志位会自动清除。

串口接收数据的过程就完成了。接收移位寄存器负责逐位接收数据,RDR 寄存器用于存储完整的数据字节,而 RXNE 标志位则用于通知 CPU 可以读取接收到的数据。这样,串口通信就可以实现双向的数据传输。

在STM32F103系列微控制器中,RDR(Receive Data Register)和TDR(Transmit Data Register)是同一个寄存器的不同别名,它们在内存映射中具有相同的地址。这种设计简化了对串口通信的控制和管理。

在STM32F103中,USART(Universal Synchronous Asynchronous Receiver Transmitter)模块用于串口通信。USART包含了用于接收和发送数据的数据寄存器,即RDR和TDR。这两个寄存器虽然在功能上有所区别,但在硬件层面上实际上是同一个物理寄存器。

因此,当你读取或写入RDR和TDR时,实际上是对同一个寄存器进行操作。这意味着,你可以使用相同的地址来访问这个寄存器,无论是进行数据的接收还是发送。

4.中断控制

TXEIE(Transmit Data Register Empty Interrupt Enable):当 TXEIE 被设置为 1 时,表示使能了"发送数据寄存器为空"中断。这个中断会在 USART 的发送数据寄存器(TDR)为空时触发,通常用于指示可以发送新的数据。当 USART 发送完成当前的数据字节并且 TDR 可以接受新的数据时,这个中断会被触发,从而通知 CPU 进行数据发送操作。

TCIE(Transmission Complete Interrupt Enable)寄存器使能了"传输完成"中断。当TCIE被设置为1时,表示使能了这个中断功能。这个中断在USART完成一次数据帧的传输后触发,而不是仅仅指发送完最后一个数据字节。
一次数据传输指的是发送或接收一个完整的数据帧,这包括起始位、数据位、校验位和停止位。当USART发送完最后一个数据位并且停止位已经完全发送时,TCIE中断就会被触发。

RXNEIE(Receive Data Register Not Empty Interrupt Enable):当 RXNEIE 被设置为 1 时,表示使能了"接收数据寄存器非空"中断。这个中断会在 USART 的接收数据寄存器(RDR)中有新的数据可供读取时触发,通常用于指示可以读取新的接收数据。当 USART 接收到新的数据并存储到 RDR 寄存器中时,这个中断会被触发,从而通知 CPU 进行数据接收操作。

总结

本篇文章就讲解到这里,大家可以自己下去再多研究研究数据手册当中的内容。

相关推荐
小痞同学4 分钟前
【铁头山羊STM32】HAL库 2.UART部分
stm32·单片机·嵌入式硬件
乡野码圣31 分钟前
【RK3588 Android12】高精度定时器hrtimer
单片机·嵌入式硬件
小痞同学1 小时前
【铁头山羊STM32】HAL库 3.I2C部分
stm32·单片机·嵌入式硬件
蝎蟹居1 小时前
GBT 4706.1-2024逐句解读系列(29) 第7.9~7.10条款:开关,档位应明确标识
人工智能·单片机·嵌入式硬件·物联网·安全
梁洪飞2 小时前
pmu+power控制+pmic
arm开发·嵌入式硬件·arm
nnerddboy3 小时前
嵌入式面试题:2.模电、数电
单片机·嵌入式硬件
爱吃苹果的梨叔3 小时前
NTP 网络时间服务器硬件驯服技术说明(投标技术响应说明)
linux·运维·服务器·网络·嵌入式硬件·tcp/ip
安庆平.Я3 小时前
STM32——定时器:基本定时器
stm32·单片机·嵌入式硬件
Nautiluss3 小时前
一起调试XVF3800麦克风阵列(十六)
人工智能·单片机·音频·语音识别·dsp开发·智能硬件
Hello_Embed3 小时前
串口面向对象封装实例
笔记·stm32·单片机·学习·操作系统