串行通讯协议,只需要一文就可以给你讲懂

news2024/11/26 16:41:58

前言

最近在做一个通过ESP8266和STM32通讯从而实现远程控制,中间需要用到串口来发送报文,通过报文来实现两者之间的通讯。

今天刚好趁着这个机会来给大家讲解一下串行通讯,希望能给大家以后的学习提供一些思路。

串行通讯介绍

串口通信线最少需要2根(GND和信号线),可以实现单工通信,也可以使用3根通信线(Tx、Rx、GND)来实现全双工。

通过串口不管发数字、文本还是命令,都要先对发送内容进行编码,编码成二进制再进行逐个位的发送。我们使用串口发送的一般都是字符,都是ASCII码编码后的字符,所以一般设置数据位都是8,方便刚好一帧发送1个字符。

那么现在我们就知道了,如果我们想要串口进行通讯,我们首先需要将我们想要发送的信息转换成为ASCII码,再通过串口线将信息以二进制的形式发送出去。

UART作为异步串口通信协议的一种,工作原理是将传输数据的每一个字符一位一位地传输,也就是我们上面说的ASCII码编码。其中每一位(bit)的意义如下:

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

数据位: 紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。

奇偶校验位: 数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以次来校验数据传送的正确性。

停止位: 它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

空闲位: 处于逻辑“1”状态,表示当前线路上没有数据传输。

其中数据位通常采用ASCII码。从最低位开始传送,靠时钟定位。

串行数据传输的基本模式

二进制脉冲用于串行数据传输中的数据传输。二进制数字一由五伏或高逻辑表示。相反,二进制零表示为逻辑低电平或零伏。为了实现串行通信,需要源和目标。他们也被称为发送者和接收者。可以采用各种类型的串行通信,并指定为单工、半双工和全双工。

  • Simplex 方法 现单向数据传输。在此方案中,在任何给定时间只有源或目标处于活动状态。如果源正在发送数据,接收方别无选择,只能接受传输。广播电视或无线电信号时使用单工模式。

  • 半双工模式 允许源和目标都处于活动状态,但不能同时处于活动状态。传输一次只发生在一个方向。使用互联网时可以看到一个恰当的例子。当您从计算机发出网页请求时,服务器会处理该请求。然后,当将信息返回到您的计算机(现在是接收方)时,它就成为发送方。

  • 全双工模式 是世界上使用最广泛的串行通信形式。源和目标都处于活动状态,可以同时发送和接收数据。您的智能手机是全双工模式实际应用的典型示例。

讨论串行通信时的另一个考虑因素是两台主机的协议和字节顺序。字节顺序是指使用特定的内存地址来存储数据的方法。这是将数据存储在特定内存地址的方式。关于数据对齐字节序有两种分类。

UART串口通信的工作原理

(1)发送数据过程

空闲状态,线路处于高电平;当收到发送指令后,拉低线路的一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位,一帧数据发送完成。

(2)数据接收过程:

空闲状态,线路处于高电平;当检测到线路的下降沿(高电平变为低电平)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备接收数据或存入缓冲。

串行通讯和并行通讯

在常见的通讯中有两种基本的数据传输形式,分别是并行和串行通信。串行通信是逐位进行数据传输。它基本上使用两根电线,一根用于发送器,另一根用于接收器。

串行通信: 计算机与I/O设备之间,同一时刻,只能传输一个bit位的信号。传输数据按顺序依次一bit位接一bit位进行传输,通常数据在一根数据线或一对差分线上传输。

比如,当传输1字节信息时,并行通讯有8根信号线实现同时传输,假如耗时为1T,而串行是在一根信号线上,把数据排成一行、一位一位传输,需要传8次,因此耗时为8T。

并行通信: 计算机与I/O设备之间,通过多条传输线,可以同时传输多个bit位的信号。

并行通讯的效率高,但是成本高、对信号线路要求高,一般应用于快速设备之间近距离传输,譬如CPU 与存储设备、存储器与存储器、主机与打印机等都采用并行通讯。

串行通讯效率较低,但是对信号线路要求低,抗干扰能力强,同时成本也相对较低,一般用于计算机与计算机、计算机与外设之间远距离通讯。

单片机中的串口通讯

大家需要注意这里的串口通讯和我们上面谈到的串行通讯不是一个东西,串口通讯是串行通讯中的一种,在单片机调试中非常常见,也是学习单片机必须进行学习的知识,这里我们以单片机中常用的RS-232串口来进行讲解。

在上面的通讯方式中,两个通讯设备之间通过串口信号线建立起连接,串口信号线中使用"RS-232标准"传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。

我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1,+15V表示逻辑0。

因为控制器一般使用TTL电平标准,所以常常会使用CH340芯片对TTL及RS-232电平的信号进行互相转换。

STM32中的串口通讯

STM32芯片具有多个UART外设用于串口通讯,它是在USART基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是UART。

