STM32学习笔记(9_2)- USART串口外设

news2024/11/22 15:37:40

无人问津也好,技不如人也罢,都应静下心来,去做该做的事。

最近在学STM32,所以也开贴记录一下主要内容,省的过目即忘。视频教程为江科大(改名江协科技),网站jiangxiekeji.com

在STM32中,集成了很多用于通信的外设模块,USART、I2C、SPI、CAN和USB,C8T6芯片是全部都支持的。

本期学习USART串口外设。

USART简介

一般我们串口很少使用这个同步功能,所以USART和UART使用起来,也没有什么区别。USRT它只支持时钟输出,不支持时钟输入,所以这个同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USRT之间进行同步通信,所以我们学习串口,主要还是异步通信。

USART大体可分为发送和接收两部分,发送部分就是将数据寄存器的一个字节数据,自动转换为协议规定的波形,从TX引脚发送出去;接收部分就是,自动接收RX引脚的波形,按照协议规定,解码为一个字节数据,存放在数据寄存器里。这就是USART电路的功能。

当我们配置好了USART电路,直接读写数据寄存器,就能自动发送和接收数据了。

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

数据位一般不需要校验就选8位,需要校验就选9位;我们最常用的就是1位停止位,其他的很少用;常用无校验位。

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

串口支持DMA,如果由大量数据收发,可以使用DMA转运数据,减轻CPU的负担。

STM32F103C8T6有三个串口。其中这里USART1是APB2总线上的设备,USART2、3是APB1的设备。

 USART框图

左上这里的SW_RX、RDA_OUT/IN这些是智能卡和IrDA通信的引脚,不用管这三个。

引脚这块,TX发送脚就是从发送移位寄存器这里接出去;RX接收脚,就是通向接收移位寄存器这里,这样就行了。

右上这部分就是串口的数据寄存器了 ,发送或接收的字节数据就存在这里。有两个数据寄存器,一个是发送数据寄存器TDR(Transmit DR)、一个是接收数据寄存器RDR(Receive DR),这两个寄存器占用同一个地址。在程序上,只表现为一个寄存器,就是数据寄存器DR(Data Register)。但实际硬件中,是分成了两个寄存器。TDR是只写的,RDR是只读的。当你进行写操作时,数据就写入到TDR,当你进行读操作时,数据就是从RDR读出来的。

然后往下看,下面是两个移位寄存器,一个用于发送,一个用于接收。发送移位寄存器的作用就是,把一个字节的数据一位一位地移出去,正好对应串口协议的波形的数据位。比如你在某时刻给TDR写入了0x55这个数据,在寄存器里就是二进制存储,0101 0101,那么此时,硬件检测到你写入数据了。它就会检查,当前移位寄存器是不是有数据正在移位,如果没有,这个01010101就会立刻全部移动到发送移位寄存器,准备发送。当数据从TDR移动到移位寄存器时,会置一个标志位,叫TXE(TX Empty),发送寄存器空,我们检查这个标志位,如果置1了,我们就可以在TDR写入下一个数据了。注意下,当TXE标志位置1时,数据还没发出去,只是数据从TDR转移到发送移位寄存器了,这时我们就可以往TDR写入新数据了。这里发送移位寄存器是向右移位的,所以正好和串口协议规定的低位先行,是一致的。如果当前移位寄存器移位还没有完成,TDR的数据就会进行等待,一但移位完成,就会立刻转移过来。接收端这边,也是类似的,当我们检测到RXNE置1之后,就可以把数据读走了。

当然发送还需要加上帧头帧尾,接收还需要剔除帧头帧尾,这些操作,它内部有电路会自动执行,我们知道会有硬件电路帮我们做就好了。

硬件流控制,简称流控。这里流控有两个脚,一是nRTS、二是nCTS。nRTS(Request To Send)是请求发送,是输出脚,也就是告诉别人,我当前能不能接收;nCTS(Clear To Send)是清除发送,是输入脚,也就是用于接收别人nRTS的信号的。这里前面加个n的意思是低电平有效。

接着看下面的中断输出控制 ,中断申请位,就是状态寄存器这里的各种标志位,有两个标志位比较重要。一个是TXE发送寄存器空,另一个是RXNE接收寄存器非空,这两个是判断发送状态和接收状态的必要标志位。中断控制这里就是配置中断是不是能通向NVIC,这个应该好理解。

USART1挂载在APB2,所以就是PCLK2的时钟,一般是72M;其他的USART都挂载在APB1,所以是PCLK1的时钟,一般是36M。

USART引脚分布表(C8T6)

 USART基本结构图

最左边这里是波特率发生器,用于产生约定的通信速率。时钟来源是PCLK2或1,经过波特率发生器分频后,产生的时钟通向发送控制器和接收控制器。发送控制器和接收控制器,用来控制发送移位和接收移位,之后,由发送数据寄存器和发送移位寄存器这两个寄存器的配合,将数据一位一位地右移出去(低位先行),通过GPIO的复用输出,输出到TX引脚,产生串口协议规定的波形。当数据由数据寄存器转到移位寄存器时,会置一个TEX的标志位,我们判断这个标志位,就可以知道是不是可以写下一个数据了。RX端也是一样的流程,在转移的同时,置一个RXNE标志位,我们检查这个标志位,就可以知道是不是收到数据了,同时这个标志位也可以去申请中断,这样就可以在收到数据时,直接进入中断函数,然后快速地读取和保存数据。

