通用同步/异步收发器USART/UART

结构框图

在这里插入图片描述

数据位

请添加图片描述

异步通信帧结构:  
 1、起始位:
		 每帧以一个 START 位开始,并且始终为低电平。 
 2、数据位数据包:
		8位或者9位数据
		第9位是奇偶校验位
 3、STOP 位:
		可以是一位或两位。它在数据位包之后发送以指示帧的结束。停止位始终为逻辑高。
 
 奇偶校验位:
          用来表示发送数据逻辑高的数量添加在后,如果数据为偶数 偶校验:则是0,奇校验:则是1

寄存器

控制寄存器 USART_CR1

UE:串口使能位  (USART enable)
	0:USART分频器和输出被禁止;
	1:USART模块使能。 
M:字长 (Word length) 
	0:一个起始位,8个数据位,n个停止位;
	1:一个起始位,9个数据位,n个停止位。  
WAKE:USART唤醒的方法 (Wakeup method)   
	0:被空闲总线唤醒;
	1:被地址标记唤醒。 
PCE:检验控制使能 (Parity control enable)  
	0:禁止校验控制;
	1:使能校验控制。 
PS:校验选择 (Parity selection)   
	0:偶校验;
	1:奇校验。 
PEIE:PE中断使能 (PE interrupt enable)  
	0:禁止产生中断;
	1:当USART_SR中的PE为’1’时,产生USART中断。 
TXEIE:发送缓冲区空中断使能 (TXE interrupt enable)  
	0:禁止产生中断;
	1:当USART_SR中的TXE为’1’时,产生USART中断。 
TCIE:发送完成中断使能 (Transmission complete interrupt enable)  
	0:禁止产生中断;
	1:当USART_SR中的TC为’1’时,产生USART中断。 
RXNEIE:接收缓冲区非空中断使能 (RXNE interrupt enable) 
	0:禁止产生中断;
	1:当USART_SR中的ORE或者RXNE为’1’时,产生USART中断。 
IDLEIE:IDLE中断使能 (IDLE interrupt enable) 
	0:禁止产生中断;
	1:当USART_SR中的IDLE为’1’时,产生USART中断。 
TE:发送使能 (Transmitter enable) 
	0:禁止发送;
	1:使能发送。 
RE:接收使能 (Receiver enable) 
	0:禁止接收;
	1:使能接收,并开始搜寻RX引脚上的起始位。
RWU:接收唤醒 (Receiver wakeup)  
	0:接收器处于正常工作模式;
	1:接收器处于静默模式。
SBK:发送断开帧 (Send break)  
	0:没有发送断开字符;
	1:将要发送断开字符。  

状态寄存器 USART_SR

CTS: CTS 标志 (CTS flag)  
	0:nCTS状态线上没有变化;
	1:nCTS状态线上发生变化。
	注:UART4和UART5上不存在这一位。硬件置高、软件清零
LBD: LIN断开检测标志 (LIN break detection flag)  
	0:没有检测到LIN断开;
	1:检测到LIN断开。 
	硬件置高、软件清零
TXE:发送数据寄存器空 (Transmit data register empty) 
	TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位 
	0:数据还没有被转移到移位寄存器;
	1:数据已经被转移到移位寄存器。 
	硬件置高、软件清零
TC:发送完成 (Transmission complete)  
	0:发送还未完成;
	1:发送完成。	
	硬件置高、软件清零
RXNE:读数据寄存器非空 (Read data register not empty) 
	当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。 
	0:数据没有收到;
	1:收到数据,可以读出。	
	硬件置高、软件清零
IDLE:监测到总线空闲 (IDLE line detected) 
	当检测到总线空闲时,该位被硬件置位。 
	0:没有检测到空闲总线;
	1:检测到空闲总线。
	硬件置高、软件清零
	注意:IDLE位不会再次被置高直到RXNE位被置起(即又检测到一次空闲总线) 
ORE:过载错误 (Overrun error) 
	当RXNE仍然是’1’的时候,当前被接收在移位寄存器中的数据,需要传送至RDR寄存器时,硬件将该位置位。  
	0:没有过载错误;
	1:检测到过载错误。
	硬件置高、软件清零
	注意:该位被置位时,RDR寄存器中的值不会丢失,但是移位寄存器中的数据会被覆盖 
NE: 噪声错误标志 (Noise error flag) 
	在接收到的帧检测到噪音时,由硬件对该位置位 
	0:没有检测到噪声;
	1:检测到噪声。
	硬件置高、软件清零
	注意:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE标志时产生中断。 
FE: 帧错误 (Framing error) 
	当检测到同步错位,过多的噪声或者检测到断开符, 硬件置位 
	0:没有检测到帧错误;
	1:检测到帧错误或者break符。 
	硬件置高、软件清零
PE: 校验错误 (Parity error) 
	在接收模式下,如果出现奇偶校验错误,硬件对该位置位。 
	0:没有奇偶校验错误;
	1:奇偶校验错误。
	硬件置高、软件清零

数据寄存器 USART_DR

### UART/USART 通信模式类型 #### 异步通信模式 在异步通信模式下,UARTUSART 使用起始位和停止位来标记每一帧数据的开始和结束。这种模式不需要单独的时钟信号来进行同步[^2]。每一位的数据持续时间由波特率决定,在发送方和接收方之间必须预先约定好相同的波特率设置以确保正确解读所传输的信息。 #### 同步通信模式 对于 USART 而言,还支持同步通信模式。在此模式中,除了常规的数据线之外还需要一条额外的时钟线路(SCLK)用于同步双方的操作频率。这种方式允许更高速度的数据传送,并且可以减少由于不同步而产生的错误概率[^4]。 #### 半双工与全双工操作 无论是采用异步还是同步的方式工作,这两种类型的设备都可以执行半双工或全双工的数据交换: - **全双工**:意味着可以在同一时刻双向传递信息,即一边发送另一边也在接收; - **半双工**:指在同一时间内只能进行单一方向上的资料流动,要么是在发送状态要么处于接受状态下[^5]。 ```c // 配置USART异步模式的例子 void Configure_USART_Async(void){ // 假设已经初始化了GPIO和其他外设资源 huart.Instance = USARTx; huart.Init.BaudRate = 9600; /* 设置波特率为9600 */ huart.Init.WordLength = UART_WORDLENGTH_8B;// 字符长度为8位 huart.Init.StopBits = UART_STOPBITS_1; // 一位停止位 huart.Init.Parity = UART_PARITY_NONE; // 不使用奇偶校验 huart.Init.Mode = UART_MODE_TX_RX; // 发送加接收模式 huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;// 关闭硬件流控 huart.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值