九、2 USART串口外设

news2024/11/29 0:35:02

1、STM32内部的USART外设的介绍

(1)

STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信,学习串口主要还是异步通信。

(2)USART大致可分为发送和接收两部分

①发送部分:将数据寄存器的一个字节数据自动转换为协议规定的波形,从TX引脚发送出去。

②接收部分:自动接收RX引脚的波形,按照协议规定,解码为一个字节数据,存放在数据寄存器里。

(这是USART电路的功能,当配置好了USART电路,直接读写数据寄存器,就能自动发送和接收数据了)

(3)波特率发送器

用来配置波特率,其实就是一个分频器(如 APB2总线给个72MHz的频率,然后波特率发生器进行分频,得到想要的波特率时钟,最后在这个时钟下,进行收发,就是我们指定的通信波特率)

(4)串口常用参数

波特率常用9600或115200

数据位8位,停止位1位,无校验

(5)

①支持同步模式:多了个时钟CLK的输出;

②硬件流控制:如A设备的TX向B设备的RX发送数据,

A设备一直在发,发得太快了,B处理不过来,如果没有硬件流控制,B就只能抛弃新的数据或覆盖原数据,如果有硬件流控制,在硬件电路上,会多出一根线,如果B没准备好,就置高电平,如果准备好了,就置低电平,A接收到B反馈的准备信号,就会在B准备好的时候才发数据

(可防止因为B处理慢而导致数据丢失问题)(一般不用)

③DMA:这个串口支持DMA进行数据转运,如果有大量数据进行收发,可使用DMA数据转运数据,减轻CPU的负担;

④智能卡;

IrDA:用于红外通信,红外通信就是一个红外发光管,另一边是红外接收管,然后靠闪烁红外光通信(不是遥控器的红外通信,并不能模拟遥控器);

LIN:局域网的通信协议;

(6)

