STM32_USART 串口通讯

2023-10-29

通信方式的分类

按照通信方式分类:

并行通信:8位(一个字节)数据同步传输,传输速度快,占用引脚资源多。
串行通信:8位数据按位传输,速度相对较慢,占用引脚资源少。

同步通信:带时钟信号同步传输,如SPI,IIC通信接口。同步通讯当中,需要外加一根时钟线,进行时钟同步,收发双方根据时钟信号的节奏来进行信号传输。
异步通信:不带时钟同步信号,比如UART(通用异步收发器),单总线。对于异步通讯,不需要时钟线,而是在数据信号中穿插一些用于同步的信号位,然后接受方根据约定的协议(波特率)对收到的数据进行解析。

按照数据传送方向分类:

单工:只支持数据单向传输。
半双工:允许数据在两个方向传输,但是在某一时刻,只允许数据在一个方向传输。
全双工:允许数据同时在两个方向传输。因此,全双工通信可以看作是两个单工通信方式的结合,需要独立的接收端和发送端。

通信接口及其说明如下图所示:

在这里插入图片描述

STM32的串口通信

引脚接线

对于芯片之间的通信来说,其引脚接线方法如图所示:由于两块芯片之间都是TTL电平(5V为高,0V为低),因此可以直接相连(交叉接线)
在这里插入图片描述
对于芯片和PC机之间的通信,则不能直接相连,因为电平不兼容。所以要中间要接一个RS232的转换器,将TTL电平转换为RS232电平(+15/+13为0,-15/13为1)
在这里插入图片描述

串口通讯的过程

在这里插入图片描述

上图很形象的表示出了数据传输的过程。无论是输入还是输出,都是一位一位进行传输的。对于接收数据,一般是当一帧数据全部被移位寄存器接收以后,再并行的传输到RDR寄存器,最后被内核读取;对于发送来说,则是这个过程的逆向操作,当一帧完整的数据被发送到TDR寄存器以后,在并行的将数据报传给移位寄存器,最后由移位寄存器一位一位的发送出去。

UART串口通信都是以帧为单位,一帧数据通常包含以下几位:
1位起始位+8位数据位+1位奇偶校验位+1位停止位
如下图所示:
在这里插入图片描述

串口发送数据

当发送使能位(TE)被置1时,首先发送一个空闲帧,然后发送移位寄存器中的数据在陆续开始在TX引脚输出。
对于串口发送数据配置的流程如下:
1、通过CR1寄存器的UE位(USART使能)来使能USART。
2、通过CR1的M位定义字长。
3、通过BRR寄存器来设置波特率。
4、设置CR1的TE位(发送使能位),并发送一个空闲帧作为第一次数据发送。
5、把需要发送的数据依次写入DR寄存器,该动作同时清除TXE位(发送寄存器空),对于待发送的数据重复该步骤。
6、当DR寄存器中写入最后一个数据字以后,等待TC=1,其表示最后一个数据帧的传输结束(当需要关闭USART或者停机之前,都需要确认是否传输结束,避免破坏最后一次传输)

单字节通信:
对于清零TXE位,是通过对数据寄存器的写操作来实现的,TXE位由硬件来设置,TXE位置1表明
1、数据已经从TDR移送到移位寄存器,数据发送已经开始;
2、TDR寄存器已经清空;
3、下一个数据可以被写进DR寄存器而不会覆盖先前的数据。

若设置了TXE位 ,当一帧数据发送完成以后,这时TC位被置1。如果要使用发送完成中断,那么要提前将CR1中的TCIE位置1 ,当TC为1时,就产生中断。

串口接收数据

对于接收数据,首先,要先侦测起始位,如果确认收到起始位,就设置RXNE标志位(置1),若RXNEIE为1(提前设定是否使用中断) ,则产生中断,在中断服务函数中进行数据的接收

字符接收:
1、将CR1寄存器中的UE置1来使能USART。
2、确定CR1中的M位来调节字长。
3、在CR2中调节停止位的个数。
4、在BRR寄存器中选择波特率。
5、将CR1中的RE置1,使能接收器,并开始搜寻RX引脚上的起始位。
当一个字符被接收到以后:
此时RXNE位(读数据寄存器非空)被置位,表明移位寄存器中的数据被转移到RDR(即数据已经被接收,且可以被读出),如果需要使用到中断功能,那么需要提前将USART_CR1寄存器中的RXNEIE位(接受缓冲区非空中断使能)置1,当使能了该位以后,当USART_SR中的ORE或者RXNE位为1时,产生USART中断。

USART中断请求

在谈到串口中断请求之前,首先得知道为什么需要用到中断来进行数据的收发。假设不使用中断的功能来完成数据的收发,那还可以用轮询的方式来收发数据。这种方式是在主函数中写一个死循环来实现的,因此,这种方式效率低,在数据还有没有到来之时就一直在不停的扫描引脚,影响其他程序的执行,而中断则是在有数据到来时,才响应中断,转而执行中断服务函数,因此不会影响其他程序的执行。

要使用中断,必须在初始化的时候将下图中相应的使能位置1,否则不能产生中断。USART的各种中断事件被连接到同一个中断向量,以下各种中断事件均请求同一个中断服务函数,这些事件如下图所示:一般情况下,这几种中断事件在同一时刻只有一件事件发生。至于此刻到底是发生的什么事件,会在中断服务函数中进行判断,执行相应的响应函数。
在这里插入图片描述
若其中存在理解有误的地方还望大佬指出,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32_USART 串口通讯 的相关文章

