UART寄存器介绍

在 STM32 微控制器中,UART(通用异步收发传输器)通信通过多个寄存器实现配置和数据传输。下面详细解析 UART 的核心寄存器及其功能。

1. 状态寄存器(USART_SR)

状态寄存器反映 UART 当前的工作状态,用于判断数据传输是否完成、是否接收到数据等。

主要位功能
名称功能
7TXE发送缓冲区为空(1 = 空,可写入新数据)。写入 DR 寄存器后自动清零。
6TC发送完成(1 = 传输结束)。需软件清零(写 1 清除)。
5RXNE接收缓冲区非空(1 = 接收到数据)。读取 DR 寄存器后自动清零。
3IDLE检测到总线空闲(1 = 空闲)。需先读 SR,再读 DR 清零。
2ORE溢出错误(1 = 数据丢失)。需读 SR,再读 DR 清零。
0PE奇偶校验错误(1 = 校验失败)。需软件清零。
应用场景
  • 发送数据:检查TXETC标志,确保缓冲区为空或传输完成。
  • 接收数据:检查RXNE标志,确认有新数据可读。
  • 错误处理:检查OREPE等标志,处理通信异常。

2. 数据寄存器(USART_DR)

数据寄存器用于存储发送和接收的数据,实际由两个独立的寄存器组成:

  • 发送缓冲区寄存器(TDR):写入DR时,数据被存入 TDR,随后传输到移位寄存器。
  • 接收缓冲区寄存器(RDR):接收到的数据先存入移位寄存器,再转移到 RDR,读取DR时获取 RDR 内容。
注意事项
  • 数据位宽由CR1M位决定(8 位或 9 位)。
  • 写入DR会清除TXE标志,读取DR会清除RXNE标志。

3. 波特率寄存器(USART_BRR)

波特率寄存器用于配置 UART 的通信速率,计算公式如下:

波特率 = fPCLK / (16 * USARTDIV)

其中:

  • fPCLK:UART 时钟频率(APB 总线时钟)。
  • USARTDIV:分频系数,由BRR寄存器的整数部分([15:4])和小数部分([3:0])组成。
示例

假设fPCLK = 84MHz,波特率为 115200:

USARTDIV = 84000000 / (16 * 115200) ≈ 45.5729
整数部分 = 45 (0x2D)
小数部分 = 0.5729 * 16 ≈ 9 (0x9)
BRR = 0x2D9

4. 控制寄存器 1(USART_CR1)

控制寄存器 1 用于配置 UART 的基本功能,如使能、字长、奇偶校验等。

主要位功能
名称功能
13UEUART 使能(1 = 使能)。
12M字长(0=8 位 + 校验,1=9 位 + 校验)。
10PCE奇偶校验使能(1 = 使能)。
9PS奇偶校验类型(0 = 偶校验,1 = 奇校验)。
7TXEIE发送缓冲区空中断使能(1 = 使能)。
6TCIE发送完成中断使能(1 = 使能)。
5RXNEIE接收缓冲区非空中断使能(1 = 使能)。
4IDLEIE空闲线路检测中断使能(1 = 使能)。
3TE发送使能(1 = 使能)。
2RE接收使能(1 = 使能)。
0OVER8过采样模式(0=16 倍,1=8 倍)。

5. 控制寄存器 2(USART_CR2)

控制寄存器 2 主要用于配置停止位、LIN 模式等。

主要位功能
名称功能
13:12STOP停止位设置:
00=1 位,01=0.5 位,10=2 位,11=1.5 位。
6LINENLIN 模式使能(1 = 使能)。
0CLKENSCLK 引脚使能(用于同步模式)。

6. 控制寄存器 3(USART_CR3)

控制寄存器 3 用于配置高级功能,如硬件流控制、DMA 等。

主要位功能
名称功能
14ONEBIT采样方法(0=3 采样位,1=1 采样位)。
11CTSECTS 硬件流控制使能(1 = 使能)。
10RTSERTS 硬件流控制使能(1 = 使能)。
7DMAT发送 DMA 使能(1 = 使能)。
6DMAR接收 DMA 使能(1 = 使能)。

7. 中断和状态寄存器(USART_ISR)

在 STM32F4 及更高系列中,ISR替代了SR寄存器,功能类似但增加了更多状态位,如忙标志(BUSY)。

