STM32——USART原理及应用

news2024/11/26 19:41:14

1.什么是USART?

1.1 基本概念

USART英文全称:universal asynchronous receiver and transmitter ,翻译过来就是:通用同步异步收/发器USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX(Transmit Exchange)引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。简单来说USART就是一个STM32的外设,用于设备之间传输数据,常见的通信外设还有IIC、SPI等。

1.2 USART实物图

1.3USART简约框图

  1. TX(Transmit)传输线路,负责发送数据。连接到其他设备的接收端

  2. RX(Receive)接收线路,负责接收数据。连接到其他设备的发送端

  3. GND(Ground):地线,电路的公共参考点,确保信号的正常传输和电路的正常工作

  4. VCC:电源输入,提供电源给USART模块或相关的电路设备,通常是正电压(如5V或3.3V)

1.5USART发送接收方式

可以通过触发中断发送接收

可以利用DMA搬运发送接收

2.USART硬件部分

2.1USART外设

1.自带波特率发生器,最高达4.5Mbits/s

2.可配置数据位长度(8/9)停止位长度(0.5/1/1.5/2)

3.可选校验位(无校验/奇校验/偶校验)

4.支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

5.支持DMA

6.数据传输是低位先行

7.USART通信:异步、全双工通信

8.支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

        什么是硬件流控制?-- 硬件流控制:比如A设备有个TX向B设备的RX发送数据,A设备发送的快,B设备处理不过来,如果没有硬件流控制,那么B设备只能抛弃新数据或者覆盖原来的数据,如果有硬件流控制,在硬件电路上,会多出一根线,如果B设备没准备好接收,就置高电平,如果准备好了,就置低电平。A接受了B反馈的信号,就只会在B准备好的时候,才发送数据;如果B没准备好,数据就不会发送出去。这就是硬件流控制,可以防止因为B处理慢而导致数据丢失问题。

注:UART只有异步传输功能,所以没有SCLK、nCTS、nRTS功能引脚(这是UART与USART的区别

2.USART框图

USART框图非常重要,掌握USART框图,就能比较深入的理解USART的工作原理

1线路是USART接收数据的流程:数据从RX接收数据引脚进入→接收移位寄存器(该寄存器的作用是将数据一位一位的移到接收数据寄存器RDR中),利用USART_ReceiveData()函数可以直接读取出接收数据寄存器RDR的数据。

2线路是驱动接收移位寄存器工作:RE→接收控制器→接收移位寄存器

3线路是USART发送数据的流程:数据从发送数据寄存器TDR→发送移位寄存器→TX发送引脚

利用USART_SendData()函数可以将要发送的数据放在TDR发送寄存器中

4线路是驱动发送移位寄存器工作:TE→发送控制器→发送移位寄存器

5与6(TXEIE、RXNEIE)分别是使能发送中断使能、接收中断使能

7(TE、RE)分别是发送使能、接收使能

8与9(TXE、RXNE)分别是发送寄存器空、接收寄存器非空,这两个事件均可申请进入USART中断

发送寄存器空:表明发送寄存器空闲,可通知MCU向TDR写入数据

接收寄存器非空:表明已经接收到了数据,进入中断后可通知MCU读取RDR里的数据

注:发送数据寄存器TDR,接收数据寄存器RDR,这两个寄存器占用同一个地址,在程序上只表现为一个寄存器,就是数据寄存器DR。但实际硬件中是分成了两个寄存器

SW_RX  IRDA_OUT IRDA_IN是只能卡与lrDA通信的引脚。 

3.USART软件部分

3.1USART基本参数

波特率:串口通信的速率(如:规定每隔1ms发送1位等)每秒传送码元的个数。

决定了每隔多久发送一位。

起始位:标志一个数据帧的开始,固定为低电平(空闲时为高电平)

•数据位:数据帧的有效载荷,1电平,0电平,低位先行

•校验位:用于数据验证,根据数据位计算得来

停止位:用于数据帧间隔,固定为高电平

3.2USART串口时序图

3.3USART结构体详解

USART初始化的结构体一般用来配置:USART传输的速率、一帧的长度、是否带校验位、USART模式等等

typedef struct {
    uint32_t USART_BaudRate;            // 波特率
    uint16_t USART_WordLength;          // 字长
    uint16_t USART_StopBits;            // 停止位
    uint16_t USART_Parity;              // 校验位
    uint16_t USART_Mode;                // USART模式
    uint16_t USART_HardwareFlowControl; // 硬件流控制
} USART_InitTypeDef;

1) USART_BaudRate: 波特率设置。一般设置为2400、9600、19200、115200。标准库函数会根据设定值计算得到USARTDIV值,从而设置USARTBRR寄存器值。