随机推荐

  • IEEE 802.11标准协议下载

    IEEE协会对外免费提供各版本的802 11标准协议 笔者下载了最新发布的版本 2016 给各位大佬附上传送门 授人予鱼不如授人予渔 下面介绍获取标准协议的方法 访问IEEE Xplore Digital Library官网 点击搜索802
  • SpringBoot部署的两种方式 - jar方式 和 war 方式

    SpringBoot 和我们之前学习的 web 应用程序不一样 其本质上是一个 Java 应用程序 那么又如何部署呢 通常来说 SpringBoot 部署会采用两种方式 全部打包成一个 jar 包 或者打包成一个 war 包 测试运行情况的
  • 通信 / 网络地址转换(NAT)过程

    一 英文全称 Network Address Translation 二 诞生原因 解决因为可用 IP 过少导致有些设备无法连入网络的问题 该技术的核心思想是多个私有网络 ip 通过一个公共 ip 连入网络 三 过程说明 为了实现上述思想
  • js实现多选,全选,反选的功能

    需求 在前端页面实现一个多选的模块 我们可以全选 不选 多选 反选 思路 需要按钮或者是多选框 最主要的是什么 能获取到四个等待选择的对象 足球 篮球这些 还有一个 被选中的状态是什么 没有被选中的状态又是什么 通过查阅手册 第三项 che
  • 没有网关可以互相通信_网络知识,分分钟通俗了解网关、DNS、子网掩码、MAC地址、DHCP...

    弱电智能化工程2018 什么是网关 DNS 子网掩码 它有什么作用 确实 我们平时在网络中总是在不断的提到网关 却很少真正的去了解它 一 什么是网关 1 什么是网关 网关是一种充当转换重任的计算机系统或设备 在使用不同的通信协议 数据格式或
  • 电学基本概念

    电压 电流 电阻 功率 交流 直流 电压 电流 电阻功率之间关系
  • 如何简单理解概率分布函数和概率密度函数?

    本篇文章是在 应该如何理解概率分布函数和概率密度函数 的基础上整理来的 非常感谢原作者 目录 1 先从离散型随机变量和连续性随机变量说起 2 离散型随机变量的概率函数 概率分布和分布函数 2 1 概率函数和概率分布 2 1 1 概率函数 2
  • MyBatis分页PageHelper和RowBounds区别

    测试机器 笔记本 win7 cpu i5 4210M 8G内存 测试数据 单表 181w数据 mybatis常用分页组件PageHelper和RowBounds 1 性能对比 2 原理分析 PageHelper 物理分页 通过拦截器加 li
  • 用chrony使两台机器之间同步时间

    用chrony使两台机器之间同步时间 chrony服务部署 两台机器 a 第一台机器从阿里云同步时间 第二台机器从第一台机器同步时间 b 第一台服务器使用系统时间作为第二台服务器的时钟源 第一台服务器层级设置为6 a 在第一台机器的 etc
  • [Qt] [adb] Qt中通过adb给手机发送指令

    Qt中给手机发送adb指令 需要通过QProcess类来操作 通过adb device获取设备连接状态 void DeviceInfo findDevice 发送adb指令 QProcess processFindDev gt start
  • 固态硬盘usb测试软件,固态硬盘检测修复坏道三级OP设置软件HDAT2 5.3 ISO版

    HDAT2是用于测试或诊断硬盘 SSD和USB设备的程序 这里分享的是iso版 更新日期是2016年11月 你必须把它用ultraiso做成U盘启动盘 启动电脑后在dos环境下使用 这里介绍的主要功能是修复ssd的坏道 也就是Secure
  • 创建一个自定义插件,实现一个登录页面

    运行结果如下 话不多说 直接开整 div div
  • 05【掌握】 SpringBoot 清空Redis所有缓存

    package top yangbuyi system controller import org springframework beans factory annotation Autowired import org springfr
  • css3顺时,CSS3(transforms)

    transforms 主要包括了两个属性 transform 只可以转换 由盒子模型定位的元素 而根据经验也就是 具备了display block这个属性 由盒子模型定位元素 transform 指定作用在元素上的变形 取值为空格分隔的一些
  • Spring Cloud灰度部署

    1 背景 灰度部署 在我们系统发布生产环境时 有时为了确保新的服务逻辑没有问题 会让一小部分特定的用户来使用新的版本 比如客户端的内测版本 而其余的用户使用旧的版本 那么这个在Spring Cloud中该如何来实现呢 负载均衡组件使用 Sp
  • 【安卓学习之工具学习】网络通信测试工具-socket/post/get

    在安卓开发中 网络请求基本上都有用到 有时候我们通信出现问题 我们不知道是服务端问题还是客户端问题 就可以使用第三方的工具来测试 以保证能更好的确定出现bug的方向 当然也有时候接手别人开发的app 但又不知道里面的通信协议 也可以通过这个
  • Visio制图拷贝到word文档中显示不全、只显示一行

    问题描述 Visio 2016绘制技术流程图完毕 拷贝到Word 2016中时 只显示一行 最底部部分 上面其他部分只能看到最外边边框其他部分侵入上方文本区 且不显示 解决方案 选中要插入的行 设置行间距为1 5倍 我的问题是解决了 欢迎补
  • NVDLA系列之C-model:cvif<100>

    NV NVDLA cvif cpp pdp2cvif wr req b transport void NV NVDLA cvif pdp2cvif wr req b transport int ID nvdla dma wr req t p
  • JDBC中对url的一些理解

    大家都知道 用java来连接数据库 一般都是class forName 然后用DriverManager来生成一个Connection 生成Connection的method为 DriverManager getConnection 其中里
  • STM32_USART 串口通讯

    STM32 USART 串口通讯 通信方式的分类 按照通信方式分类 按照数据传送方向分类 通信接口及其说明如下图所示 STM32的串口通信 引脚接线 串口通讯的过程 串口发送数据 串口接收数据 USART中断请求 通信方式的分类 按照通信方