江协stm32学习:9-1~9-3 USART串口协议与外设

一、串口通信基础知识

1、通信类型

  • 全双工通信:通信双方能够同时进行双向通信。一般有两根通信线,如USART中的TX(发送)和RX(接收)线,SPI中的MOSI(发送)和MISO(接收)线。发送线路和接收线路互不影响,可实现高效的数据传输。

  • 单工通信:数据只能从一个设备传输到另一个设备,不能反过来传输。这种方式应用较少,通常用于一些特定的单向数据流场景。(I2C,CAN和USB的两根差分线也是组合成为一根数据线的,接收和发送会相互干扰)

2、同步与异步通信

  • 同步通信:通信双方使用同一个时钟信号进行数据传输,发送方和接收方共享一个公共的时钟源,所有的数据传输都严格地按照这个时钟信号的节奏进行。常见的同步通信接口有I2C和SPI,它们都具有专门的时钟线,数据的采样在时钟信号的指引下进行,确保数据传输的同步性和准确性。

  • 异步通信发送方和接收方使用各自的独立时钟进行数据传输,双方的时钟信号并不需要严格地保持同步。数据的发送和接收主要依靠数据帧中的起始位和停止位来标识数据的开始和结束,接收方通过检测这些控制位来对数据进行同步和识别。USART通常工作在异步模式下,适用于对实时性要求不高的场景。

I2C和SPI有自己时钟线所以是同步,可以在时钟信号的指引下进行采样,其余没有所以使用异步,需要双方约定一个采样频率,并且还需要加一些帧头帧尾等来进行采样位置的对齐。

3、电平

单端 & 差分单端电平表示它们的引脚的高低电平都是对GND的电压差,双方都是公地的就是把GND接在一起;差分电平是靠差分引脚的电压差来传输信号的,可以不需要GND(USB协议里面有一部分还是需要用到单端信号的),所以可以极大地提高抗干扰特性,故而差分信号一般传输速度和距离都会非常高

4、点对点与多设备通信

  • 点对点通信:一对一,两个设备之间直接建立通信链路,连接简单,通信效率高,可靠性高。

  • 多设备通信:可以在总线上挂载多个设备,实现多对多的数据传输。

二、硬件电路连接

1、基本连接规则

  • 电源连接:除非两个设备都具有自己的独立供电系统,否则需要将VCC连接在一起,以确保通信双方的电源电压一致,保证信号的正确传输。

  • 地线连接:为了提供稳定的参考电平,减少干扰,必须将两个设备的GND连接在一起,尤其是在使用TTL、RS-232等单端电平时,地线的连接尤为重要。

  • 信号线连接:在全双工通信中,需要两根信号线,发送端TX与接收端RX要交叉连接,即设备1的TX连接到设备2的RX,设备1的RX连接到设备2的TX。如果是单向数据传输,可以只接一根通信线。

2、电平转换

当通信双方的电平标准不一致时,需要增加电平转换芯片来进行转换。

  • TTL电平:+3.3V或+5V表示逻辑1,0V表示逻辑0。TTL电平常见于单片机等数字电路中,具有传输速度快的特点,但抗干扰能力相对较弱,传输距离较短,一般只有几米。(单片机中使用这种)

  • RS-232电平:-3V至-15V表示逻辑1,+3V至+15V表示逻辑0。RS-232电平具有较强的抗干扰能力,适合在较为恶劣的环境中使用,如一些大型机器的通信接口,其传输距离一般可达十几米到几十米。

  • RS-485电平:两线压差+2V至+6V表示逻辑1,-2V至-6V表示逻辑0,属于差分信号。RS-485电平的抗干扰能力非常强,传输距离可达到几千米,适用于长距离、高可靠性要求的通信场景。

三、USART结构与工作原理