图中有四个寄存器,实际在软件层面,只有一个DR寄存器可以供我们读写。写入DR时,数据走上面这条路,进行发送;读取DR时,数据走下面这条路,进行接收。这就是USART进行串口数据收发的过程。

数据帧

在时钟的上升沿采集数据。

波特率

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

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

相关文章

ES-7.12-官网阅读-ILM-自定义内置ILM策略

官网地址:Tutorial: Customize built-in ILM policies | Elasticsearch Guide [7.12] | Elastic 教程:自定义内置ILM策略(Customize built-in ILM policies) Elasticsearch包含如下内建ILM 策略: logs(日…

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

数据可视化高级技术(Echarts)

目录 (一)数据可视化概念及Echarts基础知识 数据可视化的好处: 数据可视化的目标 数据可视化的基本流程 (二)数据图表 类别比较图表: 数据关系图表: 数据分布图表: 时间序列…

增加网站搜索引擎排名的6个准则

怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页&#xf…

基于STC12C5A60S2系列1T 8051单片机的数码管显示IIC总线器件AT24C02记录单片机上电次数应用

基于STC12C5A60S2系列1T 8051单片机的数码管显示IIC总线器件AT24C02记录单片机上电次数应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍…

Vmware虚拟机远程SSH连接失效解决方法及分析过程

问题描述 系统为CentOS7 64位 一向能够正常连接 在某次使用FinalShell进行远程SSH连接时 突然无法连接 对问题原因猜测及尝试 1.dns解析失效 发现显示DNS无法解析,可以得知是使用了主机名登录,而主机名无法登录. 遂查看host文件.host文件因不知名原因被清空,重新恢复后该问…

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

学习transformer模型-broadcast广播的简明介绍

broadcast的定义和目的: 广播发生在将较小的张量“拉伸”以具有与较大张量兼容的形状,以便执行操作时。 广播是一种有效执行张量操作而不创建重复数据的方式。 广播的处理过程: 1, 确定最右边的维度是否兼容 每…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 1.1 安装HxD HxD下载链接:https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 1.2 找到bmp图像的图片点阵数据起始地址,原理和例子…

【数据结构】非线性结构---二叉树

1、树 1.1 树的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点 非终端节点或分支节点&#…

中断服务程序模板

通常定时器初始化过程如下: ①对 TMOD赋值,以确定TO和T1的工作方式。 ②计算初值,并将初值写入THO、TLO或TH1、TL1。 ③中断方式时,则对IE赋值,开放中断。 ④使TRO或TR1置位,启动定时器/计数器定时或计数。 代码 利用定时器0工作方式1&…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…

算法打卡day23

今日任务: 1)39. 组合总和 2)40.组合总和II 3)131.分割回文串 39. 组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 给定一个无重复元素的数组 candidates 和一个目标数 target ,…

人工智能之深度学习笔记——每天五分钟快速掌握深度学习理论

本专栏会对深度学习以及深度学习搭建技巧做一个详尽的介绍,相信大家阅读完本专栏之后,深度学习已经不是一个遥不可及的名词,我们会知道它究竟是什么,本专栏尽可能地简单详细地介绍每一个深度学习知识,帮助每天只用很少…

Day78:服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE漏洞

目录 前置知识 数据库应用-Redis-未授权访问&CVE漏洞 未授权访问:CNVD-2015-07557 未授权访问-CNVD-2019-21763 未授权访问-沙箱绕过RCE-CVE-2022-0543 数据库应用-Couchdb-未授权越权&CVE漏洞 Couchdb 垂直权限绕过(CVE-2017-12635&…

数据结构-链表的基本操作

前言: 在dotcpp上碰到了一道题,链接放这了,这道题就是让你自己构建一遍链表的创建,插入节点,删除节点,获取节点,输出链表,题目给了几张代码图,不过不用管那些图&#xf…

k8s 经常操作指令

发现有个技巧:get、describe、edit ...操作指令后,都对应的相应的资源类型/资源 编辑deployment,查看其中部署的容器 kubectl edit deploy -n namespace pod名前缀(不带hash) 注: 带hash的具体pod&…

如何让光猫4个网口都有网络

一般情况光猫只有LAN1口有网络,LAN2、LAN3和LAN4口都是预留给电视用的,那么如何让这3个网口也有网络呢? 使用场景: 光猫在弱电箱内,弱电箱中有三根网线(网线1、网线2和网线3)分别接入到了三个房…

IP地址与子网掩码

1 IP地址 1.1 IPv4与IPv6 1.2 IPv4地址详解 IPv4地址分4段,每段8位,共32位二进制数组成。 1.2.1 地址分类 这32位又被分为网络号和主机号两部分,根据网络号占用位数的不同,又可分为以下几类: A类地址:…

蓝桥杯(更新中)

递归与递推 递归 1.指数型枚举 解析:从 1 ∼ n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 思路:枚举每一位对应的数字选与不选,例如:第一位对应的数字为1,有一种方案是选1,另…