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.多线程的功能和作用主要包括: 提高程序的并发性和效率:多线程可以同时执行多个任务,不同的线程可以同时读写不…

代码随想录Day56 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

代码随想录Day56 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 300.最长递增子序列674.最长连续递增序列718.最长重复子数组 300.最长递增子序列 文档讲解:代码随想录 视频讲解: 动态规划之子序列问题,元素不连续&#x…

大处着手、大小结合!现货黄金短线趋势如何判断?

现货黄金以交易灵活而著称,但是投资者发现,现货黄金的短期行情是多变的,要捕捉到现货黄金短期趋势其实也不容易。下面我们就来讨论一下判断现货黄金短线趋势的方法,这个方法的关键在于“大小结合”。 大指的是基本分析。很多投资者…

【leetcode】贪心算法介绍

详细且全面地分析贪心算法常用的解题套路、数据结构和代码逻辑如下: 找最值型: 每一步选择都是局部最优解,最后得到的结果就是全局最优解。常用于找零钱问题、区间覆盖问题等。一般情况下,可以通过排序将数据进行处理,…

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

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

【机器学习笔记】13 降维

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

python opencv学习路线

目录 一:模块简介 二:图像读取 三:图像处理 四:图像识别

vue3总结

1 setup 概述 setup是Vue3中一个新的配置项个函数, 包含数据、方法等,是组合api的“舞台”。 特点如下: setup函数返回的对象中的内容,可直接在模板中使用。setup中访问this是undefined。setup函数会在beforeCreate之前调用,它…

新版本cesium的注意点

之前基于1.99版本写了一套插件,最近想替换成目前的新版本(114),发现有很多写法都不能用了,这里做一下记录。 100版本发布了cesium/engine,cesium/widgets,引用方式上就会有些变化;1…

conda 所有的命令及其讲解

Conda 是一个开源的包管理器和环境管理器,可以用于安装、运行和升级跨平台的软件包和环境。Conda 很流行于数据科学、机器学习、科学计算等领域,因为它能够快速地安装、管理和部署软件包和环境。以下是 Conda 的一些主要命令及其简要说明: 环…

【Linux】git操作 - gitee

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

React 中的类组件

组件分为内置原生组件和自定义组件 内置组件p h1 span type字符串自定义组件 类型是一个 函数 ,类组件的父类Component的原型上有一个属性 isReactComponent{} 自定义组件的名称必须是大写字母开头 自定定组件的返回值有且只能一个根元素 import React from ./react; import …

教师专业发展的五个阶段

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

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

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

IP显示地址与实际地址不一致,你知道为什么吗?

在数字化时代,IP地址作为网络世界中的“身份证”,其重要性不言而喻。然而,有时我们可能会遇到这样一个现象:IP显示地址与实际地址不一致。这究竟是怎么一回事呢?虎观代理小二二将带您一起探究这一现象背后的原因。 1、…

nacos用作注册中心

nacos除了用作配置中心,即可以将配置信息由配置文件转移到nacos上,更便于修改和维护外,更重要的,是用作微服务的注册中心。没有这类中间件,微服务玩不转。 微服务架构也者,就是有好多好多的微服务&#xf…

调用接口时不时出现 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路由器具备低时延…

CF1172A Nauuo and Cards 题解 贪心

Nauuo and Cards 传送门 Nauuo is a girl who loves playing cards. One day she was playing cards but found that the cards were mixed with some empty ones. There are n n n cards numbered from 1 1 1 to n n n, and they were mixed with another n n n empty…