寄存器操作示例

1. 初始化 UART(115200 波特率,8N1)
// 假设fPCLK=84MHz
USART1->BRR = 0x2D9;         // 设置波特率为115200
USART1->CR1 = USART_CR1_TE | // 使能发送USART_CR1_RE | // 使能接收USART_CR1_UE;  // 使能UART
USART1->CR2 = 0;             // 1个停止位
USART1->CR3 = 0;             // 禁用硬件流控制
2. 发送单个字符
while (!(USART1->SR & USART_SR_TXE)); // 等待发送缓冲区为空
USART1->DR = 'A';                     // 发送字符'A'
3. 接收单个字符
while (!(USART1->SR & USART_SR_RXNE)); // 等待接收缓冲区非空
char c = USART1->DR;                   // 读取接收到的字符
4. 启用接收中断
USART1->CR1 |= USART_CR1_RXNEIE; // 使能接收缓冲区非空中断
NVIC_EnableIRQ(USART1_IRQn);     // 使能USART1中断

总结

UART 寄存器的核心操作包括:

  1. 初始化:配置波特率(BRR)、字长(CR1.M)、停止位(CR2.STOP)、校验位(CR1.PCE)。
  2. 发送控制:通过SR.TXESR.TC判断发送状态,写入DR发送数据。
  3. 接收控制:通过SR.RXNE判断接收状态,读取DR获取数据。
  4. 中断配置:通过CR1使能各类中断(如RXNEIETXEIE),并配置 NVIC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91109.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写一个算法对一组值进行归一化映射,使它们在视觉上有明显的区分度,尤其在数据集分布不均时仍能体现差异

问题: 有一批数据,都是随机值范围是不确定,我需要用这个值来绘制同样数量圆,不同值他们的圆半径不同,考虑到数据有时候大小偏差不大,这1000个值有可能是集中在10,20之间,也可能是分布广泛&#…

具身智能零碎知识点(五):VAE中对使用KL散度的理解

