串口通信USART

前言

通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统;单片机有了通信的功能,就能和别的模块互联;
通信协议:制定通信的规则,通信双方按照协议规则进行数据收发;

名称

引脚

双工

时钟

电平

设备

USART

TXRX

全双工

异步

单端

点对点

 有时钟线可以实现同步传输;

单端通信指的是对GND的电平差;差分是对两个引脚的电平差(差分信号)通信时不需要GND,使用差分信号可以极大的提高抗干扰能力,所以差分信号一般传输速度和距离都会非常高;

硬件电路

简单双向串口通信有两根通信线(发送端TX和接收端RX)
TX与RX要交叉连接
当只需单向的数据传输时,可以只接一根通信线
当电平标准不一致时,需要加电平转换芯片

电平标准

 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

TTL电平:+3.3V或+5V表示1,0V表示0(单片机常见)
RS232电平:-3~-15V表示1,+3~+15V表示0
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

串口参数及时序

波特率:串口通信的速率(发送和接收速率要相同,不然会有重复接收数据或者丢失数据,在二进制调制下,也可以说成比特率bit/s,规定了每隔多少秒发送一位)
起始位:标志一个数据帧的开始,固定为低电平
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
校验位:用于数据验证,根据数据位计算得来
停止位:用于数据帧间隔,固定为高电平
 

无检验位
有检验位

 串口的停止位是可以配置的,配置成一位或者两位

USART简介

 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器;

USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里

自带波特率发生器,最高达4.5Mbits/s
可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
可选校验位(无校验/奇校验/偶校验)
支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

STM32F103C8T6 USART资源: USART1、 USART2、 USART3;硬件流控制:防止接收方处理不过来,当接收方准备好时才发送数据

常用参数:波特率9600/115200、数据位8位、停止位1位、无校验位

USART框图

TDR和RDR共用一个地址,程序上只表现一个寄存器DR,实际硬件中是两个;

TX接发送移位寄存器,RX接接收移位寄存器;
发送移位寄存器是向右移位的,和串口协议规定的低位先行是一致的,当数据移位完成后,新的数据就会自动的从TDR转移到发送移位寄存器里;

接收移位寄存器同样是向右移位的,从高位往低位移动,接收到的最后一位是高位,接收完成后会把RXNE(在接收控制器附近)标志位置1,就可以把数据读到RDR里了

发送器控制:控制发送移位寄存器工作;

接收器控制:控制接收移位寄存器工作;

硬件数据流控:控制流控的,发送设备发的太快,接收设备来不及处理,就会出现数据丢失或者覆盖的情况;通过nRTS和nCTS两个端口进行控制,n代表低电平有效(代表可以发送,拉高代表不能发送);nRTS接另一个uart的nCTS,发送电平告诉对方现在能不能接收数据;nCTS接对方的nRTS,接收对方电平,判断能不能发送数据;

SCLK控制(右边):配合发送移位寄存器工作,发送移位寄存器每移位一次,同步时钟电平就跳变一个周期,告诉对方,我移出去了一位数据(只支持输出,不支持输入)所以两个usart,不能实现同步通信;

唤醒单元(中间):可以实现多设备,上面接了一个usart的地址,可以给这个串口分配一个地址,往这个地址发数据时,唤醒单元就会唤醒开始工作(接收数据);

USART中断控制:内接中断申请位,就是状态寄存器哪里的各个标志位,比如上面的TXE(发送寄存器空),RXNE(接收寄存器非空)用来判断发送状态和接收状态;这里就是配置中断能不能通往NVIC

波特率发生器(最下面):分频器,APB时钟进行分频,得到发送和接收移位时钟;TE为1,发送器使能,发送部分的波特率有效,RE为1,接收器使能,接收部分的波特率有效;

USART基本结构

时钟来源PCLK2/1,经过波特率发生器分频后,产生的时钟通往发送控制器和接收控制器,发送控制器和接收控制器用来控制发送位移和接收位移,发送数据寄存器和发送移位寄存器配合,将数据一位一位的移出去,通过GPIO口的复用输出到TX引脚,产生串口协议规定的波形;

当数据从发送数据寄存器转移到发送移位寄存器时,会置TXE标志位,判断这个标志位,就知道是不是可以写下一个数据了;

RX引脚的波形,通过GPIO输入,在接收控制器的控制下,一位位地移入接收移位寄存器,移完一帧后,数据就会统一转移到接收数据寄存器,在转移的同时,会置RXNE标志位,检查这个标志位,就可以知道是不是接收到数据了,同时这个标志位也可以去申请中断,这样可以在收到数据时,直接进入中断函数;

图里实际上有四个寄存器,在软件层面只有一个DR寄存器给我们读写,写入DR时,数据走上面进行发送,读DR时,数据走下面进行接收;

起始位检测

通过起始位侦测,接收状态由空闲变为接收起始位;

波特率发生器

发送器和接收器的波特率由波特率寄存器BRR里的DIV确定
计算公式:波特率 = fPCLK2/1 / (16 * DIV)

除16是因为有一个16倍频率的采样时钟;计算最终时钟,要输入时钟除以16;通过配置DIV来控制波特率

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

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

相关文章

游戏开发丨基于PyGlet的简易版Minecraft我的世界游戏

文章目录 写在前面我的世界PyGlet简介实验内容游戏按键程序设计引入文件 运行结果写在后面 写在前面 本期内容:基于PyGlet的简易版Minecraft我的世界游戏 实验环境: pycharmpyglet 项目下载地址:https://download.csdn.net/download/m0_6…

