主要内容

串口简介

什么是串行通信?

串行通信是用于两个或多个设备之间通信的最常见的低级协议。通常,一台设备是一台计算机,而另一台设备可以是调制解调器、打印机、另一台计算机或科学仪器,如示波器或函数发生器。

顾名思义,串行端口以串行方式发送和接收字节信息——一次一位。这些字节使用二进制格式或文本(ASCII)格式传输。

对于许多串行端口应用程序,您可以在不详细了解串行端口如何工作的情况下与您的仪器通信。通信是通过在MATLAB中创建的串行端口对象建立的®工作区。

如果您的应用程序很简单,或者您已经熟悉上面提到的主题,那么您可能希望从创建串口对象.如果您想要在与仪器通信时可能采取的所有步骤的高级描述,请参阅开始与仪器控制工具箱

串口接口标准

多年来,已经开发了几种用于连接计算机到外围设备的串口接口标准。这些标准包括RS-232、RS-422和RS-485 -所有这些标准都得到了美国政府的支持金宝app串口对象。使用最广泛的标准是RS-232。

本标准的当前版本是由电信行业协会发布的TIA/EIA-232C。然而,术语“RS-232”仍然在广泛使用,这里使用的是指遵循TIA/EIA-232标准的串行通信端口。RS-232定义了这些串口特征:

  • 最大比特传输速率和电缆长度

  • 信号的名称、电特性和功能

  • 机械连接和引脚分配

主要通信使用三个引脚:传输数据引脚、接收数据引脚和接地引脚。其他引脚可用于数据流控制,但不是必需的。

请注意

本指南假设您使用的是RS-232标准。参考您的设备文档,了解您可以使用哪种接口标准。

金宝app支持的平台上

MATLAB串口接口支持:金宝app

  • Linux®64位

  • macOS64位

  • 微软®窗户®64位

使用串口线缆连接两台设备

RS-232和RS-485标准将通过串口电缆连接的两种设备定义为数据终端设备(DTE)和数据电路终端设备(DCE)。这个术语反映了RS-232作为计算机终端和调制解调器之间通信标准的起源。

在本指南中,您的计算机被视为DTE,而调制解调器和打印机等外围设备被视为dce。请注意,许多科学仪器的功能都是dte。

由于RS-232主要涉及将DTE连接到DCE,因此引脚分配定义指定了直通布线,其中引脚1连接到引脚1,引脚2连接到引脚2,等等。使用发射数据(TD)引脚和接收数据(RD)引脚的dte到dce串行连接如下所示。指串行端口信号和引脚分配有关串口引脚的更多信息。

如果使用直串口线连接两个dte或两个dce,则每个设备上的TD引脚连接到其他设备上,每个设备上的RD引脚连接到其他设备上。因此,要连接两个相似的设备,必须使用a零调制解调器电缆。如下图所示,零调制解调器电缆穿过电缆中的发送和接收线。

请注意

一个串口可以连接多台RS-422或RS-485设备。如果你有一个RS-232/RS-485适配器,那么你可以使用串口反对这些设备。

串行端口信号和引脚分配

串口由两种信号类型组成:数据信号而且控制信号.为了支金宝app持这些信号类型以及信号地,RS-232标准定义了25针连接。然而,大多数pc和UNIX®平台使用9针连接。事实上,串口通信只需要三个引脚:一个用于接收数据,一个用于传输数据,一个用于信号地。

下图显示了终端机上9脚公连接器的引脚分配方案。

该表描述了与九脚连接器相关的引脚和信号。有关25针连接器的信号和引脚分配的描述,请参阅RS-232或RS-485标准。

串行端口引脚和信号分配

标签

信号的名字

信号类型

1

CD

载波检测

控制

2

理查德·道金斯

接收的数据

数据

3.

道明

传输数据

数据

4

DTR

数据终端准备就绪

控制

5

接地

信号地

地面

6

安全域

准备好数据集

控制

7

即时战略游戏

请求发送

控制

8

CTS

清除发送

控制

9

国际扶轮

环指标

控制

术语“数据集”是“调制解调器”或“设备”的同义词,而术语“数据终端”是“计算机”的同义词。

请注意

串行端口引脚和信号分配是相对于终端机的。例如,数据从DTE的TD引脚传输到DCE的RD引脚。

信号状态

信号可以是和活动状态或者一个非活动状态.活动状态对应于二进制值1,而非活动状态对应于二进制值0。主动信号状态通常被描述为逻辑1真正的,或马克.非激活信号状态常被描述为逻辑0,或空间

对于数据信号,当接收到的信号电压大于负-3伏时,“开”状态发生,而电压大于正3伏时,“关”状态发生。对于控制信号,当接收到的信号电压大于3伏时,“开”状态发生,而电压大于-3伏时,“关”状态发生。-3伏和+3伏之间的电压被认为是过渡区域,信号状态未定义。

