51单片机系列-串口(UART)通信技术

news2024/9/28 14:09:28

🌈个人主页: 羽晨同学

💫个人格言:“成为自己未来的主人~”  

并行通信和串行通信

 并行方式

并行方式:数据的各位用多条数据线同时发送或者同时接收

并行通信特点:传送速度快,但因需要多根传输线,曾经在近距离、高速率通信中使用,但是这个东西后来不用了。

串行方式

是将数据排成一串,分成一位一位的形式在一条传输线上逐个的传送

串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话线,网线等设备传输,但数据的传送控制比并行通信复杂

 异步通信和同步通信

异步通信

异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程,为使双方的收发协调,要求发送和接收设备的时钟尽可能一致,我们要学习的单片机的串口通信就是异步通信方式

异步通信是以字符为单位进行传输,字符和字符之间的间隙是任意的,但是每个字符的各位之间的间隙是相同的,字符之间是异步的,但是字符之内每个位之间是同步的

 异步通信的特点,不会要求收发双方的时钟的严格一致,实现容易,设备开销较小,但是每个字符需要加2-3位,各个帧之间还有间隔,所以传输效率不高。

同步通信

同步通信和异步通信的最大的区别就是要建立对收发双方时钟的绝对控制,使得双方达到绝对的同步,此时除了字符和字符之间,位与位之间也要保持同步关系。

串行通信的线路输出方式

单工

单工就是数据传输仅能沿一个方向,不能实现反向传输

半双工

数据传输可以沿两个方向,但是要分时进行

全双工 

 数据传输不仅可以沿两个方式,而且可以同时进行

从左到右分别是单工,半双工,全双工

串行通信常用的数据检验方式

奇偶检验

在发送数据时,数据位尾随的1为奇偶检验位(1/0)

奇检验时,数据中1的位数和检验位1的位数之后应为奇数,偶检验时,位数之后应为偶数,若发现不一致,则代表着传输数据的过程出现了差错

 

代码和检验

 是发送方将所发数据求和,产生一个字节的校验字符(校验和)加到数据的末尾,接收方接受数据同时进行求和,然后将求到的和与校验和进行比较,看看是不是一样的。

信号的调制和解调

利用解调器,把数字信号转换成模拟信号,然后送到通信线路上去,再由调制器把从通信线路上收到的模拟信号转换成数字信号。由于通信是双向的,调制器和解调器合并在一个装置里面,这就是调制解调器。

RS-232接口

RS-232C接口规定使用25针连接器,后来简化成了9针连接器

在这里面,需要注意的主要是2 3 7

RS-232C电平与TTL电平转换驱动电路

第一个是由TTL-232,第二个是由232-TTL

这个是现在的通信芯片

采用RS-232存在的问题

传输距离短,传输速率低,一般不要超过15米,线路好的也不要超过几十米,最高传送速率有限

有电平转移,要求双方共地

抗干扰信号差,采用单端输入输出,存在干扰和噪声,为了提高信噪比,不得不采用较大的电压摆幅。

RS-422A接口

RS-422A输出驱动器是双端平衡驱动器,如果其中一条逻辑是1,另一条逻辑就是0 

RS-485接口

RS-485是RS-422A的变型,RS-485用于半双工,而RS-422A用于全双工,如果要连接更多的设备,还可以使用中继器

RS-485的信号传输采用两线间的电压差来表示逻辑0和逻辑1

他可以多个设备进行互联:

一个主机,多个从机

RS-485是一点对多点的通信接口,采用双绞线的结构,普通的PC机不带RS485接口,各个节点的识别是通过设置不同的站地址来实现的。

UART

 UART是通用异步串行通信接口,为全双工通信,至少需要两根数据线用于通信双方进行数据双向同时传输

TXD是发送引脚,RXD是接受引脚,GND是地信号

数据帧格式

异步串行通信的数据帧由起始位,数据位,校验位,停止位4部分组成

 

起始位:位于数据帧开头,占1位,始终为低电平,用于向接收设备表示发送端开始发送1帧数据

数据位:要传输的数据信息,可以是字符或数据,一般为5-8位,由低位到高位一次传送

校验位:位于数据位之后,占1位,用于发送数据的校验,或传送多机串行通信的联络信息

停止位,始终为高电平,表示发送结束

 

T1,R1是中断位,需要手动清0,验证数据有没有接收完

有两个物理上独立的接收,发送缓冲器SBUF,它们占用同一地址99H,接收器是双缓冲结构,发送时GPU是主动的,不会产生重叠错误。

写SBUF时,操作的是发送缓冲器,读SBUF时,就是读接收缓冲器的内容

 发送器工作原理

发送控制器,将SBUF发中的并行数据转为串行数据,并自动添加起始位,可编程位,停止位。

这一过程结束后自动使发送中断请求标志位置为1,表明已经将SBUF发中的数据输出到TXD引脚,即SBUF发为空