2) USART_WordLength: 数据帧字长,可选8位或9位。它设定USARTCR1寄存器的M位的值。如果没有使能奇偶校验控制,一般使用8数据位;如果使能了奇偶校验则一般设置为9数据位

3) USART_StopBits: 停止位设置,可选0.5个、1个、1.5个和2个停止位,它设定USARTCR2寄存器的STOP[1:0]位的值,一般我们选择1个停止位。

4) USART_Parity: 奇偶校验控制选择,可选USARTParityNo(无校验)、USARTParityEven(偶校验)以及USARTParityOdd(奇校验),它设定USARTCR1寄存器的PCE位和PS位的值。

5) USART_Mode: USART模式选择,有USARTModeRx和USARTModeTx,允许使用逻辑或运算选择两个,它设定USARTCR1寄存器的RE位和TE位。就是发送模式或接受模式。

6) USART_HardwareFlowControl: 硬件流控制选择,只有在硬件流控制模式才有效,可选有使能RTS、使能CTS、同时使能RTS和CTS、不使能硬件流。

当使用同步模式时需要配置SCLK引脚输出脉冲的属性,标准库使用一个时钟初始化结构体USART_ClockInitTypeDef来设置,该结构体内容也只有在同步模式才需要设置。

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

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

相关文章

Python | Leetcode Python题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; class Solution:def findComplement(self, num: int) -> int:highbit 0for i in range(1, 30 1):if num > (1 << i):highbit ielse:breakmask (1 << (highbit 1)) - 1return num ^ mask

NVIDIA Bluefield DPU上的启动流程4个阶段分别是什么?作用是什么?

文章目录 Bluefield上的硬件介绍启动流程启动流程:eMMC中的两个存储分区:ATF介绍ATF启动的四个阶段:四个主要步骤:各个阶段依赖的启动文件一次烧录fw失败后的信息看启动流程综述Bluefield上的硬件介绍 本文以Bluefield2为例,可以看到RSHIM实际上是Boot相关的集合。也能看…

QT 连接SQL SEVER 之后无法读取浮点和整型

