串行通信的艺术:深入解析UART与奇偶校验

在这里插入图片描述

发送数据位是电流传输吗?

在UART(Universal Asynchronous Receiver/Transmitter)通信中,发送数据位不直接以电流的形式传输。而是通过改变电压水平或者光信号(在光纤通信中)来表示不同的数据位(0或1)。这种变化通常是相对于共同的地线(GND)来测量的。在电气接口中,比如RS-232,一个特定的电压范围代表一个逻辑“0”(通常是正电压),而另一个范围代表逻辑“1”(通常是负电压)。

电压表示数据位

在大多数MCU的UART通信中,数据位的传输是通过电压的变化来实现的:

  • 逻辑“0”(空闲状态):通常表示较高的电压水平。
  • 逻辑“1”:通常表示较低的电压水平,或者在某些标准中,如TTL逻辑,逻辑“1”是高电压,而逻辑“0”是低电压。

电流传输

尽管在标准UART通信中数据位的表示是基于电压变化的,但在某些特殊应用或标准中,如电流环(Current Loop)通信,数据确实是通过电流的变化来传输的。在这样的系统中,逻辑状态由电流的有无或电流的不同级别来表示,而不是电压的变化。

结论

所以,虽然标准的UART通信主要依靠电压变化来传输数据位,但理论上数据传输可以通过电流、电压、光或其他物理媒介的变化来实现,具体取决于所使用的物理层协议和硬件接口的设计。在大多数情况下,当我们讨论MCU和UART时,我们是在讨论基于电压变化的数据传输。

电压变化就是发送方电压变化,一根线上的接收方测量到电压变化吗?

是的,您的理解是正确的。在UART通信中,电压变化确实是由发送方(transmitter)产生的,而接收方(receiver)则通过测量一根线上的电压变化来检测数据。这种电压变化代表了不同的数据位——逻辑“0”和逻辑“1”。

如何工作:

  • 发送方:在UART通信协议中,发送方通过改变其输出引脚上的电压来发送数据。例如,在逻辑“1”的情况下,发送方可能会将电压保持在高电平(例如+5V或+3.3V,取决于系统的电压标准),而在逻辑“0”的情况下,它会将电压降到低电平(例如0V)。

  • 接收方:接收方的任务是监测这条连接两者的线(TX到RX)上的电压变化,并根据电压的高低来判断发送方传输的是逻辑“1”还是逻辑“0”。接收方的电路设计使其能够灵敏地检测这些变化,并将它们转换回数字信号(数据位)。

通信过程:

  1. 起始位:每次数据传输开始时,发送方首先将线路电压从空闲状态(通常是高电压)拉低到低电压,标志着起始位的开始。

  2. 数据位:随后,发送方按照设定的波特率依次发送数据位,每个位持续相同的时间间隔。接收方同步地采样这个线上的电压,以确定每个时间点的电压级别是高是低,从而得知是逻辑“1”还是逻辑“0”。

  3. 停止位和可选的奇偶校验位:数据位之后,发送方会发送停止位,通常将电压恢复到高电平,标志着一帧数据的结束。有时还会加入奇偶校验位来检测数据传输过程中的错误。

通过这种方式,UART通信允许两个设备在没有共享时钟信号的情况下,通过电压变化在一根线上可靠地传输数据。这种简单但有效的机制使得UART成为了微控制器、计算机和许多其他电子设备之间通信的一种流行方式。

奇偶校验如何发送

在UART(通用异步接收/发送)通信中,奇偶校验是一种错误检测机制,用来检查数据在传输过程中是否发生了变化或错误。奇偶校验位会添加到数据帧的末尾(在数据位之后、停止位之前),用以表示数据位中“1”的总数是奇数还是偶数,具体取决于是使用奇校验还是偶校验。

奇偶校验位的发送方式:

  1. 偶校验(Even Parity):在偶校验模式下,奇偶校验位的设置是使得包含校验位在内的整个数据帧中“1”的总数为偶数。如果数据位中“1”的数量已经是偶数,则校验位设置为0;如果“1”的数量是奇数,则校验位设置为1,以确保整个帧中“1”的总数为偶数。

  2. 奇校验(Odd Parity):在奇校验模式下,奇偶校验位的设置是使得包含校验位在内的整个数据帧中“1”的总数为奇数。如果数据位中“1”的数量已经是奇数,则校验位设置为0;如果“1”的数量是偶数,则校验位设置为1,以确保整个帧中“1”的总数为奇数。

发送过程:

  • 发送方根据设置的校验模式(奇校验或偶校验)计算数据位中“1”的数量。
  • 然后,根据“1”的总数是奇数还是偶数,确定奇偶校验位的值。
  • 接下来,发送方在发送数据位后发送这个校验位。
  • 最后,发送方发送停止位,标记数据帧的结束。

接收过程:

  • 接收方接收数据帧,包括数据位和校验位。
  • 接收方重新计算接收到的数据位中“1”的总数,并考虑校验位,以验证数据帧是否符合预期的奇偶性。
  • 如果接收到的数据帧的奇偶性与预期不符,接收方可以判断在传输过程中可能发生了错误。

使用奇偶校验可以提高通信的可靠性,尤其是在错误更可能发生的环境中。然而,需要注意的是,奇偶校验只能检测到奇数位的错误(例如,一个位错误或三个位错误),对于偶数位的错误(如两个位或四个位错误)则无法检测。

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

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

相关文章

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第二套(阅读程序题)

CSP-J入门组初赛模拟题二 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40分) 第一题 1 #include<bits/stdc.h> 2 using namespace std; 3 i…

探索微信小程序的奇妙世界:从入门到进阶