USART在STM32应用最多莫过于"打印"程序信息,一般在硬件设计时都会预留一个USART通信接口连接电脑,用于在调试程序是可以把一些调试信息"打印"在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。

STM32的USART输出的是TTL电平信号,若需要RS-232标准的信号可使用MAX3232芯片进行转换。

STM32的USART功能框图包含了USART最核心内容,掌握了功能框图,对USART就有一个整体的把握,在编程时就思路就非常清晰。

关于具体串口在STM32中怎么使用这里就不进行讲解了,想要学习的话可以去看一下野火的视频,里面讲的挺详细的。

分析串口通讯波形

在分析波形之前我们先来看一些基础概念,这样有利于我们对波形的分析:

起始位: 先发出一个逻辑”0”的信号,表示传输数据的开始。

校验位: 数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。就比如传输“A”(01000001)为例。 (字符‘A’的二进制是 0100 0001)此位还可以去除,即不需要奇偶校验位。

  • 当为奇数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为1才能满足1的个数为奇数(奇校验)。
  • 当为偶数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为0才能满足1的个数为偶数(偶校验)。

停止位: 它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。

空闲位: 没有数据传输时线路上的电平状态,为逻辑1。

传输方向: 即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。

uart数据传输格式:刚开始传输一个起始位——传输数据位——校验位(可不需要此位)——停止位。这样一帧的数据就传输完了。接下来接着像这样一直传送。

波形1

用串口工具发送0XD6,即二级制 1101 0110 ,在示波器上如此显示。

串口设置:波特率9600,停止位1位,无奇偶校验位。

波形如图所示:

由示波器可以看出,最左边一个低电平表示0,起始位;然后依次是0110 1011,正好和发送的数据最高位和最低位反过来,至于为什么会反过来我们上面也介绍过了,相比大家也能够理解。

波形2

用串口发送0x75,就是二进制 0111 0101,如下图所示。

串口设置:波特率9600,停止位1位,无奇偶校验位。

同理,最左侧的为起始位,低电平0, 然后LSB传输。 1010 1110依次传输到示波器。

波形3

用串口发送0x75,就是二进制 0111 0101,

串口设置:波特率9600,停止位1位,奇校验。

奇校验就是要保证这一帧里的所有BIT 有1的数为奇数,0x75已经有5个1了,所以奇偶校验位为0即可。

如果为偶校验,那么最后一位应该是高电平1,就会有6个1,以此保证所有的1的数量为偶数。

波形4

连发发送两个16进制数据0x75(0111 0101) 0x6B (0110 1011)

串口设置:波特率9600,停止位1位,无奇偶校验位。

结语

当然串行通讯不仅这一种,还是很多其他的例如I2C、SPI、CAN等,大家可以多了解一下,每个通讯方法都有着自己的通讯协议,我们如果想要使用的话需要根据自己实际需求,选择合适的通讯方式。

👇点击下方公众号卡片获取资料👇

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

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

相关文章

磨金石教育摄影干货分享|怎样拍出唯美有内涵的“中国风”照片

之前有网友私聊我,说这两年很多人都在拍中国元素的照片,他们的照片不仅仅是对古建筑简单的拍摄,照片的内容拥有丰富的文化内涵。想问我这样的照片应该怎么拍才能达到有内涵的水平。 其实这个问题确实有一定的难度,每个人都有自己…

腾格尔成影视圈的香饽饽,十月天传媒正式邀请演唱主题曲

俗话说:姜还是老的辣,酒还是陈酿好。这句话用到音乐人腾格尔身上,就再贴切不过了。说起音乐人腾格尔,这位来自草原的雄鹰和苍狼,有很多部音乐作品,都被歌迷朋友们一直传唱。 如今的腾格尔老师,已…

六.初阶指针

前言:大家好哇!今天带大家认识下C语言中的指针,指针的用法等,希望对大家有所帮助! 目录 一.指针是什么 1.指针是什么? 2.如何理解指针变量 二.指针和指针的类型 1.指针类型 2.指针类型的意义 &#x…

http 跨域资源共享详解

http 跨域资源共享详解 由于浏览器同源策略限制,会导致出现跨域问题。而跨域资源共享(CORS)可以突破浏览的同源策略的限制,不过需要服务端配合设置相应的响应头,从而使跨源数据传输得以安全进行。 跨域资源共享新增了…

进销存软件对中小型企业管理有什么作用?

进销存软件对中小型企业管理有什么作用? 01 更加有序 库存不乱单据不乱价格不乱 使用进销存软件可以把这些都记录下来,有条不紊,出现什么问题也有据可查,不像纸质单据,会丢会坏,乱成一团。 02 能打印正式…

[Spring Cloud] Hystrix通过配置文件统一设置参数/与OpenFeign结合使用

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

网站favion.ico图标

Favicon.ico一般用于作为缩略的网站标志,它显示在浏览器的地址栏或者标签上。 目前主要的浏览器都支持favicon.ico图标 一 制作favicon图标 1 把品优购图标切成png图片 2 把png图片转换为ico图标,这需要借助第三方转换网站,例如&#xff1…

