Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >UART串口流控制(Flow control)「建议收藏」

UART串口流控制(Flow control)「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-06 02:06:57
发布于 2022-09-06 02:06:57
8.2K02
代码可运行
举报
运行总次数:2
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

一般在串行通讯中,我们会在一些上位机上看到 RTS /CTS、DTR /DSR和 XON /XOFF的选项,这是对流控制的选项,一般是应用于 RS232接口的,是拿来调制解调器的数据通讯的

一、流控制的作用

这里讲到的 “流”,指的是数据流;在数据通信中,流控制是管理两个节点之间数据传输速率的过程,以防止出现接收端的数据缓冲区已满,而发送端依然继续发送数据,所导致数据丢失

二、工作原理

当接收端的数据缓冲区已满,无法处理数据来时,就发出 “不再接收” 的信号,发送端则停止发送,直到发送端收到 “可以继续发送” 的信号再发送数据。计算机中常用的两种流控制分别是硬件流控制(RTS /CTS、DTR /DSR等)和软件流控制(XON /XOFF)

三、RS232引脚定义

RS-232设计之初是用来连接调制解调器做传输之用,也因此它的脚位意义通常也和调制解调器传输有关。RS-232的设备可以分为数据终端设备(DTE,Data Terminal Equipment, For example, PC)和数据通信设备(DCE,Data Communication Equipment)两类,这种分类定义了不同的线路用来发送和接受信号。一般来说,计算机和终端设备有DTE连接器,调制解调器和打印机有DCE连接器。但是这么说并不是总是严格正确的,用配线分接器测试连接,或者用试误法来判断电缆是否工作,常常需要参考相关的文件说明

RS-232目前有 DB-25和 DB-9型的连接器,被用的较多的是 DB-9型的接口

RS-232中 DB-9型的管脚分配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         DB-9 Male(Pin Side)                   DB-9 Female (Pin Side)
             -------------                          -------------
             \ 1 2 3 4 5 /                          \ 5 4 3 2 1 /
              \ 6 7 8 9 /                            \ 9 8 7 6 /
               ---------                              ---------

它的信号引脚说明:

脚位

简写

意义

信号

说明

Pin1

DCD

Data Carrier Detect

数据载波检测(DCD)

调制解调器通知电脑有载波被侦测到。

Pin2

RXD

Receiver

接受数据(RD、RXD)

接收数据。

Pin3

TXD

Transmit

发送数据(TD、TXD)

发送数据。

Pin4

DTR

Data Terminal Ready

数据终端准备(DTR)

电脑告诉调制解调器可以进行传输。

Pin5

GND

Ground

公共接地

地线。

Pin6

DSR

Data Set Ready

数据准备好(DSR)

调制解调器告诉电脑一切准备就绪。

Pin7

RTS

Request To Send

请求发送(RTS)

电脑要求调制解调器将数据提交。

Pin8

CTS

Clear To Send

清除发送(CTS)

调制解调器通知电脑可以传数据过来。

Pin9

RI

Ring Indicator

振铃指示(RI)

调制解调器通知电脑有电话进来。

四、硬件流控制(以 RTS /CTS为主)

RTS/CTS最初是设计为电传打字机和调制解调器半双工协作通信的,每次它只能一方调制解调器发送数据。终端必须发送请求发送信号然后等到调制解调器回应清除发送信号。尽管 RTS /CTS是通过硬件达到握手,但它有自己的优势

1、RS232的标准连线法

当 A端的设备准备好后,发出 DTR(数据设备就绪)信号, 传至 B端的 RI(响铃)和 DSR(通讯设备就绪)。 这样,只要 A准备好(DTR),B端就会产生呼叫(RI)并准备好(DSR)。

注意到 A端的RTS(请求发送)、CTS(允许发送)和 B端的 CD(载波检测)连在一起, 则说明 A一旦请求发送(RTS)将立即得到允许(CTS), 并使 B端检测到载波信号(CD)。 A端的 TXD与 B端的 RXD相连,A发送,B接收。

2、RS232的简化连线法

原来 RTS和 CTS是用来询问和回答是否可以传输数据。 但在这种连接方式下,就成了纯粹告诉对方自己是否可以进行通讯。 此时 RTS和 DTR都可以用来对数据流进行控制。

A端的 DTR(数据设备就绪)发出信号, 当 B端准备好后,B端的 DTR(数据设备就绪)向 A端的 DSR(通讯设备就绪)发出信号。 接下来就可以通过 RTS(请求发送)和 DTR(允许发送)来控制通信。

3、进一步简化(也就是以 RTS /CTS为主)

从上面的流程可以看到,硬件流控制主要是 RTS /CTS和 DTR /DSR来控制,但是,人嘛,能懒就懒,因此现在很多时候都只是用 RTS /CTS告诉对方自己是否可以进行通讯,而直接跳过了 DTR /DSR的就绪状态检测

在使用 RTS /CTS时,它们都是低电平有效,因此,一般在上位机中一旦打开串口,RTS会拉置高电平,然后等待数据发送,使得低电平有效