接受数据工作原理

在输入移位寄存器和定时器T1的配合下,使来自RXD引脚的串行数据转成并行数据,并自动过滤掉起始位,可编程位,停止位,这一过程结束后自动是的中断请求标志位置为1,表明数据都存放到了SBUF收,即SBUF收为满

串行控制寄存器SCON

 

SCON:地址是98H,T1和R1硬件置为1后,需要用软件方式清0

电源控制寄存器PCON

 

空闲控制位和掉电控制位给单片机省电,控制控制位可以将单片机进入休眠模式,只有外部中断可以唤醒

中断允许控制器IE中涉及到串行中断允许控制位ES

ES为串行中断允许控制位,设置ES为0时,将禁止串行中断,设置ES为1时,允许串行中断

4种串口工作方式解读

方式1

方式1是10位数据的异步通信口,TXD是数据发送引脚,RXD是数据接收引脚

方式2

方式3

方式2和方式3基本相同,就是波特率不同,方式2的波特率固定为晶振频率的1/64或者1/32,方式3的波特率由定时器T1的溢出率决定。

方式0

数据由RXD引脚输入或者输出,同步移位脉冲由TXD引脚输出,发送和接收均为8位数据,低位在先,高位在后,波特率固定为fosc/12

方式0输出 

方式0输入

好了,本次的文章就到这里了,我们下次再见。 

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

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

相关文章

20.指针相关知识点1

指针相关知识点1 1.定义一个指针变量指向数组2.指针偏移遍历数组3.指针偏移的补充4.指针和数组名的见怪不怪5.函数、指针、数组的结合 1.定义一个指针变量指向数组 指向数组首元素的地址 指向数组起始位置&#xff1a;等于数组名 #include <stdio.h>int main(){int ar…

LeetCode 2266. 统计打字方案数

Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对应字母 i 次&#xff0c;i 是该字母在这个按键上所处的位置。 比方说&#xff0c;为了按出字母 s &#xff0c;Alice 需要按 7 四次。类似的&#xff0c; Alice 需…

Qt --- Qt窗口

一、前言 前面学习的所有代码&#xff0c;都是基于QWidget控件。QWidget更多的是作为别的窗口的一个部分。 Qt中的QMainWindow就是窗口的完全体 Menu Bar菜单栏 Tool Bar Area 工具栏&#xff0c;类似于菜单栏&#xff0c;工具栏本质上就是把菜单中的一些比较常用的选项&…

活动展览棚:灵活多变的展览解决方案—轻空间

在快速变化的市场环境中&#xff0c;活动展览棚作为一种创新的展示空间&#xff0c;正受到越来越多企业和组织的青睐。无论是展览、活动、还是市场推广&#xff0c;活动展览棚都能提供高效、灵活的解决方案&#xff0c;为品牌传播和产品展示带来全新体验。 便捷的搭建与拆卸 活…

C. Cards Partition 【Codeforces Round 975 (Div. 2)】

C. Cards Partition 思路&#xff1a; 可以O(n)直接判断&#xff0c;牌组从大到小依次遍历即可。 不要用二分答案&#xff0c;因为答案不一定是单调的 代码: #include <bits/stdc.h> #define endl \n #define int long long #define pb push_back #define pii pair<…

Angular与Vue的全方位对比分析

一、框架概述 Angular Angular是由Google开发和维护的一款开源JavaScript框架。它采用TypeScript编写&#xff0c;具有一套完整的开发工具和规范。Angular遵循MVC&#xff08;Model - View - Controller&#xff09;或更确切地说是MVVM&#xff08;Model - View - ViewModel&a…

【Python】数据可视化之分布图

分布图主要用来展示某些现象或数据在地理空间、时间或其他维度上的分布情况。它可以清晰地反映出数据的空间位置、数量、密度等特征&#xff0c;帮助人们更好地理解数据的内在规律和相互关系。 目录 单变量分布 变量关系组图 双变量关系 核密度估计 山脊分布图 单变量分布…

超全面的线程编程实战指南

第一部分&#xff1a;线程基本概念 一、线程简介 线程是操作系统能够进行运算调度的最小单位&#xff0c;它是一个进程内的独立控制流。线程之间共享同一进程的资源&#xff0c;如内存空间和其他系统资源。 二、线程的优势 效率高&#xff1a;由于线程共享相同的地址空间&a…

用Python+flask+mysql等开发的Excel数据资产落地工具

话不多说 1)Excel文件上传,列表预览 2)选中要导入结构及数据的Excel文件 约束说明: 2.1)Excel文件的第一行约定为表头名称 2.2)系统自动识别字段列名及数据类型,目前不支持合并表头 3)Excel建表导入数据成功后,可在表源列表中预览查看 4)对数据表源可进行透视图设计管理,可对…

