STM32第十二节(中级篇):串口通信(第一节)——功能框图讲解

前言

        我们在51单片机中就已经学习过了串口通信的相关知识点,那么我们现在在32单片机上进一步学习通信的原理。我们主要讲解串口功能框图以及串口初始化结构体以及固件库讲解。

STM32第十二节(中级篇):串口通信(第一节)——功能框图讲解


        URAST框图:分为四个部分,分别是引脚,数据寄存器,控制器,波特率。

引脚介绍

        TX:数据发送;

        RX:是数据接收;

        SCLK:时钟,仅同步通信时使用;

        nRTS:请求发送(Request To Send);

        nCTS :允许发送(Clear To Send)。

        引脚必然会对应相对应的GPIO口,我们所学的指南者所对应的GPIO引脚就在下面了,我们发现USART1挂载在APB2总线上,剩下的都在APB1总线上,我们要注意写代码的时候要打开APB1以及APB2总线的时钟。

数据寄存器

        数据寄存器-USART DR:

        9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。我们通过观察USART_DR的前九位,是由控制寄存器(USART_CH1以及USART_CR2)所控制的。

字长M:

        在由控制寄存器USART_CH1的13位是M(字长),控制着数据字的长度,由软件对其设置和清零。

        0:一个起始位,8个数据位,n个停止位:

        1:一个起始位,9个数据位,n个停止位。

        注意:在数据传输过程中(发送或者接收时),不能修改这个位。

        

停止位(STOP):

        我们观察上图发现,在启动位之后会有数据帧,数据传输结束后会有停止位(STOP);而停止位由控制寄存器USART_CH2决定。

        STOP:停止位(STOP bits)这2位用来设置停止位的位数

        00:1个停止位;

        01:0.5个停止位;

        10:2个停止位;

        11:1.5个停止位;

注:UART4和UART5不能用0.5停止位和1.5停止位。

可能的奇偶校验位:

        位10:

        PCE:检验控制使能(Parity control enable)

        用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是校验位的检测)。当使能了该位,在发送数据的最高位(如果M=1,最高位就是第9位;如果M=0,最高位就是第8位)插入校验位;对接收到的数据检查其校验位。软件对它置"1或清0’。一旦设置了该位,当前字节传输完成后,校验控制才生效。

        0:禁止校验控制:
        1:使能校验控制。

        位9:

        PS:校验选择(Parity selection)

        当校验控制使能后,该位用来选择是采用偶校验还是奇校验。软件对它置"1或清0’。当前字节传输完成后,该选择生效。

        0:偶校验:

        1:奇校验

        位8:
        PEIE: PE中断使能(PE interrupt enable)该位由软件设置或清除。
        0:禁止产生中断:
        1:当USART_SR中的PE为'1'时,产 生USART中断。