STM32F103C8T6 USART资源:USART1、USART2、USART3(总共3个独立的USART外设,可以挂载很多串口设备。

USART1是APB2总线上的设备,剩下的都是APB1总线的设备,开启时钟的时候注意一下

2、USART框图

(1)发送数据寄存器(TDR)和发送移位寄存器的工作流程

若在某时刻给TDR写入了 0x55 这个数据,在寄存器里就是二进制存储 0101 0101,此时硬件检测到写入了数据,并进行检查当前移位寄存器是否有数据正在移位,如果没有,这个 0101 0101就会立刻全部移动到发送移位寄存器,准备发送。当数据从TDR移动到移位寄存器时,会置一个标志位,叫TXE(TX Empty)发送寄存器空,我们检查这个标志位,如果置1,我们就可以在TDR写入下一个数据了(当TXE标志位置1时,数据其实还没有发送出去,只要数据从TDR转移到发送移位寄存器,TXE就会置1,我们就可以写入新的数据了。)然后发送移位寄存器就会在发送器控制(用来控制发送移位寄存器的工作)的驱动下向右移位,然后一位一位地把数据输出到TX引脚,当数据移位完成后,新的数据就会再次自动地从TDR转移到发送移位寄存器里。如果当前移位寄存器还没有完成,TDR的数据就会进行等待,一旦移位完成,就会立刻转移过来。

TDR和移位寄存器的双重缓存,可以保证连续发送数据的时候,数据帧之间不会有空闲,提高了工作效率

(2)接收端

数据从RX引脚通向接收移位寄存器,在接收器控制(用来控制接收移位寄存器的工作)的驱动下,一位一位地读取RX电平,先放在最高位,然后向右移,移位8次后,就能接收一个字节了。因为串口协议规定低位先行,所以接收移位寄存器是从高位往低位方向移动的,之后当一个字节移位完成后,这一个字节的数据就会整体地一下子转移到接收数据寄存器RDR中,在转移的过程中,也会置一个标志位,叫RXNE(RX Not Empty)接收数据寄存器非空,当检测到RXNE置1后,就可以把数据读走了。

当数据从移位寄存器转移到RDR时,就可以直接移位接收下一帧数据了。

(3)硬件数据流控

硬件流控制,简称流控。

nRTS(Request To Send)请求发送,是输出脚,告诉别人我当前能不能接收(对方能不能发送);

nCTS(Clear To Send)是清除发送,是输入脚,用于接收别人nRTS的信号(前面加个n意思是低电平有效)

流控的工作模式:

如:另一个支持流控的串口,它的TX接到我的RX上,然后我的RTS要输出一个能不能接收的反馈信号,接到对方的CTS,当我能接收时,RTS就置低电平,请求对方发送,对方的CTS接收到之后,就可以一直发送。

当我处理不过来时,比如接收数据寄存器我一直没有读,又有新的数据过来了,现在就代表我没有及时处理,RTS就会置高电平,对方CTS接收到之后,就会暂停发送,直到接收数据寄存器里的数据被读走,RTS置低电平,新的数据才会继续发送。

反过来,当我的TX给对方发送数据时,我的CTS就要接到对方的RTS,用于判断对方能不能接收。

TX和CTS是一对的,RX和RTS是一对的,CTS和RTS也要交叉连接

(4)SCLK

这部分电路用于产生同步的时钟信号,只支持输出,不支持输入,因此两个USART之间,不能实现同步的串口通信

配合发送移位寄存器输出,发送寄存器每移位一次,同步时钟电平就跳变一个周期,时钟告诉对方,我移出去一位数据了。

该时钟信号用途:

①可兼容别的协议,如串口加上时钟后,就跟SPI协议特别像,所以有了时钟输出的串口,就可以兼容SPI;

②也可做自适应波特率,如接收设备不确定发送设备给的是什么波特率,那就可以测量一下这个时钟的周期,然后再计算得到波特率(需要另外写程序来实现这个功能)(一般不用)

(5)唤醒单元:实现串口挂载多设备

串口一般是点对点的通信(只支持连个设备互相通信),而多设备在一条总线上可以接多个从设备,每个设备分配一个地址,想跟某个设备通信,就先进行寻址,确定通信对象,再进行数据收发。

当发送指定的串口的地址时,此设备唤醒开始工作,当发送别的设备地址时,别的设备就被唤醒工作。(一般不用)

(6)中断输出控制:配置中断是不是能通向NVIC

TXE:发送寄存器空;

RXNE:接收寄存器非空

这两个是判断发送状态和接收状态的必要标志位

(7)波特率发生器:其实就是分频器

APB时钟进行分频,得到发送和接收移位的时钟

fPCLKx(x=1或2)

USART1挂载在APB2,所以就是PCLK2的时钟,一般是72M;

其他的USART都挂载在APB1,所以是PCLK1的时钟,一般是36M

之后这个时钟进行分频,除以一个USARTDIV的分频系数,分频完后,再除以16,得到发生器时钟和接收器时钟,通向控制部分

TE(TX Enable)为1,发送器使能,发送部分的波特率就有效;

若RE(RX Enable)为1,接收器使能,接收部分的波特率就有效

3、串口的引脚

4、USART基本结构

最左边是波特率发生器,用于产生约定的通信速率,时钟来源是PCLK2或1,经过波特率发器分频后产生的时钟通向发送控制器和接收控制器,发送控制器和接收控制器用来控制发送移位和接收移位。

之后由发送数据寄存器和发送移位寄存器这两个寄存器的配合,将数据一位一位的移出去。通过GPIO口的复用输出输出到TX引脚,产生串口协议规定的波形。

当数据由数据寄存器移位到移位寄存器时,会置一个TXE的标志位,我们判断这个标志位就可以知道是不是可以写下的数据了。

接收部分也是类似的,RX引脚的波形通过GPIO口输入,在接收控制器的控制下。一位一位地移入接收移位寄存器,移完一帧数据后,数据就会统一转运到接收数据寄存器,在转移的同时置一个RXNE标志位,我们检查这个标志位就可以知道是不是收到数据了。同时这个标志位也可以去申请中断,这样就可以在收到数据时,直接进入中断函数,然后快速地读取和保存数据。

注意:右边实际上有四个寄存器,但在软件层面,只有一个DR寄存器可以供我们读写,写入DR时,数据走上面的路进行发送;读取DR时,数据走下面的路进行接收。

5、细节性问题

(1)数据帧

停止位一般选1位停止位

(2)起始位侦测

串口的输出TX比输入RX简单,输出只需要定时翻转TX引脚的高低电平就行了,而输入不仅要保证输入的采样频率和波特率一致,还要保证每次输入采样的位置要正好处于每一位的正中间,只有在每一位的正中间采样,这样高低电平读进来才是最可靠的。

若有噪声,会在状态寄存器里置NE(Noise Error)噪声标志位。

一个数据位有16个采样时钟,没有噪声时,8、9、10次的采样应该全为1或全为0,全为1就认为收到了1,全为0就认为收到了0;如果有噪声,导致3次采样频率不是全为1或全为0,那就按照2:1的规则来,2次为1就认为收到了1,2次为0就认为收到了0,这种情况下噪声标志位NE也会置1。

(3)波特率发生器:就是分频器

比如要配置USART1为9600的波特率,带入公式9600=72M /(16*DIV),

所以DIV = 72M / 9600 / 16 = 468.75,转换成二进制位11101 0100.11(前后多出来的补零)

用库函数配置比较方便,直接写波特率就行

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

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

相关文章

剖解最小栈

最小栈 思路: 1. 首先实例化两个栈,分别是stack用于存放数据,minstack用于存放最小值 2. 将第一个元素压入两个栈中,判断此时若minStack栈中为空,则表示压入的为第一个数据 if ( minStack.empty () ) { minStack.pus…

MySQL 查询优化器

文章目录 控制查询计划optimizer_prune_leveloptimizer_search_depth 优化器参数优化器提示索引提示成本模型server_costcost_name engine_cost 控制查询计划 https://dev.mysql.com/doc/refman/8.4/en/controlling-query-plan-evaluation.html 在执行SQL前会根据优化器选择执…

Leetcode 第 140 场双周赛题解

Leetcode 第 140 场双周赛题解 Leetcode 第 140 场双周赛题解题目1:3300. 替换为数位和以后的最小元素思路代码复杂度分析 题目2:3301. 高度互不相同的最大塔高和思路代码复杂度分析 题目3:3302. 字典序最小的合法序列思路代码复杂度分析 题目…

入手一个小扒菜fqrr#com

fqrr#com 既带q又带r是很多人不喜的类型, 父亲 夫妻 番茄 分期 人人 日日 好无聊的米呀,竟然组合不出来意思 这个不是购买的,别人说他1150元购买的,算是半抵给我的吧 其实我也不喜欢,我4声母.com 已经够多了&am…

【教程】文字转语音的3个方法,文字转语音使用攻略

文字转语音的需求还是蛮多的,很多用户在视频剪辑中会遇到。不想用本人的声音,那么视频中的旁白就只能通过文字转语音软件实现了。 想要将文字转为语音那还是蛮好解决的,如果你还在找方法,那么以下内容可以了解下。本文整理了三种简…

2c 操作符详解

1. 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作…

NVIDIA NVLink-C2C

NVIDIA NVLink-C2C 文章目录 前言一、介绍1. 用于定制芯片集成的超快芯片互连技术2. 构建半定制芯片设计3. 使用 NVLink-C2C 技术的产品 二、NVLink-C2C 技术优势1. 高带宽2. 低延迟3. 低功率和高密度4. 行业标准协议 前言 将 NVLink 扩展至芯片级集成 一、介绍 1. 用于定制芯…

Candance仿真二阶米勒补偿OTA

1.OTA电路搭建目标——25Mhz GBW,65dB的增益 2.电路参照 3.candance电路搭建 实现步骤:应该是从下面这个公式开始推导 然后那个CL就是两边的那个CCa或CCb的大小 算出来就是gm75us

MongoDB-aggregate流式计算:带条件的关联查询使用案例分析

在数据库的查询中,是一定会遇到表关联查询的。当两张大表关联时,时常会遇到性能和资源问题。这篇文章就是用一个例子来分享MongoDB带条件的关联查询发挥的作用。 假设工作环境中有两张MongoDB集合:SC_DATA(学生基本信息集合&…

基于微信小程序的旅游拼团系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Colorize: 0 variables Colorize is not activated for this file. VsCode

问题情况 解决步骤 1.找到setting.json文件 2.输入以下代码,保存setting.json文件 "colorize.languages": ["css", "javascript", "sass", "less", "postcss", "stylus", "xml"…

基于SpringBoot+Vue+MySQL的中医院问诊系统

系统展示 用户前台界面 管理员后台界面 医生后台界面 系统背景 随着信息技术的迅猛发展和医疗服务需求的不断增加,传统的中医院问诊流程已经无法满足患者和医院的需求。纸质病历不仅占用大量存储空间,而且容易丢失和损坏,同时难以实现信息的快…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)

4 创建docker容器 4.1创建网络 [rootlocalhost wutool]# docker network create -d macvlan --subnet192.168.137.0/24 --gateway192.168.137.2 --ip-range192.168.137.0/24 -o parentens33 nat 52af11381bfd655d175e4168265b2a507793e8fe48f119db846949ffd4dd27de [rootlocal…

【每天学个新注解】Day 15 Lombok注解简解(十四)—@UtilityClass、@Helper

UtilityClass 生成工具类的注解 将一个类通过注解变成一个工具类,并没有什么用,本来代码中的工具类数量就极为有限,并不能达到减少重复代码的目的 1、如何使用 加在需要委托将其变为工具类的普通类上。 2、代码示例 例: Uti…

设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、原型模式2、原型模式的使用场景3、优点4、缺点5、主要角色6、代码示例7、总结题外话关于使用序列化实现深拷贝 设计模式概述 创建型模式:工厂方法、抽象方法、建造者、原型、单例。 结构型模式有:适配器、桥接、组合、装饰器、…

构建高效新闻推荐系统:Spring Boot的力量

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

MacBook远程连接服务器,显示tensorboard的loss值

尼卡形态 GEAR-5 参考链接 当使用服务器进行模型训练时,想要使用MacBook查看一些可视化结果,如果远程服务器和本机在一个局域网内,可以通过以下命令解决: 登录服务器: 先用ssh工具重定向:ssh -L 16006:127…

java:pdfbox 删除扫描版PDF中文本水印

官网下载 https://pdfbox.apache.org/download.html下载 pdfbox-app-3.0.3.jar cd D:\pdfbox 运行 java -jar pdfbox-app-3.0.3.jar java -jar pdfbox-app-3.0.3.jar Usage: pdfbox [COMMAND] [OPTIONS] Commands:debug Analyzes and inspects the internal structu…

RTSP协议讲解

1.RTSP协议 rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是 TCP/IP 协议体系中的一个应用层协议。 RTSP 交互流程 1)OPTIONS C--->S 客户端向服务器端发现 OPTIONS,请求可用…

JVM(Java Virtual Machine) 详解

1. JVM 内存区域划分 一个 Java 写的程序,跑起来就得到了一个 Java 进程(资源分配的基本单位) JVM 上面运行的字节码指令 1) 程序计数器(比较小的空间),保存了下一条要执行的指令的地址 这个不是 CPU 的…