STM32-UART-串口通信框图-波特率计算

1.处理器与外部设备通信的两种方式:

并行通信

  • 传输原理:数据各个位同时传输。
  • 优点:速度快
  • 缺点:占用引脚资源多

串行通信

  • 传输原理:数据按位顺序传输。
  • 优点:占用引脚资源少
  • 缺点:速度相对较慢

2.串行通信:

2.1按照数据传送方向,分为:

  • 单工:数据传输只支持数据在一个方向上传输
  • 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
  • 全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

在这里插入图片描述

2.2串行通信的通信方式:

  • 同步通信:带时钟同步信号传输。SPI,IIC通信接口

有时钟同步信号,A传到B的过程中,每一个位都是根据时钟来传的,比如时钟到达上升沿,传1bit。

  • 异步通信:不带时钟同步信号。UART(通用异步收发器),单总线

A和B之间没有时钟同步信号,双方先约定一些波特率、起始位等,计算出发送每一bit占用的时间。

常见的串行通信接口:

如果是全双工,那么发送和接收都要有独立的引脚。半双工一般只占用一个独立的发送\接收引脚。

如果是同步通信,那么一定有同步时钟。

通信标准引脚说明通信方式通信方向
UART (通用异步收发器)TXD:发送端 RXD:接受端 GND:公共地异步通信全双工
单总线 (1-wire)DQ:发送/接受端异步通信半双工
SPISCK:同步时钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入同步通信全双工
I2CSCL:同步时钟 SDA:数据输入/输出端同步通信半双工

3.异步串口通信UART

包含:

物理层(电气层:接口决定):通信接口(RS232,RS485,RS422,TTL)
数据格式(数据层:芯片决定)起始位校验位等约定好
通信协议(协议层:程序决定)数据出错能检测出来等

UART异步通信方式引脚连接方法:

RXD:数据输入引脚。数据接收。TXD:数据发送引脚。数据发送。

在这里插入图片描述

TTL串口 & RS232 & RS485 & RS422

两个电路板相连,往往用到一些接口,而不是直接相连TXRX。

接口类型逻辑1 典型值逻辑0 典型值说明优缺点
TTL+5/3.30一般MCU串口引脚都支持TTL
RS232-15V~-3V3V~15V3线全双工,点对点接口电平高,传输速度相对较低,传输距离近
RS485两根线的压差+(2~6)V压差-(2~6)V2线半双工,点对多,主从通信。使用压差传递信号。传输速度高可达10M,抗干扰能力强,距离远。
RS422相对比较少用。

USB串口

MCU发送串口信号,经电平转换芯片变为USB信号,通过USB连到电脑,电脑可以直接识别USB信号。

在这里插入图片描述

STM32 UART异步通信方式引脚:

串口号RXDTXD
1PA10(PB7)PA9(PB6)
2PA3(PD6)PA2(PD5)
3PB11(PC11/PD9)PB10(PC10/PD8)
4PC11(PA1)PC10(PA0)
5PD2PC12
6PC7(PG9)PC6(PG14)

4.STM32串口数据格式和通信过程

STM32串口通信过程:信号一位一位传过来,速度根据波特率来传。串行移位寄存器一个一个读过来,然后一次性写入到输入数据缓冲器里,MCU从中读取数据。

MCU写输出数据缓冲器,然后一次性给串行移位寄存器,然后在波特率控制下,把数据一位位送到外部设备。

在这里插入图片描述

STM32串口异步通信需要定义的参数:

起始位:1个逻辑0数据位开始
数据位(8位或者9位)
奇偶校验位(第9位)
停止位(1,1.5,2位)
波特率设置

在这里插入图片描述

5.STM32F4xx串口框图

TX:芯片数据发送出去,RX:数据接收。接收后放到接收移位寄存器,然后全部给接收数据寄存器,然后CPU可以通过总线读取数据。发送的话,CPU把数据写到发送数据寄存器,之后数据送到发送移位寄存器,数据一位一位的从IO口出去。

在这里插入图片描述

对于这个发送和接收移位寄存器,必须提前设定好波特率,这两个寄存器受发送控制和接收器控制。可以由下图看到:发送和接收端共用一个波特率,用于确定串行通信的速度。最下面有一个BRR寄存器,首先时钟来自于pCLKx ,pclk经过/usartdiv和/(8*(2-OVER8)),OVER8由控制寄存器的一个位决定可能为0或1,把这个时钟作为发送器和接收器的时钟,控制发送和接收移位寄存器,实现控制传输数据的速度。