Vue-Bag-Admin 采用漂亮的 Naive UI 构建的开源中后台系统,基于 Vue3 / Vite / TypeScript 等最新的前端技术栈

这是一款完成度很高、实用性很强的 admin 前端框架&#xff0c;颜值不错&#xff0c;推荐给大家。 Vue-Bag-Admin 在官网上也直接称为 Bag-Admin&#xff0c;这是一款专门为企业项目搭建中后台管理平台的前端框架&#xff0c;基于目前最新的前端技术栈 Vue3、Vite、TypeScript…

双十一儿童耳勺哪款好?双十一儿童专用掏耳神器推荐!

近期收到很多后台私信问儿童应该选择哪款耳勺&#xff0c;现在市面上掏耳神器众多&#xff0c;但要选择一个能适合儿童专用的产品要仔细斟酌。 如果挑选到不符合或者劣质的儿童掏耳工具&#xff0c;不仅清洁不干净不说&#xff0c;还会有损害儿童肌肤的风险&#xff01;那么专为…

Llama 3.2 90B刚开源就被Molmo-72B全面击败!

Meta此次发布的Llama 3.2一个新特性是视觉模型&#xff0c;包括11B和90B&#xff0c;作为首批支持视觉任务的Llama模型&#xff0c;但是allenai开源的多模态Molmo-72B&#xff0c;在视觉评测上全面击败Llama 3.2 90B。 两个新发布的开源LLM之间的基准测试比较&#xff1a;Molm…

leetcode163.缺失的区间,模拟

leetcode163.缺失的区间 给定一个排序的整数数组 nums &#xff0c;其中元素的范围在 闭区间 [lower, upper] 当中&#xff0c;返回不包含在数组中的缺失区间。 示例&#xff1a; 输入: nums [0, 1, 3, 50, 75], lower 0 和 upper 99, 输出: [“2”, “4->49”, “51-&…

OpenSource - 开源WAF_SamWaf

文章目录 PreSafeLine VS SamWaf开发初衷软件介绍架构界面主要功能 使用说明下载最新版本快速启动WindowsLinuxDocker 启动访问升级指南自动升级手动升级 在线文档 代码相关代码托管介绍和编译已测试支持的平台测试效果 安全策略问题反馈许可证书贡献代码 Pre Nginx - 集成Mod…

关系模型与关系代数——数据库原理 总结2

2.1 关系模型 关系数据结构 关系模型的数据结构是二维表&#xff0c;亦称为关系。关系数据库是表的集合&#xff0c;即关系的集合。表是一个实体集&#xff0c;一行就是一个实体&#xff0c;它由有关联的若干属性的值所构成。 关系模型的相关概念 列就是数据项 或 字段 或 属…

C++那些你不得不知道的(2)

C那些你不得不知道的&#xff08;2&#xff09; 1、缺省参数在使用的遍历 &#xff08;1&#xff09;以下是实现顺序表的初始化和检查容量空间的方式&#xff1a; void Init(list* ps) {ps->arr NULL;ps->Capacity ps->size 0; }void CheckCapacity(list* ps) {…

量化系统QTYX使用攻略|“自动交易”篇——ETF量化框架,集成“策略回测仓位风控下单”(更新v2.9.2)...

QTYX系统简介 股票量化交易系统QTYX是一个即可以用于学习&#xff0c;也可以用于实战炒股分析的系统。 分享QTYX系统目的是提供给大家一个搭建量化系统的模版&#xff0c;最终帮助大家搭建属于自己的系统。因此我们提供源码&#xff0c;可以根据自己的风格二次开发。 关于QTYX的…

ABAP版本管理

在开发中ABAP管理有查看&#xff0c;生成&#xff0c;比对&#xff0c;远程比对&#xff0c;回滚&#xff0c;删除等等操作。日常中往往会遇到需要回滚到上一版本的代码&#xff0c;但是ABAP不像git代码管理那么专业&#xff0c;但是也是可以回滚代码的。在此记录一下操作过程。…

大模型时代,2024的传统程序员还需要写代码吗?需要学习大模型吗?

一&#xff0e;引言 随着大模型&#xff08;如GPT等&#xff09;的迅猛发展&#xff0c;软件开发领域中我们的开发方式也在悄然发生变化。当然&#xff0c;我作为一名传统的Java后端开发工程师&#xff0c;在职业生涯的初期主要专注于使用多种数据结构以及算法编写业务代码。 …

所有测试人,下半年的新方向(大模型),赢麻了!!!

现在做测试&#xff0c;真的挺累的。 现在测试越来越难做&#xff0c;晋升困难&#xff0c;工资迟迟不涨……公司裁员&#xff0c;测试首当其冲&#xff01;&#xff01; 做测试几年了&#xff0c;还没升职&#xff0c;就先到了“职业天花板”。 想凭工作几年积累的经验&…