1、USART简介

  • USART(Universal Synchronous/Asynchronous Receiver/Transmitter),即通用同步/异步收发器,是STM32内部集成的硬件外设。它可以根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
    USART:同步;UART:异步。同步模式只多出时钟输出功能,输入不支持,主要是为了兼容其他协议或者特殊用途而设置,并不支持两个USART之间进行同步通信,所以一般还是使用异步模式
    USART就是串口通信的硬件支持电路,配置好后,直接读写数据寄存器就能自动发送和接受数据了

  • USART支持多种功能配置,包括可配置的数据位长度(8位或9位)、停止位长度(0.5位、1位、1.5位或2位)、可选的校验位(无校验、奇校验或偶校验),以及支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN等多种通信模式。
    硬件流控制:只有在接受设备准备好时才传输数据;IrDA用于红外通信;LIN:局域网

  • STM32F103C8T6具有USART1、USART2和USART3三个USART资源
    USART1:APB2总线上设备;USART2、USART3:APB1总线上设备

2、串口参数:

串口发送一个字节的格式是串口协议规定的,串口中,每一个字节都装载在一个数据帧里面。每个数据为都由起始位、数据位和停止位组成(一共8个),还可以在后面加一个奇偶校验位(共9个)

空闲状态是高电位,所以需要把起始位置0来打破空闲状态,最后的时候得回复来为下一帧做准备,所以结尾停止位高电平恢复。
数据位的低位先行就是说如果你实际数据是00001111,那么传输的顺序就是11110000。
校验位判断是否数据传输错误,有无校验、奇校验、偶校验三种。奇校验是校验位来保证1的个数为奇数,偶数反之。but这个校验实际上检出率不高,CRC校验更好虽然也更复杂

3、USART寄存器

  • 数据寄存器(DR):TDR和RDR在程序上只表现为一个寄存器:数据寄存器DR(Data Register)

    • USART数据寄存器(USART_DR)只有低9位有效,第9位数据是否有效取决于USART控制寄存器1(USART_CR1)的M位设置。当M位为0时,表示8位数据字长;当M位为1时,表示9位数据字长。

    • USART_DR包含了已发送的数据或者接收到的数据。发送数据时,往USART_DR写入数据会自动存储在发送数据寄存器(TDR)内;接收数据时,向USART_DR读取数据会自动提取接收数据寄存器(RDR)数据。

    • TDR和RDR介于系统总线和移位寄存器之间。发送时,TDR中的数据转移到发送移位寄存器,然后逐位发送;接收时,接收到的位顺序保存在接收移位寄存器内,再转移到RDR。

  • 移位寄存器

    • 发送移位寄存器和接收移位寄存器用于数据的逐位发送和接收。发送时,TDR中的数据转移到发送移位寄存器,然后逐位发送出去;接收时,接收到的每一位顺序保存在接收移位寄存器内,接收完成后转移到RDR。

    • 通过TDR和移位寄存器的两重缓存机制,可以在保证数据传输正确率的情况下,使数据帧之间没有空闲时间,提高通信效率。

4、USART控制

  • 发送器控制和接收器控制

    • 发送器控制和接收器控制用于管理移位寄存器的工作。发送使能位(TE)和接收使能位(RE)分别控制发送和接收功能的启用和禁用。TE为1时,发送器使能;RE为1时,接收器使能。

  • 硬件流控制

    • 硬件流控制用于控制数据传输速度,防止数据溢出和丢失。主要包括nRTS(请求发送)和nCTS(清除发送)两个引脚。

    • nRTS是输出引脚,低电平有效。当USART接收器准备好接收新数据时,nRTS引脚变为低电平;当接收寄存器已满时,nRTS引脚变为高电平。

    • nCTS用于接收别人的nRTS信号。发送器在发送下一帧数据之前会检测nCTS引脚,如果为低电平,表示可以发送数据;如果为高电平,则在发送完当前数据帧之后停止发送。

5、同步时钟(SCLK)& 唤醒单元

  • 同步时钟:SCLK引脚用于同步模式下的时钟输出。在同步模式下,发送器每移位一次,SCLK引脚的电平就跳变一个周期,用于同步数据传输。SCLK引脚的时钟属性可以通过USART时钟初始化结构体进行配置,包括时钟极性、时钟相位和最尾位时钟脉冲等。

  • 唤醒单元:唤醒单元允许USART在低功耗模式下通过接收数据唤醒MCU,适用于需要长时间待机或低功耗运行的设备。