VAE中对使用KL散度的理解什么是 VAE (Variational AutoEncoder)?从自编码器 (AE) 说起VAE:让潜在空间变得“有意义”和“连续”KL 散度是如何用到的?通俗理解 KL 散度在 VAE 中的作用:带来的好处:KL 散度公式 (无需背诵…

理解:进程、线程、协程

线程、进程和协程是并发编程的重要组成部分。进程(Process)定义进程是操作系统分配资源的基本单位,表示一个正在执行的程序。一旦一个程序被加载到内存中,它就成为一个进程,而每个进程都有其独立的内存空间。特征进程之…

总结一下找素数的三种方法

目录 一试除法 二埃氏筛 三线性筛(欧拉筛) 一试除法 思想:就是判断某个数x是不是素数,就判断从2开始到小于根号x的范围内有没有能够取余不等于0的,这个说明当前值就是x的一个因子,所以不是素数。 代码: import java.util.Scanner;public…

基于Yolov8车辆检测及图像处理系统【有代码】

0 引言 随着城市化进程的加速和机动车保有量的快速增长,交通管理、智能监控和自动驾驶等领域对车辆目标检测技术的需求日益增长。车辆目标检测是计算机视觉领域的一个重要研究方向,其目标是从图像或视频序列中准确识别和定位车辆,为后续的车辆跟踪、行为分析和交通流量统计…

MySQL密码管理器“mysql_config_editor“

目录 核心能力 常用命令速查 为什么更安全? 典型场景 mysql_config_editor 是 MySQL 官方自带的一款命令行小工具,作用一句话:把账号、密码、主机、端口等连接信息加密存起来,下次连接时只敲一个名字即可,不用再写…

Kubernetes高级调度01

目录 第一章:初始化容器(InitContainer)—— 应用启动前的 “准备军” 1.1 InitContainer 的基本概念与核心特性 1.2 InitContainer 与普通容器的关键区别 1.3 InitContainer 的实战场景与示例解析 1.3.1 示例 1:延迟启动 —…

LSV负载均衡

什么是访问压力?--负载 两个客户同时访问一个服务器,会导致服务器崩溃调度---Cluster集群(为了解决一个特定问题,多台服务器组合使用形成的一个系统)LSV 1、集群Cluster LB:负载均衡,有多个主机…

复习笔记 38

绪论 其实没有一种安稳快乐,永远也不差 专题 2 知识点 继续学数学强化吧?可以。还有概率论要学。还有高数后半部分的数一专项要学。还有政治要学。要学的内容确实还是挺多的啊。加油。下载了一个阅读的软件,可以做一做真题的阅读理解。政治英…

GaussDB like 的用法

1 like 作用在 where 子句中使用 like 运算符来搜索列中的指定模式。 有两个通配符与 like 运算符一起使用:% - 百分号表示零个,一个或多个字符 _ - 下划线表示单个字符注:也同时支持正则表达式。2 like 语法select column1, colu…

单例模式:确保全局唯一实例

单例模式确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景(如配置管理器、数据库连接池)。代码示例:import java.util.stream.IntStream;public class ConfigManager {public static void main(String[] a…

深入理解 QSettings:Qt 中的应用程序配置管理

在开发 Qt 应用程序时,管理应用程序的配置信息是一个常见的需求。无论是保存用户的偏好设置、窗口大小,还是应用程序的运行时配置,都需要一种高效且灵活的方式来存储和检索这些信息。Qt 提供了一个强大的工具——QSettings,它能够…

基于SpringBoot+Vue的体育馆预约管理系统(支付宝沙盒支付、腾讯地图API、协同过滤算法、可视化配置、可视化预约)

“ 🎈系统亮点:支付宝沙盒支付、腾讯地图API、协同过滤算法、可视化配置、可视化预约”01系统开发工具与环境搭建—前后端分离架构 项目架构:B/S架构 运行环境:win10/win11、jdk17前端: 技术:框架Vue.js&am…

<script>标签对HTML文件解析过程的影响以及async和defer属性的应用

在前端开发中&#xff0c;<script> 标签的 async 和 defer 属性会显著影响 JavaScript 脚本的加载和执行时机。下面结合示例代码&#xff0c;详细解析它们之间的区别&#xff1a; 1. 默认情况&#xff08;无 async/defer&#xff09; <script src"script.js"…

Vue.js:从 Web 到桌面的跨端实践与技术选型指南

一、Vue.js 的核心能力边界 作为渐进式 JavaScript 框架,Vue.js 的核心价值在于构建现代 Web 用户界面: ✅ 前端核心场景:单页应用(SPA)、动态交互界面、可复用组件开发 ❌ 架构限制:无法直接改造 B/S(浏览器/服务器)为 C/S(客户端/服务器)架构 关键差异:B/S 依赖浏…

SSRF11 各种限制绕过之DNS rebinding 绕过内网 ip 限制

ssrf漏洞在厂商的处理下可能进行一些特殊处理导致我们无法直接利用漏洞 有以下四种&#xff1a; 1.ip地址限制绕过 2.域名限制绕过 3.30x跳转绕过域名限制 4.DNS rebinding绕过内网ip限制 本章我们讲DNS rebinding 绕过内网 ip 限制 DNS rebinding 绕过内网 ip 限制 假…

FreeRTOS之链表操作相关接口

FreeRTOS之链表操作相关接口1 FreeRTOS源码下载地址2 任务控制块TCB2.1 任务控制块TCB2.1.1 任务控制块的关键成员2.1.2 TCB 的核心作用2.2 ListItem_t2.3 List_t3 函数接口3.1 vListInitialise3.2 vListInitialiseItem1 FreeRTOS源码下载地址 https://www.freertos.org/ 2 …

项目一第一天

目录 总结MySQL&#xff1a; 最终还是得按照SQL的语法来实施。 1、MySQL的数据类型&#xff1a;指业务数据按照什么格式存储在数据库中的。 任何数据类型最常见的三种&#xff1a;字符串、整型和小数型。 如&#xff1a;宝贝计划这种存在视频的项目&#xff0c;你们的视频是存放…

STM32第二十天 ESP8266-01S和电脑实现串口通信(3)

1&#xff1a;透传透传&#xff08;又称透明传输&#xff09;是一种通信模式&#xff0c;其核心特点是&#xff1a;通信设备对传输的数据不做任何解析或处理&#xff0c;仅作为“管道”原封不动地转发数据&#xff0c;仿佛数据“透明”地穿过设备。透传的本质关键特征说明无协议…

微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态

点击此处&#xff0c;了解微服务引擎 MSE 产品详情。