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

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

最近在学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进行串口数据收发的过程。

数据帧

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

波特率

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探索Yarn:安装与使用指南

Yarn 是一个由 Facebook 开发的 JavaScript 包管理器,旨在提供更快、更可靠的包管理体验。它与 npm 类似,但在某些方面更加高效和可靠。本文将介绍如何安装 Yarn,并展示如何使用它来管理 JavaScript 项目的依赖。 1. 安装 Yarn Yarn 可以通…

软件测试用例(1)

测试用例的基本要素 回顾一下测试用例的概念: 测试用例是为了实施测试而向被测试的系统提供的一组集合, 这组集合包含: 测试环境, 操作步骤, 测试数据, 预期结果等要素. 好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试. 评价测试用例的标准: 对比好坏用例…

80后、90后记忆中的经典软件正在老去,新型平台在悄然崛起

当今软件领域,可谓是瞬息万变。 更新迭代频繁,部分软件稳坐电脑桌面,而有些,则沦为记忆深处的图标,在岁月长河中悄然“凋零”。 试问,那些曾属于80、90后独特记忆的经典软件,你还记得多少&…

RAG 新进展:伊克罗德信息、墨奇科技战略合作,共研低成本快速定制大模型

AIGC 持续火爆,AI 核心技术百花齐放。过去一年里,大语言模型 LLM(Large Language Model)与 AIGC 引爆整个技术界,不过让 AIGC 落地千行百业,实现商业化使用,则面临更多挑战。例如,训…

Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理

前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …

上周六的南京,近百位南京PG圈爱好者都来啦!

3月30日,IvorySQL 社区携手中国开源软件联盟 PostgreSQL 分会以及Techtalk 社区等合作伙伴,在南京成功举办 PostgreSQL 技术峰会及 IvorySQL南京用户组,现场吸引了近百位南京PG圈技术爱好者和资深开发小伙伴们的热情参与! 浪潮集团…

基于8086直流电机调速控制系统设计

**单片机设计介绍,基于8086直流电机调速控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的直流电机调速控制系统设计概要主要涵盖了系统的核心功能、硬件组成、软件设计以及应用场景等方面。以下…

C,C++——指针详解

目录 1.指针的基本概念 代码示例: 2.指针所占内存空间 代码示例: 3.空指针和野指针 代码示例: 4.const修饰指针 代码示例: 5.指针和数组 代码示例: 6.指针和函数 代码示例: 7.指针&#x…

python pip使用

windowsR打开cmd 跳转到安装python解释器的路径下 我装的是官网3.9版本下到了D盘的vspython配置下 假如要装jieba pip install jieba Successfully installed jieba-0.42.1有这个代表成功安装 安装好程序就可以使用了,打开IDLE jieba库用来分词,红…

java+mysql图书管理系统制作教程v1.0.0完整版

本人QQ:2711138299,需要源码的可以加我,附带数据库备份文件,以及建立数据库表 下面是我写在有道云笔记里面的教程,由于复制粘贴后,代码都混乱在一起了,不建议大家观看,所以想看详细教程的也可以…

苹果手机黑屏打不开怎么办?5种方法让你轻松应对

苹果手机以其卓越的性能和流畅的操作体验赢得了全球用户的喜爱。然而,就像其他电子产品一样,苹果手机偶尔也会遇到一些问题。其中,苹果手机黑屏打不开是许多用户都曾遇到过的困扰。当您按下电源键,却发现手机屏幕一片漆黑&#xf…

2024如何做好跨境电商?7个步骤详细讲解

近几年来,随着互联网的发展,国内外的商业贸易越来越流畅,直播电商的火爆也带动着一大批相关的产业链发展,其中跨境电商就是尤为突出的一个。尽管在国内做跨境电商的企业数量非常之多,但仍有许多新人争相入局&#xff0…

QT-自定义参数设计框架软件

QT-自定义参数设计框架软件 前言一、演示效果二、使用步骤1.应用进行参数注册2.数据库操作单例对象3.参数操作单例对象 三、下载链接 前言 常用本地数据参数通常使用的是xml等文本的格式,进行本地的数据参数的存储。这种参数的保存方式有个致命的一点,就…

gin源码分析(1)--初始化中间件,路由组与路由树

目标 关于gin.Default(),gin.New(),gin.Use()group与子group之间的关系,多group与middleware之间关系中间件的类型,全局,group,get,不同类型的中间件什么时候执行。中间件 next 和abort行为如何…

用Qt浅写一个流程动画 + 随便聊聊

恍然间,已经有段时间没有正儿八紧的写点东西了。前段时间从前东家离职,最近才到新东家。这个年过得是工作若干年来最长的一次。说是武汉的就业行情不太好,但是我感觉也没太差,可能我的要求也不高吧。医疗、自动化、半导体的offer各…

JavaScript 数组元素交互最优解

利用 ES6 解构赋值: let arr [1, 2, 3, 4, 5];// 交互下标 1,4 元素的值 [arr[1], arr[4]] [arr[4], arr[1]];// 输出: [1, 5, 3, 4, 2] console.log(arr);浏览器控制台效果:

PCB项目设计-必知必会

版本控制 V0.0 2024-4-2 ini 一、PCB项目设计的基本概念 留空 二、原理图关键知识点 留空 三、PCB关键知识点 3.1首先看完这两篇 技术指导:下单前技术员必看 嘉立创PCB工艺加工能力范围说明 3.2焊盘和过孔的主要区别 焊盘主要用于器件引脚的焊接和固定&am…

OpenLayers6实战,OpenLayers实现鼠标拖拽绘制三角形,OpenLayers自定义绘制特殊图形

专栏目录: OpenLayers实战进阶专栏目录 前言 本章讲解使用OpenLayers如何绘制三角形。 OpenLayers本身是可以通过多边形绘制来绘制自行绘制三角形的,但是这种绘制方式是通过鼠标点击每个点来实现线条链接的,不支持固定的三角形这种特殊图形绘制的。 因此本章我们通过自定义…

keycloak - 鉴权quarkus

目录 一、前言 二、遇到的问题 1、keycloak中配置public访问方式如何配置keycloak 2、keycloak拦截登录后,重定向多次报错,因cookie超长 三、解决问题 1、环境说明 2、对应keycloak public访问方式的keycloak配置 3、解决cookie太长的问题 a、方…

Re-architecting I/O Caches for Emerging Fast Storage Devices——论文泛读

ASPLOS 2023 Paper 论文阅读笔记整理 问题 I/O缓存已在企业存储系统中广泛使用,例如使用固态硬盘(SSD)作为硬盘阵列(HDD)顶部的I/O缓存层。随着超快存储设备的出现,例如P5800X Optane SSD、Intel PM&…