1、ODBC Driver 的版本要对应上。 if (!strDbDirPath.isEmpty())m_strDbDirPath strDbDirPath;m_strDatabaseName strDatabaseName;if (m_database.isOpen() || m_bConnected){qDebug() << QString("QODBC:已经连接成功&#xff01;") << "\n&quo…

八、Linux之实用指令

1、指定运行级别 1.1 基本介绍 运行级别说明 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务&#xff08;用的非常少&#xff09; 3&#xff1a;多用户状态有网络服务&#xff08;用的最多&#xff09; 4&#xff1a;系统未使…

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版分片集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍

文章目录 0. 前言1. GMSL技术概述2. 为什么需要SerDes&#xff1f;3. GMSL技术特点4.自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准…

图解 微信开发者工具 小程序源码 调试、断点标记方法 , 微信小程序调试器,真机调试断点调试方法,小程序网络API请求调试方法 总结

在我们使用微信开发者工具进行微信小程序开发的时候&#xff0c;在这个微信开发者工具的代码编辑框里面我们是无法像使用vscode, idea等IDE工具时那样直接对代码打断点进行调试&#xff0c; 原因是小程序实际上他就是一个web浏览器应用的包装, 在其内部使用的还是类似chrome的…

mac 桌面版docker no space left on device

报错信息 docker pull镜像时报&#xff1a; failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。

如何使用vscode的launch.json来debug调试

1、创建一个launch.json文件 选择Python Debugger&#xff0c;再选择Python文件&#xff0c;创建处理如下 默认有下面五个参数 "name": "Python Debugger: Current File","type": "debugpy","request": "launch"…

使用OpenCV处理视频并显示灰度图像

目录 导入OpenCV库打开视频文件定义显示图像的函数检查视频是否成功打开并读取第一帧循环读取视频帧释放资源完整代码 导入OpenCV库 import cv2 # 导入OpenCV库打开视频文件 注意&#xff1a;视频随便去搜一个就可以 我用的是风景的 # 打开视频文件 vc cv2.VideoCapture(b…

ubuntu18.04系统中图形化界面

一、Ubuntu 18.04 中&#xff0c;使用 GDM 作为默认的图形用户界面&#xff08;GUI&#xff09;管理器。GDM 是 GNOME Display Manager 的缩写&#xff0c;它是用于 Ubuntu 的显示管理器&#xff0c;负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…

本地部署Ollama+千文大模型,docker openui访问

文章目录 前言 1. 运行Ollama 2. 安装Open WebUI 2.1 在Windows系统安装Docker 2.2 使用Docker部署Open WebUI 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并安装Open WebUI结合cpolar内网穿透软件&#xff0c;实现在公网环境也能访问…

回答网友从内存中执行函数的一个问题

事情是这样的 网友想调用dll&#xff0c;但是不想把dll释放到硬盘&#xff0c;想放在内存中。 俺的回答是&#xff1a;是从内存中&#xff0c;根据pe结构确定call的地址。 例子 先准备一个dll library dll; {$R *.res} function getValue(p1, p2: integer): integer; s…

Android开发首页底部tab切换图标有动画效果

Android开发首页底部tab切换图标有动画效果 主页tab切换很正常&#xff0c;但往往加上写动画更好看 一、思路&#xff1a; 用属性动画&#xff0c;并且事先准备多张图片&#xff0c;用于切换后播放动画 二、效果图&#xff1a; 单纯图看不出来&#xff0c;看下视频效果 An…

slam系列2:刚体坐标变换

线性代数的基础知识参考这篇&#xff1a;https://xin1999.blog.csdn.net/article/details/124779288 1. 刚体变换 刚体变换仅有旋转平移功能&#xff0c;矩阵模式表达为&#xff1a; a ′ R a t aRat a′Rat 齐次坐标就是在原n维坐标表示上增加了一个维度&#xff0c;使用n…

# 执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974)

执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974) 一、问题描述&#xff1a; 在 linux 系统上&#xff0c;使用包管理工具 rpm 查询某一个软件安装情况&#xff0c;如&#xff1a;执行 rpm -qa | grep qq 时&#xff0c;报错 数据库损坏 db3 err…

【升华】一个简单而标准的接口定义格式

一、前言 每天都在写很多接口&#xff0c;有的是有设计的接口&#xff0c;有的是无设计的接口。如果接口没有进行设计&#xff0c;也没有设计文档后期将很难扩展和维护。那么怎么简单定义一个简单而标准的Java的接口呢。下面给出格式。 二、JAVA接口设计文档 一个接口的定义一…

心觉:能让孩子卷则卷,但是度一定要把握好

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作198/1000天 现在家长普遍想让孩子考个好的学校&#xff0c;上好的幼儿园、小学、初中、高中甚至大学 为了上一个好的学校&#xf…

智能电子后视镜,汽车驾驶更安全,会是一种趋势

相比于传统的后视镜&#xff0c;智能电子后视镜的确有很多的优点。在下雨天和夜晚场景&#xff0c;电子后视镜可以说是表现优秀。 我之前一直以为我们国内是有规定不能使用电子后视镜。没想到&#xff0c;偶然刷到享界S9的视频&#xff0c;这电子后视镜&#xff0c;妥妥的给安排…

QD1-P21-P22 CSS 基础语法、注释、使用方法

本节学习&#xff1a;CSS 基础语法和注释&#xff0c;以及如何使用CSS定义的样式。 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p21 CSS 基本语法 CSS&#xff08;层叠样式表&#xff09;的基本语法相对简单&#xff0c;由选择器和一组包含在花括号 {}​ 中的声…