6、标志位

  • 发送寄存器空标志位(TXE):表示发送数据寄存器(TDR)是否为空。当TDR为空时,TXE位为1,表示可以继续写入新的发送数据。通过检测TXE标志位,可以实现高效的数据发送流程,避免数据溢出和等待时间。
  • 接收数据非空标志位(RXNE):表示接收数据寄存器(RDR)是否非空。当接收完成并将数据转移到RDR后,RXNE位为1,表示可以读取接收到的数据。检测RXNE标志位后,可以及时读取数据,避免数据丢失和延迟。
  • 传输完成标志位(TC):TC标志位表示数据传输是否完成。当发送器完成最后一帧数据的发送后,TC位为1,表示数据传输完成。如果USART_CR1寄存器的TCIE位置1,将产生中断,通知CPU进行后续处理。

7、起始位侦测

输入的时候需要保证采样点在每一帧的中间位置,而且最好对于噪声有一定的判断能力

当输入电路侦测到一个数据帧的起始位后,就会以波特率的频率,连续采样一帧数据,同时从起始位开始,采样位置就要对齐到位的正中间,只要第一位对齐了,后面就肯定都是对齐的。

输入电路采用16倍波特率对时钟进行细分,即每位数据可进行16次采样。初始空闲状态为高电平时,采样值始终为1。当出现下降沿时,采样值会由1变为0,此时若无噪声干扰,即表示检测到起始位。在起始位期间,理论上16次采样结果都应保持0值。

考虑到实际电路可能存在噪声干扰,接收电路会在下降沿后采取额外校验措施:分别在第3、5、7次和第8、9、10次采样点进行两批次验证。每批次需满足"3取2"原则(即3次采样中至少有2次为0)才能确认起始位有效。若完全无噪声,采样结果应全为0;若存在轻微噪声导致某批次出现2个0和1个1,系统仍会判定起始位有效,但会在状态寄存器设置噪声标志位(NE);若仅检测到1个0,则认为下降沿由噪声引起,系统将重新开始检测。

通过起始位检测后,接收状态由空闲转为接收起始位状态。值得注意的是,第8、9、10次采样点正好位于起始位中间位置,后续数据位的采样也将在此位置进行,确保采样点始终位于数据位中心。这一设计既实现了起始位检测,又保证了采样位置的对齐。

USART的起始位检测需要用到特定序列。如果在RX线识别到该特定序列就认为是检测到了起始位。起始位检测对使用16倍或8倍过采样的序列都是一样的。该特定序列为:1110X0X0X0000,其中X表示电平任意,1或0皆可。

8、USART引脚

  • TX引脚:发送数据输出引脚,用于将数据从STM32发送到外部设备。

  • RX引脚:接收数据输入引脚,用于从外部设备接收数据到STM32。

  • nRTS引脚:请求发送引脚,低电平有效,用于硬件流控制。当USART接收器准备好接收新数据时,nRTS引脚变为低电平;当接收寄存器已满时,nRTS引脚变为高电平。

  • nCTS引脚:清除发送引脚,低电平有效,用于硬件流控制。发送器在发送下一帧数据之前会检测nCTS引脚,如果为低电平,表示可以发送数据;如果为高电平,则在发送完当前数据帧之后停止发送。

  • SCLK引脚:同步模式下的时钟输出引脚,用于同步数据传输。

USART框图 这个关于USART框图的分解不错

四、USART工作流程

1、发送流程

  1. 配置USART_CR1寄存器的TE位置1,使能发送器。

  2. 往USART_DR寄存器写入要发送的数据,数据自动存储在TDR内。

  3. TDR中的数据转移到发送移位寄存器,然后逐位发送出去。

  4. 发送完成后,发送移位寄存器将数据发送完成标志位(TC)置1,表示传输完成。如果USART_CR1寄存器的TCIE位置1,将产生中断,通知CPU进行后续处理。

