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

文章目录

  • 前言
  • 一、同步传输和异步传输
  • 二、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.mzph.cn/news/691647.shtml

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

相关文章

QT多线程应用及代码示例

一.多线程的原理和功能 1.多线程(multithreading)是指从软件或者硬件上实现多个线程并发执行的技术。 2.多线程的功能和作用主要包括: 提高程序的并发性和效率:多线程可以同时执行多个任务,不同的线程可以同时读写不…

腾讯云助力酒店IT系统上云,实现出海业务的双重优势

潮起潮涌,随着时代浪潮的翻涌,生活处处可见是巨大的变化,衣食住行都有了更多更大的需求,出门旅游观赏当地风景品尝特色美食的前提是要住好,只有休息好了才有更多的精力去游玩。酒店系统的升级上云让登记变得更加便捷&a…

【机器学习笔记】13 降维

降维概述 维数灾难 维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。在很多机器学习问题中,训练集中的每条数据经常伴随着上千、甚至上万个特征。要处理这…

【Linux】git操作 - gitee

1.使用 git 命令行 安装 git yum install git 2.使用gitee 注册账户 工作台 - Gitee.com 进入gitee,根据提示注册并登录 新建仓库 仓库名称仓库简介初始换仓库 3.Linux-git操作 进入仓库,选择“克隆/下载” 复制下面的两行命令进行git配置 然后将仓库clo…

教师专业发展的五个阶段

每当人们谈论教师,总会联想到“传道授业解惑”的崇高形象。但教师的专业成长,绝非一蹴而就。今天,就让我们一起探秘教师专业发展的五个阶段,看看一位普通教师是如何历练成为教育行家的。 阶段一:新手摸索期 初入教育行…

走进科学系列之遭遇鬼打墙的OUTLOOK

网管小贾 / sysadm.cc 正值春运,车站里熙熙攘攘、人头攒动。 鲍勃和约瑟夫正在候车室,等待检票。 “嗨!约瑟夫!快来看看,我的电脑出问题了!” “得了吧,马上就要检票上车了,你就不…

调用接口时不时出现 Error: socket hang up

项目场景: 提示:这里简述项目相关背景: 今天采用golang创建了一个http服务,准备对若干接口进行测试。 问题描述 提示:这里描述项目中遇到的问题: 在测试第一个接口时,发现采用postman调用接口…

Ansible yum模块 主要用于软件安装

目录 选项 实例 安装一个tree实例卸载一个 tree 选项 name   #所安装的包的名称 state  #present—>安装, latest—>安装最新的, absent—> 卸载软件。 update_cache  #强制更新yum的缓存 conf_file  #指定远程yum安装时所依赖的配置文件&…

5G车载路由器引领无人驾驶车联网应用

随着无人驾驶技术的不断发展,车联网正逐渐成为实现智能交通的重要组成部分。5G车载路由器将在车联网的应用中起到至关重要的作用,它能够满足无人驾驶应用的低时延、高速率和实时控制等需求,进一步推动无人驾驶车联网技术。 5G路由器具备低时延…

从 AGP 4.1.2 到 7.5.1——XmlParser、GPathResult、QName 过时

新年首发, 去年的问题,今年解决~ 问题 & 排查 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task :app:processCommonReleaseManifest. > org.xml.sax.SAXParseException; lineNumber: 1; columnNu…

【申请体验Sora】OpenAI Red Teaming Network application

网址:https://openai.com/form/red-teaming-network 使用Gmail , 国家选美国 两个问题: Why are you interested in joining the OpenAI Red Teaming Network? I’m eager to experience the powerful allure of Sora, which I believe wi…

postgresql 文件结构(一) 数据库、表对应的文件

1、问题 甲方要求提供数据库数据量大小,由于各个业务数据库共用一个postgres,因此想把每个数据库占用的空间都统计一下。 2、查找物理存储文件目录 如下图所示,可以查询表、库的物理存储文件名称 -- 查询表对应的文件 select oid,relname…

leetcode 01背包问题

典型的01背包问题可以暴力求解,直接将所有可能全部遍历然后挑选符合条件的即可,但这样时间复杂度过高,有2的n次方。 所以我们在这里采用动态规划的方式来做,并且,我们可以采用二维数组或者一维数组来做。 二维数组&a…

供水管网管道爆管事故发生原因及控制措施

经济的快速发展及城镇化的不断推进使得我国的城镇数量及规模都在不断地扩大。供水系统是城镇基础设施中 的重要的一环。现今在我国各城市中已经建立了相对完善的城市供水管网体系。但是在供水管网运行过程中爆管问题时 有发生,从而对城市用水的正常供应以及民众的正…

Redis 缓存(Cache)

什么是缓存 缓存(cache)是计算机中的一个经典的概念在很多场景中都会涉及到。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方,方便随时读取。 这里所说的“触手可及”是个相对的概念 我们知道,对于硬件的访问速度来说,通常…

vue3实现瀑布流布局组件

先看效果图 直接上代码 utils.js // 用于模拟接口请求 export const getRemoteData (data 获取数据, time 2000) > {return new Promise((resolve) > {setTimeout(() > {console.log(模拟获取接口数据, data)resolve(data)}, time)}) }// 获取数组随机项 export…

给label-studio 配置sam(segment anything)ml 记录

给label-studio 配置sam(segment anything)ml 后端记录 配置ml后台下载代码下载模型文件创建环境模型转换后端服务启动 配置label-studio 前端配置模型后端连接配置标注模板标注界面使用 参考链接 配置ml后台 下载代码 git clone https://github.com/H…

AT24C02(I2C总线)通信的学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、存储器介绍二、AT24C02芯片二、I2C总线I2C电路规范I2C时序结构I2C数据帧AT24C02数据帧 总结 前言 学习AT24C02(I2C总线)芯片 一、存储器介绍 RAM&#xf…

QT-地形3D

QT-地形3D 一、 演示效果二、关键程序三、下载链接 一、 演示效果 二、关键程序 #include "ShaderProgram.h"namespace t3d::core {void ShaderProgram::init() {initializeOpenGLFunctions();loadShaders(); }void ShaderProgram::addShader(const QString &fil…

计算机二级C语言的注意事项及相应真题-5-程序修改

目录 41.累加链表结点数据域中的数据作为函数值返回42.根据整型形参m,计算如下公式的值43.删除数列中值为x的元素44.从N个字符串中找出最长的那个串,并将其地址作为函数值返回45.将两个长度相等的纯数字字符串当作两个加数,求其代表的数值之和…