串口通信 订阅
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。 展开全文
串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。
信息
外文名
Serial Communications
类    型
概念
类    别
通信
中文名
串口通信
标    准
ANSI/EIA-232
串口通信原理
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 [1]  这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
收起全文
精华内容
下载资源
问答
  • 串口通信
    千次阅读
    2021-07-30 00:39:04

    1, 485通讯与串口通讯区别

    84a6b067c3ecf33eaf5762586f0f5f73.png

    跟串口通信一样的。在串口上加个485转换器好了。 可以用现成的spcomm控件等对于软件来说,485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的485通信,只是在串口上加了一个转换器而已,就这么简单。 我以前做过的。答案补充 跟串口通信一样的。在串口上加个485转换器好了。 可以用现成的spcomm控件等对于软件来说,485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的485通信,只是在串口上加了一个转换器而已,就这么简单。 我以前做过的。

    2, 485 通讯 多点

    4b6e84e6223362818617ba8969a64788.png

    RS485是物理层不是通讯协议,以RS485为物理层的通讯协议有很多,例如:MODBUS,西门子的PROFIBUS DP , PA, MPI ,PPI ,等等。RS485是物理层,不是通讯协议,以RS485为物理层的通讯协议有很多,例如:MODBUS,西门子的PROFIBUS DP , PA, MPI ,PPI 等等。1、物理层(或称物理层,Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。2、物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。OSI采纳了各种现成的协议,其中有RS-232、RS-449、X.21、V.35、ISDN、以及FDDI、IEEE802.3、IEEE802.4、和IEEE802.5的物理层协议。

    名词解释

    串口

    串行接口(SerialInterface)简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口,指数据一位一位地顺序传送。 串行接口的特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。常见的有一般计算机应用的RS-232(使用 25 针或 9 针连接器)和工业计算机应用的半双工RS-485与全双工RS-422。

    485

    串口是一种接口标准,它规定了接口的电气标准,简单说只是物理层的一个标准。没有规定接口插件电缆以及使用的协议,所以只要我们使用的接口插件电缆符合串口标准就可以在实际中灵活使用,在串口接口标准上使用各种协议进行通讯及设备控制。所以485的使用范围广,通用性强。典型的串行通讯标准是RS232和RS485。

    通信

    通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法,任意媒质,将信息从某方准确安全地传送到另方。

    更多相关内容
  • 51单片机串口通信模拟实验,串口通信入门。
  • QNX下的串口通信,在实际的机器上测试了一下,发现可以连续的发送数据。
  • 在excel中加入串口通讯,可接收串口发来的数据,一行行显示,还有时间间隔显示
  • 施耐德M218的串口通讯范例
  • 互联网串口通信 让世界联网起来 2017版 周云波注 自存收藏
  • 完整串口通信程序Vc++源代码,实现通过串口发送和接收数据的功能
  • 本文给大家分享了串行通信(80C51单片机汇编语言编程)。
  • STM32串口通信入门介绍

    目录

    一、通讯的基本概念

    1.数据的传送方式

    2.数据的通讯方向

    3.数据的同步方式

    4.数据的传输速率

    5.电平信号标准

    二、串口通信

    1.串口通信介绍

    2.STM32上的USART

    3.USART库函数初始化

    (1)USART初始化结构体​

    (2)USART时钟初始化结构体


    一、通讯的基本概念

    1.数据的传送方式

    数据传送方式分为并行和串行两种方式。

    并行传输方式一次能通过8、16、32、64根数据线同时传输多位数据,传输速率高,一般用于特殊场合,比如芯片内部的总线。

    串行传输方式一次只能传输一位数据,传输速度慢,但节省数据线成本,可以满足长距离传输数据的要求。

    2.数据的通讯方向

    按信道方向区分,数据通讯方向可分为以下三类:

    全双工:双方可同时收发数据;

    半双工:双方可分时收发数据,不能同时发数据;

    单工:单方向收发数据。

    3.数据的同步方式

    根据通讯过程中是否使用到时钟信号可分为两种方式:

    同步:收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。该种方式传送的数据皆为有效数据,传输效率高,但对通讯双方时钟允许误差要求较高。

    例如SPI,I2C

    异步:不使用时钟信号进行数据同步,直接把主体数据进行打包,以数据帧的格式传输数据。该种方式传输的数据包含有数据帧的标识符,传输效率无同步高,但对时间允许误差大。

    例如UART通用异步收发器

    4.数据的传输速率

    这是一个衡量通讯性能的重要参数,单位为比特率(Bitrate),定义如下

    比特率:每秒钟传输的二进制位数,单位为比特每秒 (bit/s)

    容易混淆的是,在串口通信中,描述串口通信速率的是波特率(Baudrate),定义如下

    波特率:每秒钟传输的码元,单位为bps。

    常见的通讯传输中,比如TTL电平标准,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和1,所以此时一个码元等于一个二进制比特位,故此时波特率的大小与比特率一致;如果在通讯传输中,有0V、 2V、 4V 以及 6V 分别表示二进制数 00、01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。不过我们经常用到的是一个码元等于一个二进制比特位的情况,所以常会将波特率和比特率混为一谈。

    **补充**:在通信线路上表示0和1有两种方式,一种是电平信号,另一种是差分信号。电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。差分信号的传输线中没有参考电平线,所有都是信号线,然后1和0的表达靠信号线之间的电压差。电平信号的2根通信线之间的电平差异容易受到干扰,传输容易失败;差分信号不容易受到干扰,因此传输质量比较稳定。

    5.电平信号标准

    串口常用的电平标准有如下三种,在进行串口通信时,必须要统一标准。

    TTL电平:+5V表示10V表示0

    RS232电平:-3~-15V表示1+3~+15V表示0

    RS485电平:两线压差+2~+6V表示1-2~-6V表示0(差分信号)

    电子电路中常使用TTL标准,老式计算机和路由与调制调解器会使用到RS232标准,因为它抗干扰能力更强。

    二、串口通信

    1.串口通信介绍

    根据上面的划分,串口通信属于串行、异步、全双工/单工、使用电平信号中的TTL电平和RS232电平的通信方式。

    由于是异步通信,没有用到时钟信号,故两台通讯设备需要使用统一的波特率,常设置的波特率为 4800、 9600、 115200 等。

    现在的串口通信已经简化到只需要三根信号线:RXD、TXD、GND,当只使用GND和另外其中一根时实现单工通信。

    串口通讯的数据传输以帧(数据包)的形式由发送设备通过自身的 TXD 接口传输到接收设备的 RXD接口。在串口通讯的协议层中,规定了数据包的内容(如图),它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

    图中用虚线分开的每一格代表一个码元或一个二进制数。(波特率:每秒钟传输的码元。)

    数据包(帧)的起始信号由一个逻辑 0 的数据位表示;在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长;数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。

    在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验(even)、 0 校验 (space)、 1 校验 (mark) 以及无校验 (noparity)。
    奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为: 01101001,
    此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据
    加上 1 位的校验位总共 9 位。
    偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧: 11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
    0 校验是不管有效数据中的内容是什么,校验位总为“0”, 1 校验是校验位总为“1”。


    2.STM32上的USART

    STM32中实现串口通信的设备是通用同步异步收发器 (Universal Synchronous Asynchronous Receiver and Transmitter),USART。可以通过时钟进行同步串口通信,但我们一般只使用其中的异步功能,不使用时钟输出,即通用异步收发器UART(Universal Asynchronous Receiver and Transmitter)。

    以STM32F103RCT6为例,说明USART用到的引脚及功能:
    STM32F103RCT6 系统控制器有三个 USART 和两个 UART,其中 USART1 和时钟来源于 APB2 总线时钟,其最大频率为 72MHz,其他四个的时钟来源于 APB1 总线时钟,其最大频率为 36MHz,速率可达4.5Mbps。UART 只是异步传输功能,所以没有 SCLK、 nCTS 和 nRTS 功能引脚。

    我们需要重点关注的是发送数据引脚TX,和接收数据引脚RX

    USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。

    一个字符帧发送需要三个部分:起始位 + 数据帧 + 停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。

    当选择 8 位字长,使用 1 个停止位时,具体发送字符时序图见图字符发送时序图:

    数据接收时只需更改相关寄存器的值,原理和上述差不多。

    这里说明波特率在寄存器中如何设置,下面先给出计算公式:

    fck为 USART 时钟(72MHz或36MHz),需要我们设置的 USARTDIV 是一个存放在波特率寄存器 (USART_BRR) 的一个无符号定点数。其中 DIV_Mantissa[11:0] 位定义 USARTDIV 的整数部分, DIV_Fraction[3:0] 位定USARTDIV 的小数部分。

    例如USART1使用APB2(72MHz)的时钟,为得到115200bps的波特率,代入公式可以算的USARTDIV = 39.0625,则DIV_Fraction = 0.0625*16 = 0x01,DIV_Mantissa = 39 = 0x27,最终USART_BRR = 0x271.

    3.USART库函数初始化

    (1)USART初始化结构体

    1) USART_BaudRate:波特率设置。一般设置为 2400、 9600、 19200、 115200。标准库函数会根据设定值计算得到 USARTDIV 值,从而设置 USART_BRR 寄存器值。
    2) USART_WordLength:数据帧字长,可选 8 位或 9 位。它设定 USART_CR1 寄存器的 M 位的值。如果没有使能奇偶校验控制,一般使用 8 数据位;如果使能了奇偶校验则一般设置为 9 数据位。
    3) USART_StopBits:停止位设置,可选 0.5 个、 1 个、 1.5 个和 2 个停止位,它设定USART_CR2寄存器的 STOP[1:0] 位的值,一般我们选择 1 个停止位。
    4) USART_Parity:奇偶校验控制选择,可选 USART_Parity_No(无校验)、 USART_Parity_Even(偶校验) 以及 USART_Parity_Odd(奇校验),它设定 USART_CR1 寄存器的 PCE 位和 PS 位的值。
    5) USART_Mode: USART 模式选择,有 USART_Mode_Rx 和 USART_Mode_Tx,允许使用逻辑或运算选择两个,它设定 USART_CR1 寄存器的 RE 位和 TE 位。
    6) USART_HardwareFlowControl:硬件流控制选择,只有在硬件流控制模式才有效,可选有使能 RTS、 使能 CTS、 同时使能 RTS 和 CTS、 不使能硬件流。

    当使用同步模式时需要配置 SCLK 引脚输出脉冲的属性,标准库使用一个时钟初始化结构体USART_ClockInitTypeDef 来设置,该结构体内容也只有在同步模式才需要设置。

    (2)USART时钟初始化结构体

    异步 无需设置。

    1) USART_Clock:同步模式下 SCLK 引脚上时钟输出使能控制,可选禁止时钟输出(USART_Clock_Disable) 或开启时钟输出 (USART_Clock_Enable);如果使用同步模式发送,一般都需要开启时钟。它设定 USART_CR2 寄存器的 CLKEN 位的值。
    2) USART_CPOL:同步模式下 SCLK 引脚上输出时钟极性设置,可设置在空闲时 SCLK 引脚为低电平 (USART_CPOL_Low) 或高电平 (USART_CPOL_High)。它设定 USART_CR2 寄存器的 CPOL位的值。
    3) USART_CPHA:同步模式下 SCLK 引脚上输出时钟相位设置,可设置在时钟第一个变化沿捕
    获数据 (USART_CPHA_1Edge) 或在时钟第二个变化沿捕获数据。它设定 USART_CR2 寄存器的
    CPHA 位的值。 USART_CPHA 与 USART_CPOL 配合使用可以获得多种模式时钟关系。
    4) USART_LastBit:选择在发送最后一个数据位的时候时钟脉冲是否在 SCLK 引脚输出,可以是
    不输出脉冲 (USART_LastBit_Disable)、输出脉冲 (USART_LastBit_Enable)。它设定 USART_CR2 寄存器的 LBCL 位的值。

    下一篇写实验案例。


    参考资料:

    1.串口通信详解

    2.野火《STM32库开发指南》

    如需了解具体使用到的寄存器,可以参考官方文档,其他博客或书籍。

    展开全文
  • 基于stm32f767的串口通信例程,转载自正点原子。
  • 串口通信相关概念串行通信并行通信 串口通信分为串行通信与并行通信两种。 串行通信 串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间...
  • 用Delphi实现串口通讯,采用API方式在Delphi下实现串口通讯.
  • Arduino 串行通信串口通信 UART 原理及释义

    万次阅读 多人点赞 2019-03-28 09:43:53
    本系列中提到的串口通信一般指Arduino上面的USART通信模式,USART也是串行通信的一种,可以有硬串口,软串口两种实现方式,并且USART是一种异步串行通信. 相关案例: 环境监测 温湿度传感器 案例 

    简介

            对于Arduino来说,甚至是对于电子学领域来说,信号分为数字信号和模拟信号。这两种信号又分为输入和输出两种情况,所以我的理解是电子学就是一门研究这四种情况相互关系的学科。模拟信号是一种连续变化的物理量,能帮助我们更好地理解周围环境的信息,任何的信息都可以用模拟信号来准确表达,但其缺点是易受噪声的影响,信号被多次复制,或进行长距离传输之后,会发生衰减。相比而言数字信号受噪声的影响小,易于传输、处理和存储,现在被广泛应用于电子领域,但数字信号的缺点是每次的信息量小,只有0和1两种状态,所以就出现了串行通信的概念,通过多次的0或者1的数字信号组合来表达更丰富的信息。本章我们就来介绍一下Arduino中最基本的串行通信。

    串行通信

            串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位传送的,每一位为1或者为0。这就好像大家在电视里看到的通过敲门声的长短能够表达一些复杂的信息一样,这里敲门声的长短就相当于信号0或者1,只要双方约定好,就能够通过这种长短的变化表达固定的信息。在串行通信中,“双方约定好”这一点很重要,因为从实质上来说,通信的信号就是一堆0和1的数字,如果没有约定好这些0、1数字组合所代表的意义,那么双方不可能知道对方所发送信息的含义,就好像如果两个人交谈时使用不同的语言,那么他们的交谈是没有任何意义的。

    串行通信的约定

            串行通信中的这种约定包含两个方面,一方面是通信的速率要保持一致,另一方面是字符的编码要一致。

    波特率

            通信速率是指单位时间内传输的信息量,可用比特率和波特率来表示。比特率是指每秒传输的二进制位数,用bps (bits)表示。波特率是指每秒传输的符号数,若每个符号所含的信息量为1比特,则波特率等于比特率。在电子学中,一个符号的含义为高电平或低电平,它们分别代表"1"和"0"。所以 ,每个符号所含的信息量刚好为1比特,因此常将比特率称为波特率,即:

            1波特(B) =1比特(bit) =1位/秒(1bps)

            常用的波特率有: 110,300,600,1200,2400,4800,9600,19200,38400,115200等最常用的是9600。

    ASCII码

            ASCII码是由美国国家标准学会(American National Standard Institute , ANSI)制定的,其英文全称是American Standard Code for Information Interchange,它是现今最通用的单字节编码系统,主要是为了解决大家在串行通信中的信息一致性问题。在Arduino中也采用这种字符编码方式。

            在计算机中,所有的数据在存储和运算时都用0或者1来表示,像a,b,c,d这样的字母(包括大写共52个);以及0、1等数字还有一些常用的符号(*、#、@等)在计算机中都要使用0或1来表示,而具体用哪些0、1组合表示哪个符号,每个人都可以约定自己的一套定义(这个定义就叫编码),只要双方的编码一致就可以通信了。而要想让更多人互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCI1编码,统一规定了上述常用符号用哪些0、1的组合来表示。ASCII是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。

    标准的ASCII码

            ASCII码使用指定的7 bit或8 bit数据组合来表示128或256种可能的字符。标准,ASCI码使用7bit数据来表示所有的大写和小写字母、数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。

            其中0~31及127 (共33个)是控制字符或通信专用字符,如: LF (换行)、CR (回车)、FF (换页)、 DEL (删除)、BS (退格)、 BEL (响铃)等;通信专用字符包括:SOH (文头)、EOT (文尾)、ACK (确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。这些字符并没有特定的图形显示,但会依不同的应用程序,而对文本显示产生不同的影响,其余为可显示字符。32 ~ 126 (共95个)是字符(32是空格),其中 48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97 ~ 122号为26个小写英文字母,其余为一些标点符号、运算符号等。

    串行通信的应用

            使用串行通信我们就能让Arduino与计算机通信了,在Arduino端进行串行通信的引脚称为串行端口,一般分为发送和接收,其中发送用TX表示,接收用RX表示。

    深入了解Arduino与外部设备的通信方式,这些通信方式均属于串行通信.。串行通信是相对于并行通信的一个概念.。

    如上图所示,并行通信虽然可以多位数据同时传输,速度更快,但其占用的I/O口较多,而Arduino的I/O口资源较少,因此在Arduino中更常用的是串行通信方式。

            Arduino硬件集成了串口 IIC SPI 三种常见的通信方式,掌握了这三种通信类库的用法,即可与具有相应通信接口的各种设备通信,也可以为基于这些通信方式的传感器或模块写驱动程序。

    硬件串口通信---HardwareSerial 类库的使用

            串口,也称UART(Universal Asynchronous Receiver Transmitter,通用异步(串行)收/发器)接口,是指Arduino 硬件集成的串口。

            在Arduino中,通过Arduino上的USB接口与计算机连接而进行Arduino与计算机之间的串口通信。除此之外,还可以使用串口引脚连接其他的串口设备进行通信。需要注意的是,通常一个串口只能连接一个设备进行通信。

    连接如下图所示:

    在进行串口通信时,两个串口设备间需要发送端(TX)与接收端(RX)交叉相连,并共用电源地(GND)。

            在Arduino UNO 及其他使用ATmega328芯片的Arduino控制器中,只有一组串行端口,即位于0(RX)和1(TX)的引脚。

    串口工作原理

       在Arduino与其它器件通讯的过程中,数据传输实际上都是以数字信号(即电平高低变化)的形式进行的,串口通信也是如此。当使用Serial.print()函数输出数据时,Arduino的发送端会输出一连串的数字信号,称这些数字信号为数据帧。

       例如,当时用Serial.print('A')语句发送数据时,实际发送的数据帧格式如下图所示:

    (1)起始位

            起始位总为低电平,是一组数据帧开始传输的信号.

    (2)数据位

            数据位是一个数据包,其中承载了实际发送的数据的数据段. 当Arduino通过串口发送一个数据包时,实际的数据可能不是8位的,比如,标准的 ASCII码是0~127(7位). 而拓展的 ASCII码则是0~255(8位). 如果数据使用简单的文本(标准ASCII码),那么每个数据包将使用7位数据. Arduino默认使用8位数据位,即每次可传输1B数据.

    (3)校验位

            校验位是串口通信中一种简单的检错方式。 可以设置为偶校验或者奇校验。当然,没有校验位也可以。Arduino默认无校验位。

    (4)停止位      

            每段数据帧的最后都有停止位表示该段数据帧传输结束。 停止位总为高电平,可以设置为停止位为1位或2位。Arduino默认是1位停止位。

            当串口通信速率较高或外部干扰较大时,可能会出现数据丢失的情况。 为了保证数据传输的稳定性,最简单的方式就是降低通信波特率或增加停止位和校验位。 在Arduino中,可以通过Serial.begin(speed, config)语句配置串口通信的 数据位 停止位 和 校验位 参数。config 的可用配置可去网上搜索相应配置表。

    请大家注意区别:串口通信和串行通信。串行通信指的是一个大类,区别于并行通信;本系列中提到的串口通信一般指Arduino上面的USART通信模式,USART也是串行通信的一种,可以有硬串口,软串口两种实现方式,并且USART是一种异步串行通信.

    相关案例: 环境监测 温湿度传感器 案例   

    展开全文
  • 包含一个与PLC进行网络通讯和与外部设备进行串口通讯的程序
  • unity串口通信的源代码,可以直接导入unity中使用
  • AT89C51双机串口通信proteus仿真源文件(含汇编程序),两个单片机通过串口连接,有按键和LED,两个包含proteus工程源文件,单片机汇编语言程序。proteus8.6可正常打开,仿真。
  • 非常适合 单片机进一步学习 和串行通讯
  • 在VBA下的MSCOMM串口通讯实现,可以发送VISA指令,如"*IDN?"可以直接查询设备信息,这个时之前在学习时整理弄的 !给有需要的人!
  • STM32CUIDE之串口通信

    2021-01-06 09:09:59
    按通信的方式也可以分为串行和并行通信,串口通信只是众多串行通信当中的一种形式,通过开发板上的串口,将数据一位一位的一次传输。 所用设备 STM32MP157开发板,STLINK连接器,USB转TTL接口,5V电源。 开发环境 ...
  • 串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器...
  • 串口通信的重要性和基础就不用我多讲了吧?基础不懂直接点链接:https://blog.csdn.net/weixin_45629315/article/details/105717414 这一次的重点是讲解几个串口的实验来加深自己对串口通信的理解。 目录 实验一(将...
  • [通讯方式] 串口通信

    千次阅读 2022-03-07 16:02:49
    串口通信的重要概念 一. 前言 1、什么是通信? 发送方按照信息编码方式对有效信息进行编码(编成可以在通信线路上传输的信号形态); 编码后的信息在传输介质上进行传输,输送给接收方; 接收...
    • 📢博客主页:https://blog.csdn.net/weixin_43197380
    • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
    • 📢本文由 Loewen丶原创,首发于 CSDN,转载注明出处🙉
    • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

    一. 前言

    1、什么是通信?

    1. 发送方按照信息编码方式对有效信息进行编码(编成可以在通信线路上传输的信号形态);
    2. 编码后的信息在传输介质上进行传输,输送给接收方;
    3. 接收方接到编码信息后进行解码,解码后得到可以理解的有效信息

    可以理解为收发快递:卖家打包快递(编码)—— 快递小哥+运输车(传输介质)将打包好的快递给到买家手中 —— 买家拆开快递(解码),最终得到物品(有效信息)。

    2、同步通信和异步通信

    同步还是异步就看发送方和接收方的时钟频率是否一致:

    • [√] 同步通信:接收端发送端时钟信号频率一致,其发送端发送连续的比特流
    • [×] 异步通信:以字符为单位进行传输,接收端发送端时钟频率不要求同步,字符之间没有固定的时间间隔要求,但接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。

    在这里插入图片描述
    举个例子:大耳朵图图去牛爷爷家

    胡英俊对图图说:

    ①你自己去牛爷爷家吧,我去上班了,到牛爷爷家了给我打一个电话(异步通信)。

    ②胡英俊先送图图去牛爷爷家,确认送到牛爷爷家了之后,再去上班(同步通信)。

    3、电平信号和差分信号

    电平信号和差分信号是用来描述通信线路传输方式的。也就是说如何在通信线路上表示1和0。

    电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。电平信号的2根通信线之间的电平差异容易受到干扰,传输容易失败;

    差分信号的传输线中没有参考电平线,所有都是信号线,然后1和0的表达靠信号线之间的电压差。差分信号不容易受到干扰,因此传输质量比较稳定。现代通信一般都使用差分信号,电平信号几乎没有了。

    在电平信号下,”1根参考电平线+1根信号线“可以传递1位二进制;”1根参考电平线+2根信号线“可以同时发送2位二进制;如果想同时发送8位二进制就需要9根线。
    在差分信号下,2根线(彼此差分)可以同时发送1位二进制;如果需要同时发送8位二进制就需要16根线。

    总结: 在相同根数的通信线下, 表面上电平信号要比差分信号快;但是实际还是差分信号快,因为差分信号抗干扰能力强, 因此1个发送周期的时间耗时更少.

    4、串行接口和并行接口

    串行端口被描述为通道,而并行端口则表示有8条通道可同时传输8位(一个字节)的数据。

    在这里插入图片描述

    串行接口:
    串行接口,简称串口,也就是COM接口,是采用串行通信协议的扩展接口,数据传输率是115kbps~230kbps。

    串行接口是指数据是一位位地顺序传送出去的,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线。降低成本,适用于远距离通信,但传送速度慢

    并行接口:
    并行接口,简称并口,也就是LPT接口,是采用并行通信协议的扩展接口。并口的数据传输率比串口快8倍,标准并口的数据传输率为1Mbps。

    并行接口是指数据通过多条数据线同时传输出去,其特点是传输速度快(1Mbps),但当传输距离远、位数又多时,导致通信线路复杂且成本提高

    速度差异:
    ​通俗点讲,串口就像只有一条车道,而并口就是有8个车道,同一时刻能传送8位(一个字节数据)。但是并不是并口快,由于8位通道之间的互相干扰。传输速度就受到了限制。而且传输出错时,要同时重新传送8个位的数据。串口没有干扰,传输出错后重发以为就可以了。所以串口比并口快。串口硬盘就是这样被重视的,没有谁希望自己的机箱里出现一根胳膊粗的线束。

    历史上,工程师们确实是先做了串口,速度不够没办法只好含泪加电线上并口,直到他们发现了三大法宝(差分信号,时钟-数据恢复,和信道均一化)来提速,并口的动力就不那么强劲了。摘自:知乎:为什么串口比并口快?

    总结: 经过这么多年的发展,最终胜出的是: 异步、差分、串行, 譬如USB和网络通信。


    二. 串口通信的基本概念

    1、串口通信特点(异步、差分、串行通信)

    (1)异步

    串口通信的发送方和接收方之间没有统一的时钟信号,在异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现,具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后在发送有效字符位,在字符结束时在发送一个停止位。

    (2)差分信号

    串口通信出现的时间较早、速率较低、传输的距离较近,所有干扰不太明显,因此当时使用了电平信号传输。后期出现的传输协议都改成了差分信号传输了。

    (3)串行通信

    将数据按位(bit)依次传输, 每位数据占据固定的时间长度,即可使用少数几条通信线路就可以完成系统间交换信息

    ps:注意区分串行通信和串口通信:

    • 串行通信是通信双方按位(bit)进行,遵守时序的一种通讯方式;
    • 串口通信是一种通信手段,对标于以太网方式、红外方式、蓝牙方式等通信手段而言。

    常用的串口接头有两种,一种是9针串口(简称DB-9),一种是25针串口(简称DB-25)。每种接头都有公头和母头之分,其中带针状的接头是公头,而带孔状的接头是母头。9针串口的外观如图2所示。

    在这里插入图片描述
    在9针串口接头中,公头和母头的管脚定义顺序是不一样,这一点需要特别注意。那么,这些管脚都有什么作用呢?9针串口和25针串口常用管脚的功能说明如图所示:
    在这里插入图片描述

    典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。

    2、波特率

    波特率指的是串口通信的速率,也就是串口通信时每秒钟可以传输的数据位数(多少个二进制位 / 秒),譬如,每秒钟可以传输9600个二进制位(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。

    波特率不能随意指定,主要是因为:通信双方必须事先设定相同的波特率才能成功通信,如果发送方和接收方按照不同的波特率通信则根本收不到,因此波特率最好是大家熟知的而不是随意指定的;常用的波特率经过长久发展,就形成了共识,大家常用的就是9600或者115200。

    可以将波特率比喻为两个特工的联络暗号,只有联络暗号正确,才能进行后续信息的传送。


    3、起始位、数据位、奇偶校验位、停止位

    串口通信时,收发是一个周期一个周期进行的,每个周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元由:起始位+数据位+奇偶校验位+停止位组成的。

    在这里插入图片描述
    起始位: 就是数据开始的标志,由0开始,即低电平开始。

    数据位: 是一个通信单元中发送的有效信息位,是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(可以是5,7,8位三种,通常选择8位数据位,因为一般通过串口发送的文字信息都是ASCII码编码,而ASCII码中一个字符刚好编码为8位)。

    奇偶校验位: 是用来校验数据传输过程中的数据位,以防止数据位出错的。

    停止位: 是发送方用来表示本通信单元结束标志的,停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位、1.5位停止位、2位停止位等,一般使用的是1位停止位。

    总结:

    串口通信时因为是异步通信,所以通信双方必须事先约定好通信参数,这些通信参数包括:波特率、数据位、校验位、停止位(串口通信中起始位定义是唯一的,所以一般不用选择)。

    4、单工、半双工和全双工

    在通信中,相信大家也经常听说单工模式和双工模式,这是不同的通讯方式:

    • 单工模式:单方向收发数据,固定一方为发送端,一方为接收端。譬如,只能“A发送数据,B接收数据”。

    • 半双工模式(RS485):双方分时收发数据,譬如,“A发送数据,B接收数据”或者“A接收数据,B发送数据”,两个方向不能同时进行。

    • 全双功模式(RS232):双方同时收发数据,譬如,“A发送数据,B接收数据”同时“A接收数据,B发送数据”,两个方向同时进行。

    总结:

    半单工模式(RS485) 既可以使用一根数据线,又可以使用两根数据线,但是在切换数据传输方向时传输会有一些延时,故信息传输效率慢一些。全双工是两个单工通信的结合,参数一样的情况下,传输速度要比半双工高一些

    展开全文
  • 串行通信,通常利用RS232C或者RS485电气接口,实现ASCII码或者Modbus通讯;其特点是通信线路简单,成本较低,用于解决不同厂商产品之间节点少、数据量小、通讯速率低、实时性要求不高的场合,如过程仪表、变频器、...
  • 使用python开发的一个串口上位机应用,主要使用的工具包有pyside2、PyQtgraphy、pyserial。程序入口文件为data_app.py
  • 三菱FX5U用户手册(串行通信篇)
  • 串口通信基本概念(一)——串行与并行通信,同步与异步通信 一、串口通信简介 串口通信,顾名思义也就是利用串行接口进行通信串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,...
  • 测绘仪器与计算机之间的异步串行通信是现代测绘中经常遇到的问题,如何在Windows平台下实现测绘仪器与计算机之间数据通信是测量内、外业一体化的基本问题。在工作经验的基础上,详细研究和分析了利用Win32 API通信...
  • C8051F020串口编程实现单片机与上位机通信
  • ros串口通讯c++实现

    2020-08-31 12:38:03
    使用前,先安装sudo apt install ros-kinetic-serial 库,再进行编译
  • 有两种通信方式 并行通信和串行通信 (1)并行通信 指利用多条数据传输线将一个数据的各位同时发送或接收。 优点: 速度快 缺点: 占用引脚资源多 (2)串行通信 指利用一条传输线一位位地顺序发送或接收 串行通信有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 309,921
精华内容 123,968
关键字:

串口通信

友情链接: MyCAR.zip