对于接收器控制和发送控制,图中还有几个寄存器,右边SR寄存器,记录一些状态标志位,左边CR1,有一些使能位,高位连接中断控制,可以触发一些中断。

在这里插入图片描述

6.波特率计算方法

波特率决定了串口的通信速度,如何计算。

上图OVER8:在控制寄存器 1 (USART_CR1)中可找到,其中采样频率越高,容错性越好,但是限制了速度。如果8倍过采样可以提高速度。

在这里插入图片描述

小数波特率生成:

对 USARTDIV 的尾数值和小数值进行编程时,接收器和发送器(Rx 和 Tx)的波特率均设置为相同值。

在这里插入图片描述

当fck确定,又要达到某一种波特率,此时可以计算出USARTDIV的值是多少。它的值是由USART_BRR 寄存器决定的。

USARTDIV 是一个存放在 USART_BRR 寄存器中的无符号定点数。
当 OVER8=0 时,小数部分编码为 4 位并通过 USART_BRR 寄存器中的 DIV_fraction[3:0] 位编程。
当 OVER8=1 时,小数部分编码为 3 位并通过 USART_BRR 寄存器中的 DIV_fraction[2:0] 位编程,此时 DIV_fraction[3] 位必须保持清零状态。
注意: 对 USART_BRR 执行写操作后,波特率计数器更新为波特率寄存器中的新值。因此,波特率 寄存器的值不应在通信时发生更改。

在这里插入图片描述

如图所示,USART中DIV_Mantissa是设置USARTDIV 的整数部分,DIV_Fraction是设置USARTDIV的小数部分。如果经过公式算出USARTDIV=37.5该如何设置 USART_BRR寄存器?

可以看到波特率寄存器 (USART_BRR):位15:4一共12位,如果设置USARTDIV=37.5,只需要把高十二位设置成37 。小数则是由低4位决定的,由于低四位一共有2^4=16个数,占满了0-1,所以可以0.5*16=8,赋给低四位即可。

在这里插入图片描述

在这里插入图片描述

可以总结出:OVER8=0时波特率计算公式:

在这里插入图片描述

①根据波特率和串口时钟频率,计算出USARTDIV的值。

②DIV_Fraction=USART的小数部分 X16所得的整数

DIV_Mantissa=USART的整数部分

假如OVER8=0,串口时钟为90M,需要得到115200的波特率,根据公式计算得到USARTDIV=90000000/(115200*16)=48.828

DIV_Fraction=16*0.828的整数部分=13=0X0D;

DIV_Mantissa=48=0x30;

得到USART1->BRR值为0x30d,只要设置串口1的BRR寄存器值位0x30d就可得到115200的波特率。

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

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

相关文章

STM32-串口发送数据-过程与配置