刷题经验分享(一)

文章目录删除公共字符:组队竞赛:删除公共字符: 第一题:删除公共字符 方法一: 思路: 1.将第二个字符串的字符都映射到一个hashtable数组中,用来判断一个字符在这个字符串。 2. 判断一个字符在第…

140.深度学习分布式计算框架-3

140.1 Horovod Horovod是 Uber 开源的又一个深度学习工具,它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点,可为用户实现分布式训练提供帮助。Horovod 支持通过用于高性能并行计算的低层次接口 – 消息传递接口 (MPI…

Vue脚手架环境中简单使用MarkDown(只入门)

目录 入门 高级使用 入门 1 所在终端输入 npm install vue-meditor 2 复制以下代码 先新建一个组件 <template><div><MavonEditor v-model"myMarkDownData"/><button click"submit">提交</button></div> </te…

vue配置

首先安装node.js 在cmd node -v查看 然后 cmd命令行执行 : npm install -g vue/cli // 加-g是安装到全局 安装vue cli 安装vue cli 1 看一下 这是在cmd输入的内容,参考第一条链接 在vscode中怎么配置他? 文件-打开文件夹,选择一个文件夹 这里是firstvue 在下面新建文件夹…

可变长子网划分

目录 IP地址 子网划分 可变长子网划分 IP地址 在学习子网划分之前应该先清楚什么是IP地址和IP地址的类型 IP 地址的格式0网络地址主机地址10网络地址 主机地址 110网络地址主机地址1110组播地址11110保留 A 1.0.0.0~127.255.255.255 B 128.0.0.0~191.255.255…

C++编程进阶

目录 new运算符 new关键字的使用案例 C的引用 C中引用案例 引用的注意事项 引用做函数参数 引用做函数的返回值 前言&#xff1a; 具体案例 引用的本质 常量引用 常量引用原理 经典案例 函数的提高 函数的默认参数 注意&#xff1a; 具体案例 函数的占位参数…

已解决:树莓派外接硬盘 usb 或者sata 导致wifi无法链接 无线网卡无法使用问题

我的环境是树莓派4b 买了一个有硬盘的盒子 看上图的连接方式&#xff0c;是占用了树莓派的一个usb3.1进行了sata的转接&#xff0c;实现挂载硬盘。 但是我发现&#xff0c;安装系统开机之后&#xff0c;可以看到有硬盘接入&#xff0c;但是无法连wifi&#xff0c;如果拔掉硬盘…

G. SlavicG‘s Favorite Problem(树的遍历DFS,BFS均可)

Problem - G - Codeforces 给你一棵有n个顶点的加权树。回顾一下&#xff0c;树是一个没有任何循环的连接图。加权树是一棵树&#xff0c;其中每条边都有一定的权重。这棵树是无定向的&#xff0c;它没有根。 由于树让你感到厌烦&#xff0c;你决定挑战自己&#xff0c;在给定…

java--Lambda (3)变量的访问与修改

文章目录0 写在前面1 可以直接在 Lambda 表达式中访问外层的局部变量2 在 Lambda 表达式当中被引用的变量的值不可以被更改3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量4 写在最后0 写在前面 学习使用在Lambda表达式&#xff0c;有些地方访问一些变…

VM系列振弦读数模块采集测量数据的一般步骤

VM 模块是通用型单振弦式传感器测量模块&#xff0c;主要功能是测量频率的传感器内置的温度传感器&#xff0c;使用默认工作参数即可自动测读绝大多数振弦传感器。 但由于传感器类型、结构、厂家、钢弦材料、线圈等影响因素不同&#xff0c;导致使用 VM 模块测量某些传感器时需…

【408专项篇】C语言笔记-第六章(指针)

文章目录第一节&#xff1a;指针的本质1. 指针的定义2. 取地址操作符与取值操作符第二节&#xff1a;指针的传递1. 指针的传递第三节&#xff1a;指针的偏移1. 指针的偏移2. 指针与一维数组第四节&#xff1a;动态指针与内存申请1. 指针与动态内存申请2. 堆空间和栈空间的差异第…

电脑无线网卡连接的无线信号不好的,经常丢包,掉线断网如何优化解决

环境&#xff1a; 电脑&#xff1a;HP480G7 系统:Win10 专业版 无线网卡&#xff1a;水星ud6s 、TP-LINK等 AP&#xff1a;锐捷RAP2200(E) 组网模式&#xff1a;AP代管AP模式 问题描述&#xff1a; 电脑无线网卡连接的无线信号不好的&#xff0c;经常断网&#xff0c;因…

docker logs命令详解

docker 命令官档如下&#xff1a; https://docs.docker.com/engine/reference/commandline/docker/ docker logs官档如下 https://docs.docker.com/engine/reference/commandline/logs/#retrieve-logs-until-a-specific-point-in-time 一、常用命令 1. 可以查看命令用法 doc…