2024了,你还对国产ERP有刻板印象吗?

2024了,你还对国产ERP有刻板印象吗? 近年来,我国ERP市场重磅消息不断: 前不久,由上海博科资讯股份有限公司等参与研发的中国石油昆仑 ERP 在大庆石化公司成功单轨运行,中国石油从而成为国内首个使用国产高端…

YOLOv8 Ultralytics:使用Ultralytics框架进行FastSAM图像分割

YOLOv8 Ultralytics:使用Ultralytics框架进行FastSAM图像分割 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行FastSAM图像分割参考文献 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容…

计算机毕业设计-----SSH在线电影售票选座版网站平台系统

项目介绍 本项目为前后台项目,首先分为管理员和普通用户,游客。 游客可以进入首页,必须注册成为普通用户才能进行影片的购买。管理员和普通用户进行分权限登录,登录后进入不同页面。 普通用户登录后进入首页,首页有影…

Rust-所有权和移动语义

什么是所有权 拿C语言的代码来打个比方。我们可能会在堆上创建一个对象,然后使用一个指针来管理这个对象: Foo *p make_object("args");接下来,我们可能需要使用这个对象: use_object(p);然而,这段代码之…

AI 图像自动补全 Uncrop 工具介绍

ClipDrop Uncrop是一款基于AI的图像自动补全工具,由StabilityAI旗下的Clipdrop开发。通过利用StableDiffusionXL开发的算法和深度学习技术,Uncrop可以对用户上传的图片进行自动扩展和补全,改变图片尺寸,使得图像内容得到更完整的呈…

mysql中DATE_FORMAT() 函数详解

mysql中DATE_FORMAT() 函数详解 一. 说明 在 MySQL 中,DATE_FORMAT() 函数用于将日期/时间类型的值按照指定的格式进行格式化输出。它的一般语法如下: DATE_FORMAT(date, format)其中,date 参数是要被格式化的日期/时间值,form…

Windows系统下python版本Open3D-0.18.0 的快速安装与使用

目录 一、安装Anaconda3二、安装open3d三、测试代码四、结果展示五、测试数据 Windows系统下python版本Open3D-0.18.0 的快速安装与使用由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、安装Anaconda…

极海APM035电机驱动板评测

首先感谢面包板社区提供的评测机会,技术支持服务也非常到位,爆赞! 1. 摸一摸硬件资料 板子工整漂亮,用料足。上电真图: 原理图还是挺模块挺清晰的,但是这个开发板没有手册,没有个quickstart的…

【2023我的编程之旅】系统学习C语言easyx图形库心得体会

目录 引言 C语言基础知识回顾 easyx图形库介绍 如何快速学习easyx图形库 学习笔记积累 学习成果展示 学习拓展 总结 引言 首先说一下我为什么要学习C语言easyx图形库。我接触C语言easyx图形库是在我今年一月份的时候,也是机缘巧合之下偶然在B站上看到了鸣人…

C++力扣题目450--删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先…

GZ075 云计算应用赛题第7套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷7 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…

MySQL使用通配符进行数据搜索以及过滤

目录 1.什么是通配符? 2.通配符之→百分号(%) 3.通配符之→下划线(_) 4.通配符使用注意事项 *本文涉及概念来源于图灵程序设计丛书,数据库系列——《MySQL必知必会》 1.什么是通配符? 通配符(wildcard) :用来匹配值的一部分…

Mysql从入门到精通

系列文章目录 MySQL集群及高可用-mysql主从复制1 Mysql从入门到精通 系列文章目录一、mysql主从复制二、mysql主从配置server1(主库master)三、mysql主从配置server2(从库,slave)四、测试五、主机重启服务后,二进制日志文件变化六、mysldump…

1.如何记录每个变量携带的数据:DataFrame与Series

序列格式和列表区别:序列格式可以直接汇总:均值,总和,百分位数等 DataFrame Series

一篇文章带你了解Nacos的发展史

Nacos是一个全功能的服务发现和配置管理平台,致力于帮助开发者构建和管理微服务架构。以下是Nacos的发展历程: 2018年3月:首次开源。2018年8月:进入Apache软件基金会的孵化阶段,成为Apache的孵化项目。2019年3月&…

小型洗衣机怎么用?好用不贵的小型洗衣机推荐

近期,有不少小伙伴都在议论“对于内衣是机洗好,还是手洗”这个问题,对于机洗党认为家用的洗衣机就能清洁干净内衣物,而坚定的手洗党则是认为应该用手去洗,因为机洗的话,其他大件衣服混在一起洗,…

【每日一题】82. 删除排序链表中的重复元素 II-2024.1.15

题目: 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2…

大屏项目:react中实现3d效果的环形图包括指引线

参考链接3d环形图 3d效果的环形图 项目需求实现方式指引线(线的样式字体颜色) 项目需求 需要在大屏上实现一个3d的环形图,并且自带指引线,指引线的颜色和每段数据的颜色一样,文本内容变成白色,数字内容变…

FPGA 原理图细节--画引脚

BGA引脚表示 1.1 FPGA此引脚要正确和清晰,会在“Package Pin”中用到次物理接口 1.2, MCU 只用管对应的GPIO逻辑接口就可以了 标识Bank电平 标识出对应Bank的电平,在电路设计中可以清晰的知道对应的脚位输出电平。在"IO std"也方便的选择 Ea…