文章目录 一、什么是微信小程序1.1 简要介绍微信小程序的定义和特点1.2 解释小程序与传统应用程序的区别 二、小程序的基础知识2.1 微信小程序的架构2.2 微信小程序生命周期的理解2.3 探索小程序的目录结构和文件类型 三、小程序框架和组件3.1 深入了解小程序框架的核心概念和原…

【无标题】Matlab之annotation函数——创建图形注释(箭头、椭圆、矩形)

应用1&#xff1a;创建文本箭头注释 创建一个简单线图并向图窗添加文本箭头。用归一化的图窗坐标指定文本箭头位置&#xff0c;起点为 (0.3,0.6)&#xff0c;终点为 (0.5,0.5)。通过设置 String 属性指定文本说明。 figure plot(1:10) x [0.3 0.5]; y [0.6 0.5]; annotation…

ClickHouse--08--SQL DDL 操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 SQL DDL 操作1 创建库2 查看数据库3 删除库4 创建表5 查看表6 查看表的定义7 查看表的字段8 删除表9 修改表9.1 添加列9.2 删除列9.3 清空列9.4 给列修改注释9.5 修…

C语言第二十四弹---指针(八)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、数组和指针笔试题解析 1.1、字符数组 1.1.1、代码1&#xff1a; 1.1.2、代码2&#xff1a; 1.1.3、代码3&#xff1a; 1.1.4、代码4&#xff1a; 1…

thinkphp6入门(20)-- 如何上传图片、文件

1. 配置文件 设置上传的路径 对应文件夹 2. 前端 <div class"card-body"><h1 class"card-title">用户头像</h1><img src"../../../uploads/{$user.avatar_photo_path}" alt"avatar" height"100"/&g…

Windows 安装和连接使用 PgSql数据库

一. PostgreSQL 安装详细步骤 下载地址&#xff1a;https://www.enterprisedb.com/postgresql-tutorial-resources-training-1?uuidd732dc13-c15a-484b-b783-307823940a11&campaignIdProduct_Trial_PostgreSQL_16 1. 双击打开安装包 2. 选择安装目录 3. 选择安装组件 4.…

windows10系统转换成为window7s出现蓝屏错误ax000000A5

状况的描述&#xff1a; 由于电脑的基础性能有一些不匹配&#xff0c;想把windows10系统转换成为windows7的系统进行处理&#xff0c;利用widowspe的装机系统对其进行处理&#xff0c;但是对其进行相关的安装&#xff0c;目前在网络上搜索的相关文章分析的原因&#xff1a; 原…

蓝桥杯:C++排序

排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的&#xff0c;而是对数值按位划分&#xff0c;按照以空间换取时间的思路来排序。看起来它们的复杂度更好&#xff0c;但实际…

政安晨:梯度与导数~示例演绎《机器学习·神经网络》的高阶理解

这篇文章确实需要一定的数学基础&#xff0c;第一次接触的小伙伴可以先看一下我示例演绎这个主题的前两篇文章&#xff1a; 示例演绎机器学习中&#xff08;深度学习&#xff09;神经网络的数学基础——快速理解核心概念&#xff08;一&#xff09;&#xff1a; 政安晨&#…

蓝桥杯嵌入式学习记录——按键的使用

目录 一、按键原理简介 二、cubeMX的配置 三、按键的短按代码 四、按键的长按代码 一、按键原理简介 在STM32中&#xff0c;按键连接通常使用GPIO&#xff08;通用输入/输出&#xff09;端口来实现。当按键未被按下时&#xff0c;GPIO端口处于高电平状态&#xff08;即1&am…

springboot188基于spring boot的校园商铺管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

高德地图上绘制热力图的方法

百度地图和高德地图的JavaScript API都提供了热力图的绘制方法&#xff0c;都是将热力图作为新的图层&#xff0c;叠加到地图上。但是百度地图的经纬度体系与我们的经纬度存在偏差&#xff0c;高德的与我们相符&#xff0c;应当使用高德地图JavaScript API。 因为是JavaScript…

COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM&#xff0c;因为它已经过时了。但是我不想再把代码移植到C#上面&#xff0c;然后用VSTO——已经用了std::unordered_set&#xff01;因为我使用了Copilot&#xff0c;结合我的思考&#xff0c;写了下面的代码&#xff1a; #impor…

【Langchain Agent研究】SalesGPT项目介绍(四)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;三&#xff09;-CSDN博客 github地址&#xff1a;GitHub - jerry1900/SalesGPT: Context-aware AI Sales Agent to automate sales outreach. 上节课&#xff0c;我们主要介绍了SalesGPT的类属性和它最重要的类方法f…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求&#xff1a; 去年12月&#xff0c;我去了其他幼儿园参观&#xff0c;这是一个传统文化德育教育特色的学校&#xff0c;在“古典集市”展示活动中&#xff0c;小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令&#xff0c;基于master分支在本地创建tabBar子分支&#x…

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port)执行队列中的任务 &#xff1a; AbstractUnsafe#register0注册 doRegister() 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketCh…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN&#xff08;同步&#xff09;报文段给服务器&#xff0c;选择一个初始序列号&#xff0c;并设置SYN标志位为1。服务器接收到客户端的SYN报文段后&#xff0c;回复一个ACK&#xff08…

OJ刷题:杨氏矩阵【建议收藏】

看见这个题目&#xff0c;很多人的第一反应是遍历整个数组查找数字&#xff0c;但是这种方法不仅效率低&#xff0c;而且远远不能满足题目要求。下面介绍一种高效的查找方法&#xff1a; 代码实现&#xff1a; #include <stdio.h>int Yang_Find_Num(int arr[][3], int …