关于串口通信流控控制
今天硬件提出与CPLD通信时候,需要将通信引脚配置为流控,有点懵逼,马上百度一波。这里简单做个记录。
1 关于流控
首先,我们需要知道什么“流”,这里“流”是指数据流。当两个硬件设备在通信时候,通信的数据就像流体一样,在两者之间“流动”。
流,既分方向,也分快慢。在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。
流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止)。
2 流控方式
2.1硬件流控
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
引用网上的一段介绍:
硬流控的RTS 、CTS :RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS (Clear ToSend,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS 连接B设备的CTS ;A设备的CTS连接B设备的RTS。前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(意思通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS信号,指示B设备开始发送数据。A设备发(B设备接收)类似。
2.2 软件流控
软件流控和硬件流控都方式一样,只是实现方式不同而已。在通信过程中,软件流控通过在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。
3 串口定义
最后,由于我使用的是DB9串口,因此,我们可以再看看其引脚定义,对以上概念也会更加清晰。
由上图,我们可以知道,如果串口只接了RX、TX两个信号,那么要流控的话只能使用软流控;如果接了RX,TX,CTS ,RTS四个信号,那么可以使用硬流控或者软件流控。
关于串口通信流控控制相关推荐
- STM32的串口硬件流控(RS232/RS485)
流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.RS232 中的"RS"是Recommend Standard 的缩写,即"推荐标准 ...
- 用VC开发串口通信dll控件
VC串口通信技术网<VC串口上位机编程方法简介>介绍了串口编程的常见方法,其中就有使用串口dll控件的方法,dll是一种动态链接库,使用起来非常方便. 本文利用VC编程工具,对Window ...
- Labview 串口通信之——PC控制云台方向
一.项目需求: 1. 完成上位机与下位机的串口通信 2. 上位机电脑给下位机发送16进制指令,控制摄像机云台的各个方向. 3. 该程序用Labview开发 二.开发过程: ...
- stm32中断方式的串口通信——上位机控制串口收发
文章目录 前言 一.什么是串口通信 二.什么是中断--STM32 1.中断的概念 2.STM32下NVIC的介绍 3.中断优先级的介绍 4.外部中断的介绍 三.串口通信keil工程文件 1.新建工程模 ...
- ARM9的系统时钟和串口(非流控 + 非FIFO + 查询方式)
实验的目的: 设置系统时钟,并在串口上输入一个字符,单板接收后将它的ASCII值加1后,从串口输出. 实验的源程序: /**************************************** ...
- arduino串口监视器显示nan_进阶教程1:Arduino串口通信与电脑控制LED
本专栏内容经修订后,已在豆瓣阅读集结成书出版: https://read.douban.com/ebook/106875966/read.douban.com 我是潘,曾经是个工程师.这是为 htt ...
- 三菱PLC串口通信的IO控制
有些时候只是想使用PLC的IO,但又不会写PLC或者不想看懂PLC的通信协议,那么,可以直接使用串口直接发送相应的字符串进行控制IO端口. 串口设置: 波特率 9600 数据位 7 停止位 1 校验和 ...
- 易语言和c51通信,51单片机与PC上位机串口通信之LED控制
#include #define uint8 unsigned char #define uint16 unsigned int uint8 receive_buffer[6]; ...
- SPCOMM控件在Delphi7.0串口通信中的应用
====================================================== 注:本文源代码点此下载 ================================= ...
最新文章
- solr mysql 分词_solr 7+tomcat 8 + mysql实现solr 7基本使用(安装、集成中文分词器、定时同步数据库数据以及项目集成)...
- 算法小记 · 字符串翻转
- 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
- Serekh塞拉赫资源包背后的创作过程
- REVERSE-PRACTICE-BUUCTF-5
- java 等待唤醒机制,Java线程等待唤醒机制
- Linux学习之CentOS(五)----网卡的配置
- [Cubieboard] Node.js 在 Lubuntu 上安装指南
- 关于银行,有哪些有趣的冷知识
- gradle指令linux守护,gradle之gradlew最全指令攻略
- tomcat access log pattern
- asp.net onclick与onclientclick的区别
- Kotlin 区间的一些小注意
- 饭店计算机软件系统FIDlLIL,【万迅千里马餐饮管理系统_饭店餐厅管理软件】免费试用_餐饮软件_选软件网...
- 图像处理特征提取之(二):Haar特征
- android 4.0.3固件,OPPO Find3 android 4.0固件正式发布
- 目标检测—DiffusionDet:用于检测的概率扩散模型笔记—DDPM
- php图片上传保留第一帧,七牛云上传视频怎么截取第一帧为图片
- 计算机电源的功能,电源屏主要功能及工作原理
- 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接,该怎么办...