2、接收流程

  1. 配置USART_CR1寄存器的RE位置1,使能接收器。

  2. 接收器检测RX引脚上的起始位,开始接收数据。

  3. 接收到的数据逐位存入接收移位寄存器,接收完成后转移到RDR,并将RXNE标志位置1。

  4. 检测到RXNE标志位后,可以读取USART_DR寄存器中的数据。如果USART_CR2寄存器的RXNEIE置1,则会产生中断,通知CPU读取数据。

3、波特率发生器

波特率发生器相当于一个分频器,用于生成USART的发送和接收时钟。USART1的时钟源为72MHz,USART2和USART3的时钟源为36MHz。波特率计算公式如下:

波特率=USARTDIV×16时钟源频率​

其中,USARTDIV是分频系数,通过配置USART_BRR寄存器来设置。例如,配置9600波特率时,USARTDIV的值可以通过以下公式计算:

USARTDIV=波特率×16时钟源频率​

配置完成后,将计算得到的USARTDIV值写入USART_BRR寄存器。

五、USART的应用场景

  • 与电脑通信:通过USART接口,STM32可以与电脑进行数据交互,方便进行调试、参数设置和数据监控等工作。例如,将采集到的传感器数据发送到电脑进行显示和分析,或者接收电脑发送的控制指令来控制STM32的工作状态。

  • 与传感器或模块通信:许多传感器和模块都支持USART通信接口,如温湿度传感器、蓝牙模块、Wi-Fi模块等。STM32可以通过USART与这些设备相连,实现数据的采集和传输,从而构建各种智能系统和物联网应用。

  • 设备间通信:在一些工业控制系统或机器人系统中,多个STM32或其他微控制器之间可以通过USART进行通信,实现数据共享和协同工作。

六、USART通信的注意事项

  1. 硬件连接正确性:确保通信双方的VCC、GND、TX和RX引脚正确连接,避免接错线导致通信失败或损坏设备。

  2. 通信参数一致性:通信双方的波特率、数据位、校验位和停止位等参数必须配置一致,否则会导致数据传输错误。

  3. 抗干扰措施:在长距离或恶劣环境下通信时,尽量使用差分电平(如RS-485)以提高抗干扰能力,或者采取屏蔽、滤波等措施减少干扰。

  4. 数据完整性校验:除了硬件提供的校验位外,还可以在软件层面添加数据校验机制,如CRC校验等,以进一步提高数据传输的可靠性

代码部分见下一篇文。

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

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

相关文章

深度学习中的一些名词

向前传播 forward pass 在机器学习中,输入的feature, 通过预测模型,输出预测值,此过程称之为向前传播; 向后传播 backward pass 为了将预测与真实值的产值减小,需要根据差值,更新模型中的参数,此…

鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)

项目概述 基于鸿蒙(OpenHarmony)平台开发的手势密码锁应用,旨在为用户提供安全、便捷且具有良好交互体验的身份验证方式。通过手势图案输入,用户可以轻松设置和验证密码,提升设备的安全性和个性化体验。 功能特点 手…

vue文本插值

好的,我们来详细讲解 Vue 中最基础的数据展示方式:文本插值和在其内部使用的 JavaScript 表达式。 1. 文本插值 (Text Interpolation) 知识点: 文本插值是 Vue 中最基本的数据绑定形式。它使用“Mustache”语法(双大括号 {{ }})…

Python:线性代数,向量内积谐音记忆。

目录1 先说结论2 解释3 欢迎纠错4 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、…

小程序导航设置更多内容的实现方法

在小程序中实现导航栏设置更多内容,可以通过以下几种方式实现: 1. 使用原生导航栏自定义按钮 javascript // app.json 或页面.json中配置 {"navigationBarTitleText": "首页","navigationBarTextStyle": "black&q…

SpringBoot 解决配置文件有黄色波浪线

在application.properties配置文件中有黄色波浪线,是警告!! 原因:编码格式不一致!! 解决:Settings| Editor | File Encodings | 选择UTF-8

在 Vue 3 中全局使用 Suspense 组件

Suspense 是 Vue 3 引入的一个内置组件,不需要引用可以直接用。用于处理异步依赖的等待状态。虽然 Suspense 主要用于异步组件,但你也可以全局地使用它来管理整个应用的加载状态。 全局 Suspense 的基本用法 1. 在根组件中使用 Suspense // main.js 或…