值得注意的,并不是说硬件流控制就单纯的依靠硬件,它还需要软件去处理识别,因为硬件流控制所做的只是给出信号电平,真正的控制发送使能还得看软件的处理

五、软件流控制

软件流控制(Software flow control)是在计算机数据链路中的一种流控制方法,特别适用于 RS-232串口通信;它是采用特殊字符来传输带内信令,特殊编码字符称作 XOFFXON(分别表示 “transmit off” 与 “transmit on”)。因此,也被称作 “XON /XOFF流控制”;

使用 ASCII字符集,XOFF一般为字节值 19(十进制),XON为字节值 17

码的名字

含义

ASCII

十进制

十六进制

XOFF

暂停传输

DC3

19

13

XON

恢复传输

DC1

17

11

值得注意的是:是接受方把 XON /XOFF信号发给发送方来控制发送方何时发送数据的,这些信号是与发送数据的传输方向相反的

它的处理主要是:接收方利用 XON信号告诉发送方,我已经准备好接受更多的数据了,利用 XOFF信号告诉发送方停止发送数据,直到接受方发送 XON信号告诉发送方我再次准备好了。

XON /XOFF是一种工作在终端间的带内方法,但是必须两端都支持这个协议,而且在突然启动的时候会有混淆的可能;XON /XOFF可以工作于 3线的接口

软件流控制广泛用于低速设备,特别是打印机与哑终端,用以指出它们临时暂停接收数据;软件流控制的优点是降低了收发双方之间的电路导体数量,给定一个共同的电路接地,只需要两条电路分别用于收发,也不需要额外的特定硬件实现;缺点是发送 XOFF需要至少一个字符的时间,而且需要排在对方已经接收的数据之后处理

XON /XOFF一般不赞成使用,推荐用 RTS /CTS控制流来代替它们。 因为串口传输的是二进制数据,可能你发送的数据里面也有 XON、XOFF对应的二进制值出现,进而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题;当然,你也可以对 XON、XOFF进行特殊字符替换、组合等方式来确保通讯稳定

六、UART底层控制

上面也有说到,硬件流控制最后的实现还是绕到了软件上,若果是去写串口上位机控制的,可以看一下下面的链接,了解它们对应的寄存器

链接:串列埠的原理與應用

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134993.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月5,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RS232 串行通信:C++ 实现指南
在现代嵌入式系统和工业控制领域,RS232 串行通信仍然是一种不可或缺的技术。尽管 USB 和以太网等高速通信技术已经广泛应用,但在一些需要低速、简单通信的场景中,RS232 仍然是首选。本文将详细介绍如何在 C++ 中实现与 RS232 的通信,包括 Windows 和 Linux 平台的实现方法。
码事漫谈
2025/04/21
1340
RS232 串行通信:C++ 实现指南
详解RS232、RS485、RS422、串口和握手
计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。
不脱发的程序猿
2021/01/20
2.3K0
RS232不就是接RTX和DTX两根线吗?那你还接其他的(RTS、CTS等)干嘛呢?
基本上,谈到串行通讯,两线制的线缆,一般都是这两根线缆。这里小测试下,哪位朋友能准确知道这两个接口的英文全称呢?
Hello工控
2024/06/25
7920
RS232不就是接RTX和DTX两根线吗?那你还接其他的(RTS、CTS等)干嘛呢?
TTL转RS232电路–分享原理图和参考资料
RS232串口经常用到,本文分享下RS232协议方面基本点,并介绍一种简单的串口TTL(3.3V)电平转换为RS232电平的电路,这个电路是经过制板验证过的。 使用芯片MAX3232E (tssop16封装),电源用3.3V,电路如下图
全栈程序员站长
2022/07/22
2.7K0
TTL转RS232电路–分享原理图和参考资料
RS232串行通信全解析(历史、定义、电气特性及功能特性等等)
由于其相对简单和低硬件成本(与并行接口相比),串行通信在电子行业中被广泛使用。今天,最流行的串行通信标准当然是EIA/TIA-232-E规范。该标准由电子工业协会和电信工业协会(EIA/TIA)开发,更普遍地称为简单的RS-232,其中RS代表“推荐标准”。尽管近年来,为了帮助识别标准的来源,该RS前缀已被EIA/TIA取代,但本文使用了通用的RS-232表示法。
Hello工控
2024/06/25
5.6K0
RS232串行通信全解析(历史、定义、电气特性及功能特性等等)
DB9引脚定义_422串口定义
DB9引脚定义_422串口定义DB9串口引脚定义RS-232端(DB9母头/孔型)引脚定义引脚序号      2      3      5      1、4、6      7、8信号定义     TXD    RXD    地     内部相连    内部相连 注:该口可直接插入计算机的COM口2.RS-232端(DB9公头/针型)引脚定义引脚序号      2      3      5    
Java架构师必看
2022/05/03
5.9K0
COM口简介
COM口( cluster communication port )即串行通讯端口。简称串口。因为是采用RS232协议,所以也叫RS232口。有时也叫DB9。
徐师兄
2022/08/29
2K0
COM口简介
moxa串口服务器5430说明书(moxa多串口卡驱动安装)
NPort 5400系列的基本功能是把您现有的串口设备联让您可以轻松方便的将串口设备连接到以太网络。不但保证您现有的硬件资源,更保证您未来的网络扩充的可能性。另外,NPort 5400系列可以轻松的在串口和以太网络之间进行双向的资料传输,让您可以同时达到集中管理串口设备,和在网络中分散管理主机的目的。
全栈程序员站长
2022/07/29
3.8K0
stm32串口USART 硬件流控 --学习笔记
  流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口、流控的定义。大家一定了解,RS232 中的“RS”是Recommend Standard 的缩写,即”推荐标准“之意,它并不像 IEEE-1284、IEEE-1394 等标准,是由“委员会定制”。因而,不同的厂商在做 RS232 时,多少会有不同,流控也都会存在差异。以下我们与大家一起探讨流控的作用、搭建及如何操作。