串口发送过程配置流程 HAL库中串口寄存器定义文件: stm32f429xx.h F429芯片 stm32f767xx.h F767芯片 stm32f103xx.h F103芯片 stm32fnnnx.x.h 其他芯片 可以在其中找到USART_TypeDef:最终会映射到寄存器的地址。 typedef struct {__IO uint32_t CR1;…

STM32 串口接收流程-串口接收中断

串口接收 串口接收流程 编程USARTx_CR1的M位来定义字长。编程USARTx_CR2的STOP位来定义停止位位数。编程USARTx_BRR寄存器确定波特率。使能USARTx_CR1的UE位使能USARTx。如果进行多缓冲通信,配置USARTx_CR3的DMA使能(DMAT)。使能USARTx_CR1的RE位为1使…

STM32-外部中断配置-外部中断实验

STM32-外部中断原理与配置 IO口外部中断原理概述 STM32控制器支持的外部中断/事件请求 中断线M3M4M7EXTI线0~15:对应外部IO口的输入中断。√√√EXTI线16:连接到PVD输出。√√√EXTI线17:连接到RTC闹钟事件。√√√EXTI线18:连接到USB OTG…

STM32-独立看门狗原理-实验

独立看门狗原理概述 为什么要看门狗: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继…

STM32-窗口看门狗-工作过程-配置-实验

窗口看门狗 窗口看门狗概述 之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内…

音频和视频的基础知识

目录PCM-脉冲编码调制录音的原理记录声音-音频数字化音频数字化-PCM采样采样采样率采样定理量化位深度编码声道(Channel)比特率信噪比编码(Encode)解码(Decode)常见的音频编码和文件格式无损Monkeys AudioF…

神经网络算法-论证单层感知器的局限性

神经网络算法-论证单层感知器的局限性 今天课上学习了一个思路 将真值表转换到平面直角坐标系中 来论证线性可分还是不可分,挺有意思记录一下。 简单感知器模型实际上仍然是MP模型的结构,但是它通过采用监督学习来逐步增强模式划分的能力,达…

python 通过pip安装库 pycharm里面使用第三方库

安装所需的模块(python) pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 首先命令行输入pip3 --version查看是否有pip C:\Users\jym>pip3 --version pip 19.2.3 from d:\program files\python38\l…

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信python实例

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信实例socket是什么?服务器和客户端通信的流程python 实现TCP socket通信例子关于Host和PORT的设置socket函数socket编程思路基于TCP socket的HTTP服务器分析HTTP服务器代码服务器的response文本客户端的r…

判断ROS版本号-ubuntu20.04安装ROS_noetic-修改镜像源

判断ROS版本号-ROS安装-修改镜像源 linux版本:ubuntu20.04 ROS版本:noetic判断ROS版本号安装ROS改镜像源判断ROS版本号 机器人用的是树莓派、stm32、ros。 首先要配置网络,把机器人上的sd卡插到树莓派开发板上,然后配置连接的热点。 接下来&#xff0…

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令ROS是什么ROS文件系统文件系统工具:rospack、roscd、rosls创建ROS 软件包catkin是什么创建和构建一个catkin工作空间:catkin软件包的结构catkin工作空间中存放软件包的结构创建catkin软件包-catkin_c…

ubuntu 中 ROS 一些报错的解决

1. Unable to load type jymubuntu:~/catkin_ws$ rosservice args /add_two_ints ERROR: Unable to load type [beginner_tutorials/AddTwoInts]. Have you typed make in [beginner_tutorials]?由于当前使用的终端的工作环境没有更新导致无法找到自定义的消息。使用下面的命…

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本rosedmsg和srv创建msg使用rosmsg创建srv使用rossrv重新make一下软件包编写发布者节点发布者节点代码解析编写订阅者节点订阅者节点代码解析构建节点运行发布者和订阅者节点编写服务节点编写客户端节…

从空间中理解线性代数

线性代数-从空间中理解总结向量线性组合空间的基 Basis张成的空间 Span线性相关和线性无关向量空间的一组基变换线性变换数值描述线性变换复合变换行列式矩阵的用途线性方程组逆矩阵列空间零空间秩非方阵基变换基变换矩阵特征向量 特征值特征基关于坐标总结 空间中不共线的两个…

python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

python 做视频后期单个视频转图片所有图片转视频视频压缩 - ffmpeg图片降低分辨率图像处理这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。 对视频进行后期处理,思路就是,视频转图片,然后对图片进行处理…

矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积

一小部分矩阵论的整理复习,这个由于公式输入的太麻烦了,所以就弄了一点。后面直接看着书复习的。 矩阵论复习线性空间基与维数基变换公式、过渡矩阵、坐标变换公式线性子空间齐次方程组的解空间特征子空间生成子空间交空间和空间维数定理直和线性映射线性…

使用Anaconda3安装pytorch、paddle环境并在pycharm里面进行环境测试

安装完Anaconda后,也配好了框架的环境,接下来就需要在pycharm里面写代码了。 Anaconda里面的一些命令 1.新建环境,pytorch 是自己命的名(新建虚拟环境)conda create -n pytorch python3.82.看conda 环境中&#xff0…

Anaconda配置的环境里面增加第三方库的方法

用Anaconda3配置了paddle框架的环境,但是环境里面没有项目代码用到的一些包,比如matplotlib。 在Anaconda的Powershall里面输入如下内容可以增加一些包: 有三句话,第一句是看在conda 环境中,创建的所有环境。 第二句话…

python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量

python numpy常用操作 Numpy基本操作 # 导入numpy import numpy as np # 生成numpy数组 x np.array([1.0, 2.0, 3.0]) print(x) # [1. 2. 3.] print(type(x)) # <class numpy.ndarray> # Numpy的算术运算 x np.array([1.0, 2.0, 3.0]) y np.array([2.0, 4.0, 6.0]…

【数据结构】——期末复习题题库(1)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…