为了使信号进入“开”状态,控制装置unasserts(或降低)数据引脚的值和断言(或提出了)控制引脚的值。相反,为了使信号处于“关”状态,控制设备断言数据引脚的值,并取消断言控制引脚的值。

下图描述了数据信号和控制信号的“开”和“关”状态。

数据大头针

大多数串口设备支持金宝app全双工通信,这意味着它们可以同时发送和接收数据。因此,单独的引脚用于发送和接收数据。对于这些设备,使用TD, RD和GND引脚。然而,某些类型的串口设备只支持单向或金宝app半双工传输通信。对于这些设备,只使用TD和GND引脚。本指南假设您的设备连接了一个全双工串口。

TD引脚携带由DTE传输到DCE的数据。RD引脚携带由DTE从DCE接收的数据。

控制引脚

九针串口的控制引脚用于确定连接设备的存在并控制数据流。控制引脚包括:

RTS和CTS引脚。RTS和CTS引脚用于指示设备是否准备好发送或接收数据。这种类型的数据流控制被称为硬件握手,用于防止传输过程中的数据丢失。当同时启用DTE和DCE时,使用RTS和CTS的硬件握手遵循以下步骤:

  1. DTE断言RTS引脚以指示DCE它已经准备好接收数据了。

  2. DCE断言CTS引脚,表明可以通过TD引脚发送数据。如果数据不能再发送,则CTS引脚未被断言。

  3. 数据通过TD引脚传输到DTE。如果数据不能再被接受,RTS引脚将不被DTE断言,数据传输将停止。

启用硬件握手,请参见控制数据流:握手

DTR和DSR引脚。许多设备使用DSR和DTR引脚在连接和供电时发出信号。使用DTR和DSR发出连接设备存在的信号遵循以下步骤:

  1. DTE断言DTR引脚以请求DCE连接到通信线路。

  2. DCE断言DSR引脚以指示它已连接。

  3. 当DSR引脚从通信线路断开时,DCE取消它的断言。

DTR和DSR引脚最初是为了提供一种硬件握手的替代方法而设计的。然而,RTS和CTS引脚通常以这种方式使用,而不是DSR和DTR引脚。参考您的设备文档,以确定其特定的引脚行为。

CD和RI pin。CD和RI引脚通常用于在调制解调器-调制解调器连接期间指示某些信号的存在。

调制解调器使用CD表示它已与另一个调制解调器建立连接,或检测到载波音。当DCE接收到合适频率的信号时断言CD。如果DCE没有接收到合适的信号,则CD未被断言。

RI用于表示存在可听的振铃信号。RI在DCE接收到振铃信号时被断言。当DCE没有接收到振铃信号(例如,在振铃之间)时,RI是未断言的。

串行数据格式

串行数据格式包括一个开始位、5到8个数据位和一个停止位。一个奇偶校验位和一个额外的停止位也可以包含在格式中。这个图表说明了串行数据格式。

串口数据的格式通常用以下符号表示:

数据位数-校验类型-停止位数

例如,8-N-1被解释为8个数据位、无奇偶校验位和1个停止位,而7-E-2被解释为7个数据位、偶数奇偶校验位和2个停止位。

数据位通常被称为a字符因为这些位通常代表ASCII字符。其余的位被调用框架部分因为他们把数据位框起来。

字节与值

组成串行数据格式的位的集合称为字节.起初,这个术语可能看起来不准确,因为一个字节是8位,而串行数据格式可以在7位到12位之间。然而,当串行数据存储在您的计算机上时,帧位被剥离,只有数据位被保留。此外,无论指定用于传输的数据位的数量如何,总是使用8个数据位,未使用的位被赋值为0。

在读取或写入数据时,可能需要指定价值,可以由一个或多个字节组成。方法从设备中读取一个值int32格式,则该值由四个字节组成。有关读写值的更多信息,请参见读写串口数据

同步和异步通信

RS-232和RS-485标准支持两种类型的通信协议:同步和异步。金宝app

使用同步协议,所有传输的位同步到一个公共时钟信号。这两个设备最初相互同步,然后不断发送字符以保持同步。即使实际的数据并没有真正发送出去,恒定的比特流也可以让每个设备在任何给定的时间都知道另一个设备的位置。也就是说,发送的每个位要么是实际数据,要么是空闲字符。同步通信允许比异步方法更快的数据传输速率,因为不需要额外的位来标记每个数据字节的开始和结束。

使用异步协议,每个设备使用自己的内部时钟,导致字节在任意时间传输。因此,不是使用时间作为同步位的方式,而是使用数据格式。

特别是,数据传输使用单词的开始位进行同步,而一个或多个停止位表示单词的结束。发送这些额外位的需求导致异步通信比同步通信稍慢。但是,它的优点是处理器不需要处理额外的空闲字符。大多数串行端口是异步操作的。

请注意

在本指南中,术语“同步”和“异步”是指读或写操作是否阻塞对MATLAB命令窗口的访问。