笔记/计算机网络

Content 计算机网络部分核心概念十大网络协议一览 计算机网络部分核心概念 1. 什么是计算机网络?它最基本的功能是什么? 计算机网络是指通过某种传输介质将多台独立的计算机或设备连接起来,实现数据交换和资源共享的系统。其最基本的功能是数…

时频图数据集更正程序,去除坐标轴白边及调整对应的标签值

当数据集是时频图时可能有一个尴尬的问题,就是数据集制作好后,发现有白边。 其实这也不影响训练模型,可能对模型训练效果的影响也是微乎其微的,于是大多数情况我会选择直接用整张图片训练模型。但是,有的情况下&#x…

mv重命名报错:bash:未预期的符号 ‘(‘附近有语法错误

文章目录 一、报错背景二、解决方法2.1、方法一:文件名加引号2.2、方法二:特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下: aa (1).txt执行命令及报错如下…

Unity-MMORPG内容笔记-其三

继续之前的内容: 战斗系统 无需多言,整个项目中最复杂的部分,也是代码量最大的部分。 属性系统 首先我们要定义一系列属性,毕竟所谓的战斗就是不断地扣血对吧。 属性系统是战斗系统的核心模块,负责管理角色的所有…

Linux入门篇学习——Linux 帮助手册

目录 一、Linux 帮助手册 1.怎么打开帮助手册 2.安装依赖 3.使用手册查看命令 一、Linux 帮助手册 1.怎么打开帮助手册 打开 ubuntu ,输入 man 命令打开帮助手册,直接在控制台输入 man 就可以了, man 手册一共有 9 页&#xff0c…

2025年后端主流框架对比和竞争格局及趋势发展

2025年的后端开发呈现出云原生主导、性能革命、AI深度融合的技术格局,主流框架在细分领域持续分化,新兴技术快速渗透关键场景。以下是基于行业实践与技术演进的深度解析: 一、主流框架竞争态势与核心能力 1. Java生态:企业级市场的…

bRPC简介

bRPC基础介绍。 什么是RPC? 互联网上的机器大都通过TCP/IP协议相互访问,但TCP/IP只是往远端发送了一段二进制数据,为了建立服务还有很多问题需要抽象: 数据以什么格式传输?不同机器间,网络间可能是不同的字节序&am…

力扣网C语言编程题:在数组中查找目标值位置之二分查找法

一. 简介 上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下: 力扣网C语言编程题:在数组中查找目标值位置之暴力解法-CSDN博客 本文使用二分查找法进行实现,因为二分查找法符合题目要求&#xff0…

前端查询条件加密传输方案(SM2加解密)

一、需求背景 控台项目甲方进行安全测试,测试报告其中一条:敏感信息明文传输 1 敏感信息明文传输 中危 查询接口传输手机号、银行卡号等敏感信息时未加密/脱敏处理。 二、解决方案 讨论出的方案是通过前端查询条件加密,后端对加密的…

【Python】Flask网页

Flask第三方库安装命令:pip install flask代码:from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

数字资产革命中的信任之锚:RWA法律架构的隐形密码

首席数据官高鹏团队律师创作,AI辅助 在数字经济的浪潮中,资产的边界正在被重新定义。当一块地产、一笔应收账款、甚至一份碳配额被转化为链上的数字代币时,技术的光芒固然耀眼,但真正决定其生命力的,是背后隐匿的“信…

mobaxterm终端sqlplus乱码问题解决

背景。使用mobaxterm终端连接linux。在查询数据库表注释时发现**?**中文乱码。影响对表的分析。完成以下三个编码设置再打开sqlplus查询含中文的数据就正常了 总结。需要查看sqlplus的编码是什么 SELECT parameter, value FROM nls_database_parameters WHERE pa…

一个简单的分布式追踪系统

1. 准备工作 导入必要的库 import contextvars import time from typing import Any, Optional, Dict, List, Union from dataclasses import dataclass, field2. 定义上下文变量 # 定义两个上下文变量,存储当前 Span 和 Trace _current_span: contextvars.Conte…