用户6754675
2020/01/07
2.2K0
MCU常见通信总线串讲(二)—— RS232和RS485
首先明确一个概念,关于MCU中通信总线和通信协议,通信总线是一种用于连接各种外设和模块的物理接口,它可以传输数据和控制信息。通信协议则是指在通信总线上传输数据时所遵循的规则和约定,以确保不同设备之间能够正确地交换信息,我们也可以把他叫做通信总线协议。
秋名山码神
2023/11/08
8570
MCU常见通信总线串讲(二)—— RS232和RS485
I2C接口与SPI和UART接口的区别
1、同步通信>异步通信; 2、同步通信时必须有一根时钟线连接传输的两端; 3、都是串行通信方式,并行通信用于内部存储间的通信,如flash; 4、适合传输的距离和通信速率成反比关系;
怪兽
2022/10/04
2.5K0
RK平台 USB转RS485
RS-232是美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接。 RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业联盟,RS(Recommended standard)代表推荐标准,232是标识号,C代表RS232的第三次修改(1969年),在这之前,还有RS232B、RS232A. 在RS-232标准中,字符是以一串行的比特串来一个接一个的串列(serial)方式传输,优点是传输线少,配线简单,发送距离可以较远。 最常用的编码格式是异步起停(asynchronous start-stop)格式,它使用一个起始比特后面紧跟7或8个数据比特(bit),然后是可选的奇偶校验比特,最后是一或两个停止比特。所以发送一个字符至少需要10比特,带来的一个好的效果是使全部的传输速率,发送信号的速率以10划分。
全栈程序员站长
2022/08/15
1.3K0
Caché 变量大全 $ZA 变量
$ZA被实现为一系列位标志,每个位表示一条特定的信息。下表显示了可能的值、它们的含义,以及如何使用模(#)和整数除(\)运算符测试它们:
用户7741497
2022/05/11
1.8K1
UART介绍「建议收藏」
UART, Universal Asynchronous Receiver-Transmitter, 通用异步收发器;
全栈程序员站长
2022/10/05
2.1K0
UART介绍「建议收藏」
基于 FPGA 的 UART 控制器设计(VHDL)(中)
今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(中),由于篇幅较长,分三篇。今天带来第二篇,中篇,RS-232 串口通信简介。话不多说,上货。
FPGA技术江湖
2020/12/30
1.3K0
RS232串口的Windows编程纪要
再次是一篇入门文,各路神仙退散。 直接进入主题,又不是历史课,关于RS232那些前世今生的故事就不摆了。 硬件链接 首先以9针小口为例(大口应当只能去博物馆看了吧)看一下管脚排布,其实RS232本身没进博物馆都已经够让我惊讶了。 (图片来自互联网) 通常使用的接线图: (图片来自互联网) 硬件接口部分的重点: 绝大多数情况下,我们只需要接2号、3号、5号,RXD/TXD/SG三根线就能正常工作。(顺便多说一句,古老的大串口是2、3、7号) 直连模式一般用于延长线或者大小口的转换线。
俺踏月色而来
2018/06/15
1.7K0
RS232的零调制解调器(Null Modem)连接方式,你了解吗?
在RS-232规范中,DTE(数据终端设备)和DCE(数据通信设备)是指串行连接两端的设备类型。一般来说,DTE和DCE分别指计算机设备和调制解调器。因为RS-232规范主要涉及将DTE直接连接到DCE,反之亦然,所以引脚的定义使布线变得简单。
Hello工控
2024/06/25
7790
RS232的零调制解调器(Null Modem)连接方式,你了解吗?
硬件知识:串口通信基础知识介绍
在通信和计算机科学中,串行通信(Serial Communication)是一个通用概念,泛指所有的串行的通信协议,如RS232、RS422、RS485、USB、I2C、SPI等。
小明互联网技术分享社区
2023/01/08
3.7K0
硬件知识:串口通信基础知识介绍
串口通信-MSComm控件使用详解
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
全栈程序员站长
2022/11/15
4K0
Linux串口编程示例
termios是用于终端I/O的较新(现在已经有几十年历史)Unix API。在termios的帮助下执行串行I/O的程序剖析如下:
知否知否应是绿肥红瘦
2025/02/19
9620
Linux串口编程示例
相关推荐
RS232 串行通信:C++ 实现指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验