STM32-串口通信波特率计算以及寄存器的配置详解

news/2024/10/15 20:20:42/

您好,我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台,本着大家一起互相学习的心态而建立,不太成熟,希望志同道合的朋友一起来,抱歉打扰您了QQ群372991598

串口通信基本原理
处理器与外部设备通信的两种方式
并行通信
传输原理:数据各个位同时传输。

优点:速度快
缺点:占用引脚资源多

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

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

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

串行通信的通信方式

同步通信:带时钟同步信号传输。如SPI,lIC通信接口
异步通信:不带时钟同步信号。如UART(通用异步收发器),单总线

常见串行通信接口
在这里插入图片描述
STM32的串口通信接口
UART:通用异步收发器

USART:通用同步异步收发器

大容量STM32F10x系列芯片,如STM32F103ZET6,包含3个USART和2个UART

可以在芯片的数据手册中查到各串口所接的引脚
在这里插入图片描述
UART异步通信方式特点
全双工异步通信;
分数波特率发生器系统,提供精确的波特率;
发送和接收共用的可编程波特率,最高可达4.5Mbits/s;
可编程的数据字长度(8位或者9位);
可配置的停止位(支持1或者2位停止位);
可配置的使用DMA多缓冲器通信;
单独的发送器和接收器使能位;
检测标志:1.接收缓冲器 2.发送缓冲器空 3.传输结束标志
多个带标志的中断源。触发中断。
其他:校验控制,四个错误检测标志。
串口通信过程
在这里插入图片描述
STM32串口异步通信需要定义的参数
当通信线路上电平状态为1,表示当前线路上没有数据传送,串口处于空闲。

1.起始位:先发出一个逻辑"0"的信号,表示传输字符的开始。

2.数据位(8位或者9位):紧接着起始位之后,数据位的个数可以是4、5、6、7、8等,构成一个字符,从最低位开始传送。

3.奇偶校验位(第9位):数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。可有可无,CRC校验更准确

4.停止位(1,15,2位):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

5.波特率设置

波特率是每秒钟传输的比特位,一般为4800、9600、115200,波特率越大,则数据传输速度越快,但这样就需要接收端也要快速的接收,同时容易受到干扰;波特率越小则传输越慢,抗干扰能力加强;

一般工业领域使用9600比较多,如果是单片机与模块之间的通信,如WiFi模块,则用115200,能及时通信
常用的串口相关寄存器
USART_SR状态寄存器

USART_ DR数据寄存器

USART_BRR波特率寄存器

寄存器的详细描述在stm32中文参考手册中25.6节USART寄存器描述中可以查看到

波特率计算方法
在STM32中文参考手册的USART框图中,这一部分是波特率设置示意图
在这里插入图片描述

在这里插入图片描述
上式中,fPCLKx是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1);USARTDIV是一个无符号定点数。我们只要得到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR的值,反过来,我们得到USART1->BRR的值,也可以推导出USARTDIV的值。但我们更关心的是如何从 USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率,和 fPCLKx的时钟,要求的就是USART_BRR的值。
只有USART1使用PCLK2(最高72MHz),其它USART使用PCLK1(最高36MHz)。
参考手册中的波特率计算表
在这里插入图片描述


http://www.ppmy.cn/news/1462514.html

相关文章

牛客周赛 Round 42

小红叕战小紫 #include "bits/stdc.h" using namespace std;#define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0); #define all(x) x.begin(),x.end() #define pi pair<int,int> #define vi vector<int> #define …

芯片半导体研发公司的数据防泄漏解决方案

在当今信息化时代&#xff0c;半导体研发公司的数据防泄密工作显得尤为重要。半导体行业涉及大量的核心技术、研发文档和客户信息&#xff0c;一旦数据泄露&#xff0c;将给企业带来无法估量的损失。因此&#xff0c;建立一套有效的数据防泄密解决方案成为半导体研发公司的当务…

Behind the Code:Polkadot 如何重塑 Web3 未来

2024 年 5 月 17 日 Polkadot 生态 Behind the Code 第二季第一集 《创造 Web3 的未来》正式上线。第一集深入探讨了 Polkadot 和 Web3 技术在解决数字身份、数据所有权和去中心化治理方面的巨大潜力。 &#x1f50d; 查看完整视频&#xff1a; https://youtu.be/_gP-M5nUidc?…

ubuntu18 安装sudo

ubuntu18 安装sudo 在Ubuntu 18.04上安装sudo通常是不必要的&#xff0c;因为sudo是Ubuntu及其衍生版本的基本包之一&#xff0c;默认情况下就已经安装。如果出于某种原因&#xff0c;sudo没有预装或者你需要升级到最新版本&#xff0c;你可以通过以下命令安装或更新它&#x…

鸿蒙应用开发之OpenGL应用和X组件6

前面已经分析怎么样注册X组件的回调函数,然后这些回调函数就可以在X组件合适的时机进行回调,就可以让C++的代码在合适的时间做合适的事情。从前也知道从GetRender函数会创建一个渲染对象,以便在后面进行OpenGL绘制。 现在就来分析一下GetRender函数,它的代码如下: Plugi…

使用MPLS解决BGP的路由黑洞(详解)

我们知道在MPLS中数据的转发不再依靠路由表而是靠标签&#xff08;注意&#xff1a;标签是在路由的基础上形成的&#xff09;。所以在BGP中&#xff0c;我们依靠的就是这个特性来解决BGP的路由黑洞。 BGP路由黑洞的解释&#xff1a;BGP的路由黑洞其实就是路由层面可达&#xff…

第N4周:中文文本分类——Pytorch实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据集&#xff1a;train 一.加载数据 import torch import torch.nn as nn import torchvision from torchvision import transforms,d…

分割训练日志的可视化

这一部分主要是将mmdetection训练得到的json文件可视化&#xff0c;代码主要源于github&#xff0c;具体哪一个忘记了&#xff08;readme里面没有原址…&#xff09;是专门做的mmdetection 结果可视化的&#xff0c;非常强&#xff01;&#xff01;。使用时如果出现keyerror的话…