数据发送和接收具体的流程:

        

        我们一步步来,

        UE:USART使能(USART enable)

        当该位被清零,在当前字节传输完成后USART的分频器和输出停止工作,以减少功耗。该位由软件设置和清零。

        0:USART分频器和输出被禁止;

        1:USART模块使能。

        TE:发送使能(Transmitter enable)

        该位使能发送器。该位由软件设置或清除。

        0:禁止发送;
        1:使能发送

        注意:

                1.在数据传输过程中,除了在智能卡模式下,如果TE位上有个0脉冲(即设置为'0'之后再设置为'1’),会在当前数据字传输完成后,发送一个“前导符"(空闲总线)。

                2.当TE被设置后,在真正发送开始之前,有一个比特时间的延迟。

        RE:接收使能(Receiver enable)

        该位由软件设置或清除。

        0:禁止接收;
        1:使能接收,并开始搜寻RX引脚上的起始位。

        

        通过观察功能框图,我们发现具体的流程为:

发送数据:
        UE=1;TE=1

        而数据从CPU或DMA从内存里读取来,然后就会。放到发送数据寄存器(TDR)中,然后转交给发送移位寄存器,然后八位数据一位一位的通过串行的方式传输到TX引脚,表示发送完成。

        在这个过程中,有两个寄存器的位会改变,在TDR中,TXE为空.

        TXE:发送数据寄存器空(Transmit data register empty)

        当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果USARTCR1寄存器中的TXEIE为1,则产生中断。对USARTDR的写操作,将该位清零。

        0:数据还没有被转移到移位寄存器:
        1:数据已经被转移到移位寄存器。

        注意:单缓冲器传输中使用该位。

        TC:发送完成(Transmission complete)

        当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置"1'。如果USARTCR1中的TCIE为"1’,则产生中断。由软件序列清除该位(先读USART SR,然后写入USART_DR)。TC位也可以通过写入0'来清除,只有在多缓存通讯中才推荐这种清除程序。

        0:发送还未完成:
        1:发送完成。

接收数据:
        UE=1;RE=1

        相反的,接收数据就是先从RX(GPIO口)进入数据,然后转到接收移位寄存器中,再到接收数据寄存器(RDR)中,同时也有位的改变(标志位):

        RXNE:读数据寄存器非空(Read data register not empty)

        当RDR移位寄存器中的数据被转移到USART DR寄存器中,该位被硬件置位。如果USART CR1寄存器中的RXNEIE为1,则产生中断。对USART DR的读操作可以将该位清RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

        0:数据没有收到;
        1:收到数据,可以读出。

控制器(USART_CRx(1,2,3))

        熟读手册即可,手册可在官网中找到:

野火手册下载icon-default.png?t=N7T8https://doc.embedfire.com/products/link/zh/latest/index.html

波特率

        USART BRR:波特率寄存器。

        

        以下是波特率计算公式:

        

        为了计算出USARTDIV,我们需要知道时钟配置为72M还是别的,然后根据给定的波特率即可计算出USARTDIV的值,计算结果分为整数和小数两个部分,分开计算,小数部分要乘以16达到所计算的值。最后以16进制相加,即可求出结果。

小结

        本节课讲了关于功能框图的讲解,细致的展现了从寄存器到固件库的讲解,下节课将继续代码部分的实操。

        创作不易,点个三连支持一下吧!

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

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

相关文章

Python绘图入门:使用Matplotlib绘制柱状图

Python绘图入门:使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式,能够直观地展示不同类别之间的数据差异。在Python中,Matplotlib是一个非常强大且灵活的绘图库,它不仅能绘制简单的图表,还能创建复杂的多…

远程命令行控制SSH

第一次接触SSH是ROS小车作为服务端,通过ubuntu电脑客户端访问。因为机器人接键盘和屏幕操作起来不方便,所以使用SSH进行连接,方便对小车的操作。 1.服务端安装 打开终端查看ssh是否安装 sudo service ssh status 如果未安装 sudo apt upd…

【网络】私有IP和公网IP的转换——NAT技术

目录 引言 NAT工作机制​编辑 NAT技术的优缺点 优点 缺点 个人主页:东洛的克莱斯韦克-CSDN博客 引言 公网被子网掩码划分为层状结构,一个公网IP的机器又可以用很多私有IP搭建内网。在日常生活场景中用的都是私有IP,例如手机,…

目标检测算法,Yolov7本地化部署使用(一)

安全帽检测、口罩检测、行为检测、目标物体检测,随着深度学习和计算机视觉技术的不断发展,目标检测成为了研究热点之一。YOLOv7作为YOLO系列的新成员,以其高效和准确的性能受到了广泛关注。本文将介绍如何在本地部署并利用YOLOv7完成目标检测…

OpenCV图像处理——按最小外接矩形剪切图像

引言 在图像处理过程中,提取感兴趣区域(ROI)并在其上进行处理后,往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤: 找到最小外接矩形:使用 cv::boundingRect 或 cv::minAreaRect 提取感兴…

计算机毕业设计 助农产品采购平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

C# 中 Tuple 与 ValueTuples 之间的区别

在 C# 中,元组和值元组都用于在单个变量中存储多个值。但它们在语法、功能和性能方面存在一些关键差异。 一.Tuples(元组) 元组是一种引用类型,长期以来一直是 .NET 的一部分。它们是使用 System.Tuple 类创建的。 例子 using System; class Program…

07 STM32ADC

AD单通道和AD多通道 使用ADC可以对高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量。所以ADC就是一个电压表,把引脚电压值测出来,放在一个变量里。 数字到模拟的桥梁,PWM来控制电机的速度&a…

springboot家校共育平台-计算机毕业设计源码54235

摘 要 采用高效的SpringBoot框架,家校共育平台为家长与教师提供了便捷的沟通渠道。该平台整合了丰富的教育资源,实现了家校之间的即时信息互通,从而助力协同教育。 为进一步方便用户访问和使用,平台与微信小程序进行了深度整合。家…

SPAW7000高精度功率分析记录仪,测试方案

测试目标 评估双电机四驱系统中前后电机的性能。 分析前后电机之间的实时联动情况。 测量并分析电机控制器的输入与输出功率。 计算功率转换效率和损耗。 验证电机系统的谐波特性。 测试设备 SPAW7000高精度功率分析记录仪:用于测量功率、电压、电流等参数&am…

【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(上)

目录 LeetCode #226:Invert Binary Tree 翻转二叉树「遍历」「分而治之」广度优先搜索:层序遍历 LeetCode #101:Symmetric Tree 对称二叉树递归法迭代法 LeetCode #100:Same Tree 相同的树递归法迭代法 LeetCode #559:…

八种排序算法的复杂度(C语言)

归并排序(递归与非递归实现,C语言)-CSDN博客 快速排序(三种方法,非递归快排,C语言)-CSDN博客 堆排序(C语言)-CSDN博客 选择排序(C语言)以及选择排序优化-CSDN博客 冒泡排序(C语言)-CSDN博客 直接插入排序(C语言)-CSDN博客 希尔排序( 缩小增量排序 )(C语言)-CSDN博客 计数…

赋能基层,融合创新:EasyCVR视频汇聚平台构建平安城市视频共享系统

一、雪亮工程建设的意义 雪亮工程的核心在于通过高清视频监控、环境监测和智能预警等先进技术手段,构建一个高效、智能、安全、便捷的社会安全防控体系。这一工程的建设不仅代表了现代化科技手段在城市治安管理中的应用,更是提升社会安全保障能力、推动…

LeetCode.3152.特殊数组II

题目描述: 如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。 你有一个整数数组 nums 和一个二维整数矩阵 queries,对于 queries[i] [fromi, toi],请你帮助你检查 子数组 nums[fromi..toi…

纷享销客CRM AI产品架构概览、产品特色

一、纷享销客CRM AI产品架构概览 纷享AI平台架构分为三个主要层次:AI基础设施层、AI平台层和AI应用层。每个层次都由一系列功能模块组成,旨在为客户提供强大的技术支持和灵活的解决方案。 1.Al基础设施层 AI基础设施层是整个AI平台的底层支撑&#xff…

使用WooCommerce订阅续订进行货到付款:自定义订单状态

WooCommerce订阅插件允许商店设置周期性的订阅产品。客户购买订阅后,系统会自动根据设定周期进行续订。但对于货到付款的场景,自动续订就面临挑战。 自定义订单状态 为了实现货到付款的续订流程,我们需要创建一个自定义订单状态。以下是具体…

牛客刷题总结——Python入门07:内置函数

🤵‍♂️ 个人主页: @北极的三哈 个人主页 👨‍💻 作者简介:Python领域优质创作者。 📒 系列专栏:《牛客题库-Python篇》 🌐推荐《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推,求职就业一站解决 👉 点击链接进行注册学习 文章目录 010 内置函…

鸿蒙开发入门day06-ArkUI简介

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 ArkUI简介 基本概念 两种开发范式 不同应用类型支持的开发范式 …

Linux--应用层协议HTTP协议(http服务器构建)

目录 1.HTTP 协议 2.认识 URL 3.urlencode 和 urldecode(编码) urlencode(URL编码) urldecode(URL解码) 4.HTTP 协议请求与响应格式 4.1HTTP 常见方法(三种) 5.HTTP 的状态码…

如何妙用哈希表来优化遍历查找过程?刷题感悟总结,c++实现

先上题目 题目链接:题目链接 这题我最先想到的就是前缀和a,构造好了以后就遍历每一个[l,r]数组(满足题目要求的连续区间数组),奈何倒数第二个样例时间超限 先给出原思路代码 class Solution { public:int subarray…