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

news2025/1/17 23:13:45

文章目录

  • 前言
  • 一、同步传输和异步传输
  • 二、UART协议
  • 三、UART硬件结构
    • 1.波特率,数据位,校验位,停止位设置
    • 2.数据发送流程
    • 3.数据接收流程
    • 4.中断控制
  • 总结


前言

本篇文章来给大家讲解一下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 进行数据接收操作。

总结

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

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

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

相关文章

沁恒CH32V30X学习笔记09---使用TIM 外部时钟1模式实现硬件计数

TIM 外部时钟1使用 定时器时钟 通过框图可知;外部时钟1模式下仅仅只有通道1 和通道2 可以输入脉冲 简单示例教程 void TIM1_ETRClockMode1_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_CounterModeConfig(TIM1, TIM_CounterMode_Up)

人工智能|机器学习——基于机器学习的舌苔检测

代码下载: 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔…

Vue的个人笔记

Vue学习小tips ctrl s ----> 运行 alt b <scrip> 链接 <script src"https://cdn.jsdelivr.net/npm/vue2.7.16/dist/vue.js"></script> 插值表达式 指令

unplugin-vue-components解决命名冲突

我们在vue项目中通常会利用unplugin-vue-components插件进行自定义组件的自动引入 注&#xff1a;如果不知道怎么配置unplugin-vue-components插件&#xff0c;欢迎看我整理的这篇&#xff1a; vue3项目配置按需自动引入自定义组件unplugin-vue-components 当出现同名文件时&a…

详解平面点云面积计算

部分代码展示&#xff1a; &#xff08;1&#xff09;利用格网法计算面积&#xff1a; //&#xff08;2&#xff09;测试使用格网法计算平面点云面积 void main() {char *inputpath "D:\\testdata\\data.txt";vector<pcl::PointXYZ> points ReadPointXYZIn…

TRS 2024 论文阅读 | 基于点云处理和点Transformer网络的人体活动连续识别

无线感知/雷达成像部分最新工作<持续更新>: 链接地址 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学…

百年明牌门业入围2024中国别墅门十大品牌榜单

一年一度的中国别墅门十大品牌网络评选活动圆满的落下帷幕。来自浙江的“百年明牌”凭借自身优异的产品品质&#xff0c;以及极佳的市场口碑&#xff0c;强势入围2024中国别墅门十大品牌榜单。 武义誉鑫安防科技有限公司坐落于素有“中国五金之都”和“中国门都”之称的永康市&…

阿里云幻兽帕鲁Windows 服务器怎么下载存档?

阿里云幻兽帕鲁Windows 服务器怎么下载存档&#xff1f;通过远程连接window服务器桌面的方式。 远程连接到阿里云的 Windows 服务器后&#xff0c;可以将压缩后的存档文件&#xff0c;拖动到 workbench\Download 目录后&#xff0c;就会触发浏览器的文件下载&#xff0c;然后将…

电子防潮柜如何应对潮湿问题?

智能化时代的到来&#xff0c;让电子产品成为人们生活中的必需品&#xff0c;电子产品对存储环境的要求非常高。潮湿会产生发霉、生锈、氧化、腐蚀、变形等现象&#xff0c;缩短了电子产品的寿命。绝大部分电子产品都要求在清洁低湿干燥的环境中存放&#xff0c;环境中的温湿度…

企业微信会话存档是什么?

在当今数字化时代&#xff0c;企业对于信息管理和数据保存的需求日益增强。 企业微信&#xff0c;作为一款专为企业打造的即时通讯工具&#xff0c;不仅提供了高效的内部沟通机制&#xff0c;还通过其会话存档功能&#xff0c;为企业的数据安全和合规性提供了有力保障。 那么&…

代码随想录算法训练营29期|day55 任务以及具体安排

第九章 动态规划part12 309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {//0代表持股票&#xff0c;1代表保持卖出状态&#xff0c;2代表卖出股票。3代表冷冻int[][] dp new int[prices.length][4];dp[0][0] -prices[0];for(int i 1 ; …

Android EditText关于imeOptions的设置和响应

日常开发中&#xff0c;最绕不开的一个控件就是EditText&#xff0c;随之避免不了的则是对其软键盘事件的监听&#xff0c;随着需求的不同对用户输入的软键盘要求也不同&#xff0c;有的场景需要用户输入完毕后&#xff0c;有一个确认按钮&#xff0c;有的场景需要的是回车&…

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一&#xff1a;Volume 命令操作方式二&#xff1a;-v 或者--mount 指定方式三&#xff1a;Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…

提升VR全景摄影画质的8个因素

如今VR全景拍摄的门槛已经很低&#xff0c;包括无人机、全景相机等都具有一键全景的功能。很多初次接触VR全景拍摄的朋友会发现同样的设备&#xff0c;为啥拍出来的效果就不如别人呢&#xff1f; 其实&#xff0c;要提升VR全景拍摄质量&#xff0c;只需要了解以下几个环节&…

聚观早报 | 比亚迪秦PLUS荣耀版上市;任天堂成日本最富有公司

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 2月20日消息 比亚迪秦PLUS荣耀版上市 任天堂成日本最富有公司 理想汽车2024春季发布会 真我12 Pro系列国内官宣 …

leetcode 105. 从前序与中序遍历序列构造二叉树【构造二叉树】

原题链接&#xff1a;105. 从前序与中序遍历序列构造二叉树 题目描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 输入输出描述&…

数据采集三防平板丨三防平板电脑丨停车场应用

随着现代科技的不断发展&#xff0c;三防平板已经成为许多人工作和生活的必备工具。在停车场这个场景中&#xff0c;三防平板的应用可以大大提高停车场管理的效率和安全性。 停车场是现代城市交通管理的重要组成部分&#xff0c;它直接关系到城市交通的流畅和公共安全。停车场…

PostgreSQL的checkpointer进程

bgwriter与checkpointer进程对比 bgwriter进程与checkpointer进程&#xff0c;虽然都会写出脏页&#xff0c;但是刷脏的目的、频率、控制参数等&#xff0c;都有不同&#xff0c;以下是两则的区别&#xff1a; 区别bgwriter进程checkpointer进程当前&#xff0c;该进程刷脏的…

Itext生成pdf文件,html转pdf时中文一直显示不出来

之前使用freemark模板渲染ftl页面,转出的pdf中&#xff0c;css2有些样式好像不支持&#xff0c;比较常用的居中样式都没有效果&#xff0c;text-align:center 改造成使用html页面来转pdf&#xff0c;css2的样式可以生效,itext是不支持css3的弹性布局的ITextRenderer pdfRendere…

【C++】---类和对象(下)初始化列表、explicit、匿名对象、友元

一、再谈构造函数 注意&#xff1a;构造函数体内是赋值&#xff0c;不是初始化&#xff01;&#xff01;&#xff01; class Date { public: Date(int year, int month, int day){_year year;_month month;_day day;} private: int _year; int _month; int _day; };1.为什…