比特是如何传输的?

根据定义,串行数据一次传输一位。比特的传输顺序遵循以下步骤:

  1. 开始位以0值传输。

  2. 数据位被传输。第一个数据位对应最低有效位(LSB),最后一个数据位对应最高有效位(MSB)。

  3. 传输奇偶校验位(如果定义)。

  4. 发送一个或两个停止位,每个停止位的值为1。

每秒传输的比特数由波特率.传输的位包括开始位、数据位、奇偶校验位(如果有定义)和停止位。

开始位和停止位

如在同步和异步通信,大多数串行端口异步操作。这意味着传输的字节必须由开始位和停止位标识。开始位表示数据字节即将开始,停止位表示数据字节已传输。使用串行数据格式识别字节的过程遵循以下步骤:

  1. 当串口引脚空闲(不传输数据)时,它处于“开”状态。

  2. 当数据即将传输时,由于开始位,串口引脚切换到“关闭”状态。

  3. 由于停止位,串口引脚切换回“开”状态。这表示字节的结束。

数据位

通过串口传输的数据位可以表示设备命令、传感器读数、错误消息等。数据可以以二进制数据或文本(ASCII)数据的形式传输。

大多数串行端口使用5到8个数据位。二进制数据通常以8位传输。基于文本的数据以7位或8位的方式传输。如果数据基于ASCII字符集,那么至少需要7位,因为有2位7或者128个不同的字符。如果使用第8位,则它的值必须为0。如果数据基于扩展ASCII字符集,则必须使用8位,因为有2位8或者256个不同的字符。

校验位

奇偶校验位为传输的数据提供简单的错误校验。该表描述了奇偶校验的类型。

奇偶校验类型

奇偶校验类型

描述

甚至

数据位加上奇偶校验位得到偶数个1。

马克

奇偶校验位始终为1。

奇怪的

数据位加上奇偶校验位得到奇数个1。

空间

奇偶校验位始终为0。

标记和空间奇偶校验很少使用,因为它们提供最小的错误检测。您可以选择根本不使用奇偶校验。

奇偶校验流程如下:

  1. 发送设备根据数据位值和选择的奇偶校验类型将奇偶校验位设置为0或1。

  2. 接收设备检查校验位与传输数据是否一致。如果是,则接受数据位。如果不是,则返回一个错误。

请注意

奇偶校验只能检测到一位错误。多位错误可以显示为有效数据。

例如,假设数据位01110001被传输到您的计算机。如果选择偶校验,则发送设备将校验位设置为0,以产生偶数个1。如果选择奇偶校验,则发送设备将奇偶校验位设置为1,产生奇数个1。

查找您平台的串行端口信息

您可以使用Windows和UNIX平台提供的资源找到串口信息。

请注意

您的操作系统为所有串口设置提供了默认值。但是,这些设置将被MATLAB代码覆盖,并且对您的串行端口应用程序没有影响。

你也可以使用instrhwinfo函数以编程方式返回可用的串行端口。

使用serialportlist查询可用端口功能

serialportlist函数返回系统上所有串口的列表,包括usb转串口设备和蓝牙串口配置文件设备提供的虚拟串口。该函数提供了您在计算机上可以访问并可用于串行端口通信的串行端口列表。例如:

serialportlist
ans = 1×3字符串数组"COM1" "COM3" "COM4"

请注意

serialportlist函数显示Windows和上可用和正在使用的端口macOS但是在Linux上,它只显示可用的端口,而不显示正在使用的端口。

窗户平台

命令可以访问串口信息设备管理器

  1. 开放设备管理器

  2. 扩大端口(COM & LPT)列表。

  3. 双击通讯端口(COM1)项。

  4. 选择端口设置选项卡。

UNIX平台

要查找UNIX平台的串口信息,您需要知道串口名称。这些名称在不同的操作系统之间可能有所不同。

在Linux上,串口设备通常被命名ttyS0ttyS1等等。您可以使用一些命令显示或配置串口信息。例如,要显示哪些串行端口可用:

一些bg/dev/ttyS*
/dev/ttyS1在0x02f8 (irq = 3)是16550A

显示有关的详细信息ttyS0

一些ag)/dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4 Baud_base: 115200, close_delay: 50, divisor: 0 closing_wait: 3000, closing_wait2: infinite Flags: spd_normal skip_test session_lockout

请注意

如果一些公司命令无效,请确保您对该端口具有读写权限。

对于所有受支持的金宝appUNIX平台,包括macOS,你可以使用stty命令显示或配置串口信息。例如,显示的串口属性ttyS0类型:

sttyag)ydF4y2Ba</dev/ttyS0

要将波特率配置为4800比特/秒,输入:

stty速度4800</dev/ttyS0>/dev/ttyS0

请注意

本示例显示如何设置tty参数,非波特率。使用MATLAB串口设置波特率,请参见配置串口通信设置