精华内容
下载资源
问答
  • 串口通信

    2018-12-31 09:26:09
    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。 串口通信(Serial...

    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

    串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCLL码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

    a,波特率:这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

    b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

    c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

    d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

    串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

    串口是计算机上一种非常通用的设备通信协议。大多数计算机(不包括笔记本电脑)包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

    展开全文
  • 串口通信的基础知识

    2020-07-22 23:00:44
    串口通信:可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。(串口按位(bit)发送...

    (一)串口通信知识

    (1) 串口通信是什么?

    串口通信:可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。(串口按位(bit)发送和接收字节的通信方式。)
    在这里插入图片描述

    (2) 总线通信方式

    上面,我们可以了解到串口通信的作用无非就是将并行数据字符转换为串行数据流,亦或是将串行数据流转换为并行数据字符。那么这里的串行数据以及并行数据是指什么呢?

    2.1 串行通信

    串行通信:是指通信双方按位进行,遵守时序的一种通信方式。串行通信中,将数据按位依次传输每位数据占据固定的时间长度,即可使用少数几条通信线路就可以完成系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信
    在这里插入图片描述

    应用
    系统间通信(多主控制系统)
    设备间(主控设备与附属设备)
    器件间(主控CPU与功能芯片)

    2.1.1 数据传输方向:单工、半双工、全双工

    数据传输方向 含义 应用
    单工 数据传输只支持数据在一个方向上传输 电视,广播
    半双工 数据传输能双向传输,但不能同时双向传输 对讲机
    全双工 数据传输能同时双向传输 电话

    2.1.2 时钟线:同步、异步

    时钟线 方式 含义
    同步通信 双方具有同频同相的同步时钟信号,在传送报文前附加特定传送字符,建立同步后就可以在同步时钟控制下进行逐位的发送/接收。
    异步通信 发送字符时,所发送的字符之间的时隙可以是任意的,但接收端必须时刻做好接收的准备。并且每一个字符需要加上开始位和结束位。(内部处理器在完成了相应的操作后,通过一个回调的机制,以便通知发送端发送的字符已经得到了回复)

    二者区别

    方面 同步通信 异步通信
    效率
    复杂度、误差 复杂,时钟允许误差小 简单,时钟可允许一定误差
    应用方式 点对多点 点对点

    2.2 并行通信

    并行通信:数据的各个位同时传送,可以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信
    在这里插入图片描述

    应用
    计算机或PLC各种内部总线

    (3) 串口通信的时序

    在这里插入图片描述

    3.1 波特率

    波特率:衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
    注意:波特率和距离成反比。

    3.2 数据位

    数据位:当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。(每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。)

    3.3 停止位

    停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
    注意:停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

    3.4 奇偶校验位

    奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位
    方法

    校验 方法
    奇校验 原有数据序列中(包括所要加的校验位)的1的个数为奇数
    偶校验 原有数据序列中(包括所要加的校验位)的1的个数为偶数

    例如
    ①(0)111 111
    ②(1)001 111

    (4)串口通信协议

    单片机CPU一般提供TTL电平的UART(通用异步收发器)通信接口,是一种通用的数据通信协议,包括RS232、RS422和RS485等接口标准规范。
    TTL电平

    方向 定义
    输出 低电平小于0.8V,高电平大于2.4V
    输入 低电平小于1.2V即认为逻辑0,高于2.0V即认为逻辑1

    4.1 RS-232

    RS-232(ANSI/EIA-232标准):是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信RS-232串口通信最远距离是50英尺

    主要特点 影响
    接口的信号电平值较高,易损坏接口电路的芯片 RS232接口任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3— -15V;逻辑“0”:+3— +15V ,噪声容限为2V。即要求接收器能识别高于+3V的信号作为逻辑“0”,低于-3V的信号作为逻辑“1”,TTL电平为5V为逻辑正,0为逻辑负 。与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
    传输速率较低,在异步传输时,比特率为20Kbps 因此在51CPLD开发板中,综合程序波特率只能采用19200,也是这个原因。
    接口使用一根信号线和一根信号返回线与地线构成共地的传输形式 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
    传输距离有限 最大传输距离标准值为50英尺,实际上也只能用在15米左右。

    拓展
    MAX232芯片可用于TTL电平与RS232电平的专用双向转换芯片。

    4.1.1 DB9 串口引脚定义

    在这里插入图片描述
    公头引脚定义
    在这里插入图片描述

    4.1.2 DB25 串口引脚定义

    在这里插入图片描述

    引脚 作用
    1 屏蔽地线 2 TXD 发送数据
    3 RXD 接收数据 4 RTS 请求发送
    5 CTS 允许发送 6 DSR 数据准备好
    7 SG 信号地 8 DCD 载波检测
    9 发送返回(+) 10 未定义
    11 数据发送(-) 12~17 未定义
    18 数据接收(+) 19 未定义
    20 数据终端准备好 DTR 21 未定义
    22 振铃 RI 23~24 未定义
    25 接收返回(-)标准的细节

    DB25转DB9
    在这里插入图片描述

    4.2 RS-422

    RS-422:是Apple的Macintosh计算机的串口连接标准。RS-422使用差分信号RS-232使用非平衡参考地的信号。差分传输使用两根线发送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。

    4.3 RS-485

    RS-485是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压,是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得连接本地网络以及多支路通信链路的配置成为可能
    在这里插入图片描述
    RS485电平

    电压范围 定义
    差分信号-2500mv~-200mv 逻辑0
    差分信号+200mv~+2500mv 逻辑1
    差分信号-200mv~+200mv 高阻态

    4.4 RS-232与RS-485的区别

    方面 RS232 RS-485
    传输方式 不平衡传输方式,单端通信 平衡传输,差分传输方式
    传输距离 不超过20m 几十米到上千米
    通信数量 一对一通信 总线上允许连接128个收发器

    (5) UART与SPI、I2C

    这里只简单介绍SPI与I2C,有时间再另做一篇文章来说说三者关系以及区别。

    5.1 SPI(串行外设接口)

    SPI(Serial Peripheral Interface):串行外设接口,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

    5.2 I2C

    I2C(Inter-Integrated Circuit)总线:是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息

    展开全文
  • 串口通信的小见解

    2020-06-30 10:45:10
    串口通信的接口是串行接口,是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。...


    串口通信的接口是串行接口,是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
    在我看来这就是一个转换器,把并行的数据换个方法发送给其他设备,当然这个方法也有它的优点和缺点,只是运用在不同的地方而已。
    在这里插入图片描述

    1.串口通信的基本原理

    串口 通信(Serial Communications)的概念非常简单,串口按 位(bit)发送和接收 字节。尽管比按 字节(byte)的 并行通信慢,但是 串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离 通信。比如 IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于 串口而言,长度可达1200米。典型地,串口用于 ASCII码字符的传输。 通信使用3根线完成,分别是地线、发送、接收。由于 串口 通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。 串口 通信最重要的参数是 波特率、 数据位、停止位和 奇偶校验。对于两个进行 通信的端口,这些参数必须匹配。

    串行通信和并行通信的概念就像我们平时走路一样,并排走的还是排成一路走的。并排走的就是并行,并行的话一次性传输的数据就大、快但是传输的距离不远,排成一路的话就是串行,串行的优点就是传输的距离可以比较远,但是慢。

    1.1同步和异步传输

    由于串行是异步传输的,所以这里就提到了异步和同步传输的问题,同步传输时,在传输的过程中,在发送数据电平的时候,会同时发送一个同步时钟,以同步时钟电平的分段来判断发送的数据是怎样构成的,这里的同时时钟和数据是一起、同步发送的,所以称为同步传输。
    异步传输的数据判断是根据波特率来判断的,接收方和发送方必须使用相同的波特率,不然数据会传输错误。其他的还有数据位、停止位和 奇偶校验,下面我们来一一聊聊。

    • 波特率:是一个衡量符号 传输速率的参数。指的是 信号被调制以后在单位时间内的变化,即单位时间内 载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的 波特率为14400,28800和36600。 波特率可以远远大于这些值,但是波特率和距离成反比。高 波特率常常用于放置的很近的仪器间的 通信,典型的例子就是GPIB设备的 通信。 NB-IoT模块:默认波特率9600;4G模块EC20:默认波特率115200.
    • 数据位:这是衡量 通信中实际 数据位的参数。当 计算机发送一个信息包,实际的数据不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个 数据包使用7位数据。每个包是指一个 字节,包括开始/停止位,数据位和 奇偶校验位。由于实际 数据位取决于 通信协议的选取,术语“包”指任何通信的情况。
    • 停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台 设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正 时钟同步的机会。适用于停止位的位数越多,不同 时钟同步的容忍程度越大,但是数据传输率同时也越慢。
    • 奇偶校验位:在 串口 通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和 奇校验的情况, 串口会设置校验位( 数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于 偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是 奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了 通信或者是否传输和接收数据是否不同步。
    1.2通信方式
    • 单工模式(Simplex Communication):单向的数据传输。通信双方中,一方为发送端,一方则为接收端。信息只能沿一个方向传输,使用一根传输线。双方是固定的。就相当于马路上的单行道。
    • 半双工模式(Half Duplex):通信使用同一根传输线,既可以发送数据又可以接收数据,但不能同时进行发送和接收。数据传输允许数据在两个方向上传输,但是,在任何时刻只能由其中的一方发送数据,另一方接收数据。就相当于这条马路两头本来可以任意时候相互走,但是限号了,某一时刻一头只能到另外一头。
    • 全双工模式(Full Duplex)通信允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。在全双工模式中,每一端都有发送器和接收器,有两条传输线,信息传输效率高。两头随时走。

    2.串口接头

    串口通信是指外设和 计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

    串口接头通常有两种:一种是9针串口(简称DB-9),一种是25针串口(简称DB-25)。每种接头都有公头和母头之分,这两种接头中,9针串口是我们常用的接头,即DB-9接头,它的公头和母头如下:
    在这里插入图片描述
    母头:泛指所有带孔状的接头(5针朝下,从左到右依次是1~9)
    公头:泛指所有带针状的接头(5针朝下,从右到左依次是1~9)

    DB9和DB25各引脚的定义为:
    在这里插入图片描述
    在我们的计算机通信时,最少要3根线,即TXD(发送数据)、RXD(接收数据)、GND(信号地)。
    (一) (二)

    RXD ——->TXD

    TXD ——->RXD

    GND ——>GND

    3.接口标准

    1. 实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
    2. 进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。
    3. 控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。
    4. 进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。
    5. 进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。
    6. 提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。(理论性强)
    3.1TTL电平

    TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL电平信号应用广泛,是因为其数据表示采用二进制规定,+5V等价于逻辑”1”,0V等价于逻辑”0”。
    数字电路中,由TTL电子元器件组成电路的电平是个电压范围,规定:
    输出高电平>=2.4V,输出低电平<=0.4V;
    输入高电平>=2.0V,输入低电平<=0.8V。

    3.2RS-232电平

    与TTL电平不同,在TXD和RXD数据线上:
    (1)逻辑1为-3~-15V的电压
    (2)逻辑0为3~15V的电压
    在RTS、CTS、DSR、DTR和DCD等控制线上:
    (1)信号有效(ON状态)为3~15V的电压
    (2)信号无效(OFF状态)为-3~-15V的电压
    这是由通信协议RS-232规定的。
    RS-232:标准串口,最常用的一种串行通讯接口。有三种类型(A,B和C),它们分别采用不同的电压来表示on和off。最被广泛使用的是RS-232C,它将mark(on)比特的电压定义为-3V到-12V之间,而将space(off)的电压定义到+3V到+12V之间。传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。

    展开全文
  • c# 串口通信

    2019-02-13 17:01:11
    串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。 串口通信...

    一、串口通信简介

    串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

    串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

      1. 波特率:这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送960个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为960Bd,比特率为10位*960个/秒=9600bps。

      2. 数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。

      3. 停止位:用于表示单个包的最后几位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

      4. 校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。

    二、C#串口编程类

    从.NET Framework 2.0开始,C#提供了SerialPort类用于实现串口控制。命名空间:System.IO.Ports。其中详细成员介绍参看MSDN文档。下面介绍其常用的字段、方法和事件。

      1. 常用字段:

    名称 说明
    PortName 获取或设置通信端口
    BaudRate 获取或设置串行波特率
    DataBits 获取或设置每个字节的标准数据位长度
    Parity 获取或设置奇偶校验检查协议
    StopBits 获取或设置每个字节的标准停止位数

    2. 常用方法:

    名称 说明
    Close 关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象
    GetPortNames 获取当前计算机的串行端口名称数组
    Open 打开一个新的串行端口连接
    Read 从 SerialPort 输入缓冲区中读取
    Write  将数据写入串行端口输出缓冲区

    3. 常用事件:

    名称 说明
    DataReceived 表示将处理 SerialPort 对象的数据接收事件的方法

    三、基本用法

    下面结合已有的一款继电器给出串口通信的基本用法,以供参考。

    复制代码
      1 using System;
      2 using System.Windows.Forms;
      3 using System.IO.Ports;
      4 using System.Text;
      5 
      6 namespace Traveller_SerialPortControl
      7 {
      8     public partial class Form1 : Form
      9     {
     10         //定义端口类
     11         private SerialPort ComDevice = new SerialPort();
     12         public Form1()
     13         {
     14             InitializeComponent();
     15             InitralConfig();
     16         }
     17         /// <summary>
     18         /// 配置初始化
     19         /// </summary>
     20         private void InitralConfig()
     21         {
     22             //查询主机上存在的串口
     23             comboBox_Port.Items.AddRange(SerialPort.GetPortNames());
     24 
     25             if (comboBox_Port.Items.Count > 0)
     26             {
     27                 comboBox_Port.SelectedIndex = 0;
     28             }
     29             else
     30             {
     31                 comboBox_Port.Text = "未检测到串口";
     32             }
     33             comboBox_BaudRate.SelectedIndex = 5;
     34             comboBox_DataBits.SelectedIndex = 0;
     35             comboBox_StopBits.SelectedIndex = 0;
     36             comboBox_CheckBits.SelectedIndex = 0;
     37             pictureBox_Status.BackgroundImage = Properties.Resources.red;
     38 
     39             //向ComDevice.DataReceived(是一个事件)注册一个方法Com_DataReceived,当端口类接收到信息时时会自动调用Com_DataReceived方法
     40             ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);
     41         }
     42 
     43         /// <summary>
     44         /// 一旦ComDevice.DataReceived事件发生,就将从串口接收到的数据显示到接收端对话框
     45         /// </summary>
     46         /// <param name="sender"></param>
     47         /// <param name="e"></param>
     48         private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
     49         {
     50             //开辟接收缓冲区
     51             byte[] ReDatas = new byte[ComDevice.BytesToRead];
     52             //从串口读取数据
     53             ComDevice.Read(ReDatas, 0, ReDatas.Length);
     54             //实现数据的解码与显示
     55             AddData(ReDatas);
     56         }
     57 
     58         /// <summary>
     59         /// 解码过程
     60         /// </summary>
     61         /// <param name="data">串口通信的数据编码方式因串口而异,需要查询串口相关信息以获取</param>
     62         public void AddData(byte[] data)
     63         {
     64             if (radioButton_Hex.Checked)
     65             {
     66                 StringBuilder sb = new StringBuilder();
     67                 for (int i = 0; i < data.Length; i++)
     68                 {
     69                     sb.AppendFormat("{0:x2}" + " ", data[i]);
     70                 }
     71                 AddContent(sb.ToString().ToUpper());
     72             }
     73             else if (radioButton_ASCII.Checked)
     74             {
     75                 AddContent(new ASCIIEncoding().GetString(data));
     76             }
     77             else if (radioButton_UTF8.Checked)
     78             {
     79                 AddContent(new UTF8Encoding().GetString(data));
     80             }
     81             else if (radioButton_Unicode.Checked)
     82             {
     83                 AddContent(new UnicodeEncoding().GetString(data));
     84             }
     85             else
     86             {
     87                 StringBuilder sb = new StringBuilder();
     88                 for (int i = 0; i < data.Length; i++)
     89                 {
     90                     sb.AppendFormat("{0:x2}" + " ", data[i]);
     91                 }
     92                 AddContent(sb.ToString().ToUpper());
     93             }
     94         }
     95 
     96         /// <summary>
     97         /// 接收端对话框显示消息
     98         /// </summary>
     99         /// <param name="content"></param>
    100         private void AddContent(string content)
    101         {
    102             BeginInvoke(new MethodInvoker(delegate
    103             {              
    104                     textBox_Receive.AppendText(content);              
    105             }));
    106         }
    107 
    108         /// <summary>
    109         /// 串口开关
    110         /// </summary>
    111         /// <param name="sender"></param>
    112         /// <param name="e"></param>
    113         private void button_Switch_Click(object sender, EventArgs e)
    114         {
    115             if (comboBox_Port.Items.Count <= 0)
    116             {
    117                 MessageBox.Show("未发现可用串口,请检查硬件设备");
    118                 return;
    119             }
    120 
    121             if (ComDevice.IsOpen == false)
    122             {
    123                 //设置串口相关属性
    124                 ComDevice.PortName = comboBox_Port.SelectedItem.ToString();
    125                 ComDevice.BaudRate = Convert.ToInt32(comboBox_BaudRate.SelectedItem.ToString());
    126                 ComDevice.Parity = (Parity)Convert.ToInt32(comboBox_CheckBits.SelectedIndex.ToString());
    127                 ComDevice.DataBits = Convert.ToInt32(comboBox_DataBits.SelectedItem.ToString());
    128                 ComDevice.StopBits = (StopBits)Convert.ToInt32(comboBox_StopBits.SelectedItem.ToString());
    129                 try
    130                 {
    131                     //开启串口
    132                     ComDevice.Open();
    133                     button_Send.Enabled = true;
    134                 }
    135                 catch (Exception ex)
    136                 {
    137                     MessageBox.Show(ex.Message, "未能成功开启串口", MessageBoxButtons.OK, MessageBoxIcon.Error);
    138                     return;
    139                 }
    140                 button_Switch.Text = "关闭";
    141                 pictureBox_Status.BackgroundImage = Properties.Resources.green;
    142             }
    143             else
    144             {
    145                 try
    146                 {
    147                     //关闭串口
    148                     ComDevice.Close();
    149                     button_Send.Enabled = false;
    150                 }
    151                 catch (Exception ex)
    152                 {
    153                     MessageBox.Show(ex.Message, "串口关闭错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
    154                 }
    155                 button_Switch.Text = "开启";
    156                 pictureBox_Status.BackgroundImage = Properties.Resources.red;
    157             }
    158 
    159             comboBox_Port.Enabled = !ComDevice.IsOpen;
    160             comboBox_BaudRate.Enabled = !ComDevice.IsOpen;
    161             comboBox_DataBits.Enabled = !ComDevice.IsOpen;
    162             comboBox_StopBits.Enabled = !ComDevice.IsOpen;
    163             comboBox_CheckBits.Enabled = !ComDevice.IsOpen;
    164         }
    165 
    166       
    167         /// <summary>
    168         /// 将消息编码并发送
    169         /// </summary>
    170         /// <param name="sender"></param>
    171         /// <param name="e"></param>
    172         private void button_Send_Click(object sender, EventArgs e)
    173         {
    174             if (textBox_Receive.Text.Length > 0)
    175             {
    176                 textBox_Receive.AppendText("\n");
    177             }
    178 
    179             byte[] sendData = null;
    180 
    181             if (radioButton_Hex.Checked)
    182             {
    183                 sendData = strToHexByte(textBox_Send.Text.Trim());
    184             }
    185             else if (radioButton_ASCII.Checked)
    186             {
    187                 sendData = Encoding.ASCII.GetBytes(textBox_Send.Text.Trim());
    188             }
    189             else if (radioButton_UTF8.Checked)
    190             {
    191                 sendData = Encoding.UTF8.GetBytes(textBox_Send.Text.Trim());
    192             }
    193             else if (radioButton_Unicode.Checked)
    194             {
    195                 sendData = Encoding.Unicode.GetBytes(textBox_Send.Text.Trim());
    196             }
    197             else
    198             {
    199                 sendData = strToHexByte(textBox_Send.Text.Trim());
    200             }
    201 
    202             SendData(sendData);
    203         }
    204 
    205         /// <summary>
    206         /// 此函数将编码后的消息传递给串口
    207         /// </summary>
    208         /// <param name="data"></param>
    209         /// <returns></returns>
    210         public bool SendData(byte[] data)
    211         {
    212             if (ComDevice.IsOpen)
    213             {
    214                 try
    215                 {
    216                     //将消息传递给串口
    217                     ComDevice.Write(data, 0, data.Length);
    218                     return true;
    219                 }
    220                 catch (Exception ex)
    221                 {
    222                     MessageBox.Show(ex.Message, "发送失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
    223                 }
    224             }
    225             else
    226             {
    227                 MessageBox.Show("串口未开启", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
    228             }
    229             return false;
    230         }
    231 
    232         /// <summary>
    233         /// 16进制编码
    234         /// </summary>
    235         /// <param name="hexString"></param>
    236         /// <returns></returns>
    237         private byte[] strToHexByte(string hexString)
    238         {
    239             hexString = hexString.Replace(" ", "");
    240             if ((hexString.Length % 2) != 0) hexString += " ";
    241             byte[] returnBytes = new byte[hexString.Length / 2];
    242             for (int i = 0; i < returnBytes.Length; i++)
    243                 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Replace(" ", ""), 16);
    244             return returnBytes;
    245         }
    246 
    247         //以下两个指令是结合一款继电器而设计的
    248         private void button_On_Click(object sender, EventArgs e)
    249         {
    250             textBox_Send.Text = "005A540001010000B0";
    251         }
    252 
    253         private void button_Off_Click(object sender, EventArgs e)
    254         {
    255             textBox_Send.Text = "005A540002010000B1";
    256         }
    257     }
    258 }
    复制代码

    软件实现基本界面

    https://www.cnblogs.com/Traveller-Lee/p/6940221.html
     
    展开全文
  • 一、串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口...
  • 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信结构串口...
  • 初学串口通信

    2020-03-22 18:31:32
    初学串口通信 1、串口通信 ...串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能...
  • 一、串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口...
  • 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。 串口通信...
  • 安卓串口通信

    2020-09-10 16:24:20
    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。   串口通信(Serial Communications)是指外设和计算机间,通过...
  • 串口通信实例

    2017-06-16 13:22:30
    串口通信 串口通信协议 ...对于一个设备来说,要接收和发送串行通信的数据,需要一个器件将串行数据转换并行的数据以便于处理器进行处理,这个器件就是UART(Universal Asynchronous Receiver/Tra
  • Android 串口通信

    2018-06-02 07:13:12
    前段时间,接触了一个智能硬件的项目,在定制化的...串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功...
  • 1 引言串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。串口通信(Serial Communications)是指外设和计算机间,通过...
  • Linux 串口通信

    2011-06-24 09:13:00
    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。   原理:  ...
  • 串口通信模块1:串口基础知识

    万次阅读 2016-09-26 22:12:37
    同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,称为串行接口电路。常用的RS-232 (ANSI-EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、...
  • 一、串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口...
  • 一、串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口...
  • 可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。 3.串行通信和串口通信的区别: 串行通信是指一比特一比特的收发数据,包
  • C#串口通信 SerialPort类

    万次阅读 多人点赞 2018-07-05 09:45:33
    一、串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口...
  • 串口通信与串行通信的区分...串口按位(bit)发送和接收字节(byte)的通信方式,可以将来自CPU的并行数据字符转换位连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符提供给CPU的器件,一般...
  • 串行接口:是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。 USART:是一个全...
  • 1 引言串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。串口通信(Serial Communications)是指外设和计算机间,通过...
  • 3、232电平和TTL电平 4、串口通信硬件电路图 0x01串口简介串行接口是一种可以将接受来自CPU的并行数据字符,转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。...
  • 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信结构串口...
  • 如果查看一下典型通信系统的结构,可以看出很多元件都...串化器-解串器 (一般被称作串并行转换器) 就是用来实现这种转换的串并行转换器与光电传感器间的接口通常为高速串行数据流,利用一种编码方案实现不同信令
  • 串行通信

    2020-04-05 16:19:59
    数据转换是指数据的串并行转换。具体说,在发送端,要把并行数据转换为串行数据;而在接收端,却要把接收到串行数据转换为并行数据。 串行通信___异步传送方式 起止式异步通信的特点:传输不连续,以字符为单.....

空空如也

空空如也

1 2 3 4
收藏数 76
精华内容 30
关键字:

串并行通信转换的器件