串口通信属性及事件解析
0 2022-11-30

  串口通信

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

  串口通信(Serial Communicaons)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;

  而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用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串口,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:

  (1)地线,

  (2)发送,

  (3)接收。

  本文以c#中的SerialPort类为例,分析串口各参数及事件,其他平台串口库的操作类似。

  专门串口通信的朋友,建议参看《Visual C 串口通信工程开发实例导航》。

  一、属性

  1. PortName 串口名 默认值COM1

  串口对于操作系统来说是一个文件,如果设置PortName为本机不存在的串口名(即文件名),如“COM7”或“COMK”,Open()打开串口将失败,提示“端口COM7不存在”。

  2. BaudRate 获取或设置串行波特率bit/s 默认值9600

  比特率=波特率X单个调制状态对应的二进制位数。

  RS232是要用在近距离传输上最大距离为30M

  RS485用在长距离传输最大距离1200M

  3. DataBits 获取或设置每个字节的标准数据位长度 默认值8

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

  4. StopBits 获取或设置每个字节的标准停止位数 默认值One

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

  5. Parity 获取或设置奇偶校验检查协议 默认值None

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

  校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

  6. ParityReplace 获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节 默认值63(?)

  7. ReadBufferSize 获取或设置 SerialPort 输入缓冲区的大小 默认值4096

  ReadBufferSize 属性忽略任何小于 4096 的值??由于 ReadBufferSize 属性只表示 Windows 创建的缓冲区,而 BytesToRead 属性除了表示 Windows 创建的缓冲区外还表示 SerialPort 缓冲区,所以 BytesToRead 属性可以返回一个比 ReadBufferSize 属性大的值。

  8. Readmeout 获取或设置读取操作未完成时发生超时之前的毫秒数 默认值-1

  确切的说Readmeout设置了Read(outBuf, offset, count)超时等待的时间,即如果接收缓冲区一直没有数据,则Read()等待Readmeout毫秒后甩TimeoutException异常。但是在ReadTimeout期间,只要有一个数据,则Read()立马返回,而不是等待count个字节数据。ReadTimeout不是为了Read()阻塞等待count个字节,那它有什么意义?

  9. ReceivedBytesThreshold 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数 默认值1

  如果缓冲区一次性有4个字节数据,那么DataReceived事件是触发1次还是4次?

  10. WriteBufferSize 获取或设置串行端口输出缓冲区的大小 默认值2048

  ReadBufferSize 属性忽略任何小于 4096 的值。

  由于 ReadBufferSize 属性仅表示 Windows 创建的缓冲区,所以它可以返回比 BytesToRead属性小的值,这表示 SerialPort 和 Windows 创建的缓冲区。

  11. WreiteTimeout 获取或设置写入操作未完成时发生超时之前的毫秒数 默认值-1

  写入超时值在 Win32 通信 API 中最初被设置为 500 毫秒。此属性允许您设置此值。此值可以设置为 0 以立即从写入操作返回,或设置为任意正值,也可以设置为默认的 InfiniteTimeout。此属性不影响 BaseStream 的 BeginWrite 方法。

  12. BytesToRead 获取接收缓冲区中数据的字节数

  由于 ReadBufferSize 属性只表示 Windows 创建的缓冲区,而 BytesToRead 属性除了表示 Windows 创建的缓冲区外还表示 SerialPort 缓冲区,所以 BytesToRead 属性可以返回一个比 ReadBufferSize 属性大的值。

  13. BytesToWrite 获取发送缓冲区中数据的字节数

  14. NewLine 获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值 默认值“\n”

  15. DiscardNull 获取或设置一个值,指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略 默认值false

  正常情况下,特别是对于二进制传输而言,此值应该设置为 false。将此属性设置为 true 会使 UTF32 和 UTF16 编码字节产生意外结果。

  16. Handshake 获取或设置串行端口数据传输的握手协议 默认值None

  使用握手时,将指示连接到 SerialPort 对象的设备在缓冲区中至少有 (ReadBufferSize-1024) 个字节时停止发送数据。当缓冲区中的字节数小于等于 1024 时,将指示设备重新开始发送数据。如果设备在大于 1024 个字节的块中发送数据,可能会导致缓冲区溢出。

  如果将 Handshake 属性设置为 RequestToSendXOnXOff 并将 CtsHolding 设置为 false,则不会发送 XOff 字符。如果后来将 CtsHolding 设置为 true,则必须发送更多的数据后才会发送 XOff 字符。

  17. Encodeing 获取或设置传输前后文本转换的字节编码 默认为 ASCIIEncoding

  ASCIIEncoding 不提供错误检测。出于安全原因,建议您使用 UTF8Encoding、UnicodeEncoding 或 UTF32Encoding 并启用错误检测。

  ASCIIEncoding 仅支持 U 0000 和 U 007F之间的 Unicode 字符值。因此,UTF8Encoding、UnicodeEncoding 和 UTF32Encoding 可以更好地适应全球化的应用程序。

  18. DtrEnable 获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号 默认值 false

  在 XON/XOFF 软件握手、请求发送/可以发送 (RTS/CTS) 硬件握手和调制解调器通信的过程中通常启用数据终端就绪 (DTR)。

  19. RtsEnable 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号 默认值false

  请求发送 (RTS) 信号通常用在请求发送/可以发送 (RTS/CTS) 硬件握手中。

  20. CDHolding 获取端口的载波检测行的状态

  此属性可用于监视端口的载波检测行的状态。无载波通常表明接收方已挂断且载波已被丢弃。

  21. CtsHolding 获取“可以发送”行的状态

  在请求发送/可以发送 (RTS/CTS) 硬件握手中使用可以发送 (CTS) 行。发送数据之前端口会查询 CTS 行。

  22. DsrHolding 获取数据设置就绪 (DSR) 信号的状态

  在数据设置就绪/数据终端就绪 (DSR/DTR) 握手中使用此属性。通常由调制解调器将数据设置就绪 (DSR) 信号发送到端口,以表明它已经为数据传输或数据接收做好准备。

  23. BufferSize 值1024

  24. maxDataBits 值8

  25. minDataBits 值5

  26. SERIAL_NAME 值\\Device\\Serial

  二、方法

  1. Open() 打开一个新的串行端口连接

  2. Close() 关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象

  3. Read(Byte[], int, int) 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处

  4. ReadByte() 从 SerialPort 输入缓冲区中同步读取一个字节

  5. ReadChar() 从 SerialPort 输入缓冲区中同步读取一个字符

  6. ReadExisting() 在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节

  6. ReadLine() 一直读取到输入缓冲区中的 NewLine 值

  7. ReadTo() 一直读取到输入缓冲区中的指定 value 的字符串

  8. Write(string) 将指定的字符串写入串行端口

  9. Write(Byte[], int, int) 使用缓冲区的数据将指定数量的字符写入串行端口

  10. WriteLine() 将指定字符串和NewLine值写入输出缓冲区

  11. DiscardInBuffer() 丢弃接收缓冲区的数据

  12. DiscardOutBuffer() 丢弃发送缓冲区的数据

  12. static GetPortNanes() 获取当前计算机的串口名称数组

  三、事件

  1. DataReceive事件 数据接收事件的方法

  不保证对接收到的每个字节引发 DataReceived 事件。 使用 BytesToRead 属性确定缓冲区中剩余的要读取的数据量。从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。

  2. PinChanged事件 串行管脚更改事件的方法

  在 SerialPort 对象进入 BreakState 时引发,但在端口退出 BreakState 时不引发。将在辅助线程上引发 PinChanged 事件。

  3. ErrorReceived事件 错误事件的方法

  如果在流的尾字节上出现奇偶校验错误,将向输入缓冲区添加一个值为 126 的额外字节。将在辅助线程上引发 PinChanged 事件。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • RF
  • 射频
  • 通信
  • 无线
  • 工业通信用的USB串口光纤通信方案

    目前计算机的USB接口已经大量使用,一般每台计算机都有多个USB口。当USB的通信距离超过几十米后,采用电缆连接方案甚至无线方案都已经无法实现,目前只有光纤可以

    12小时前
  • 基站测试套件-保证大功率基站的正常工作

    1、内容提要 一个完整的蜂窝基站由二大部分系统组成——发射机和天馈线系统。从发射机到天线之间有很多物理连接点,每个环节之间的良好匹配是保证系统正常工作的关键。从测试角度看,必须从二个方向来综合考虑——从发射机的射频输出端口向发射机方向看过去的匹配情况;和从天线输入端口向天线方向看过去的匹配情况。少了其中一项,如用天馈线分析仪进行天馈线系统的匹配测量,只能说完成了整个系统一半的测试。 在本文中,讨论...

    昨天
  • 移动终端非信令生产测试渐行渐近

    1、概述 根据资料显示全球手机数量已经从2000年不到10亿部,增长到现在的60亿部,其中近50亿部都在发展中国家。估计,到2015年,世界上将有人口75亿,而手机将达到近90亿部。2012年中国智能终端出货量达2.24亿部,已成为全球最大的智能手机生产国。移动终端终端的制式从单模变为多模,支持2G、3G,甚至4G,频段从单频段到7、8频段,甚至10频段,终端的变化给移动终端生产厂家带来了巨大的挑...

    昨天
  • 多模扫频仪在LTE网络规划和优化中的运用

    1、概述 随着国内4G牌照发放,全国各省份都在紧锣密鼓地开展TD-LTE网络建设。TD-LTE网络的规划到优化,越来越受运营商的重视,都已成为如今工作的关注重点。 由于TD-LTE网络制式的自身特点,以及同频组网的特殊性,使得TD-LTE网络对于覆盖和干扰的控制有着很高的要求。同时,在步入4G商用的时代,绝大多数用户仍然使用着2G和3G网络,对于TD-SCDMA和GSM的网络的日常优化也是丝毫不能...

    昨天
  • ZVL网络分析仪在射频产品测量中的应用

    在射频产品的研发和生产过程中,往往需要进行射频信号的频谱分析、信号的解调分析、接收灵敏度测试和硬件电路的S参数测试,工程师以此来优化和检验产品的设计,使得产品的性能达到最佳状态;为了保证产品的电磁兼容设计符合规范也需要做电磁兼容摸底测试,即预认证测试。因此,频谱分析仪、矢量网络分析仪、测量接收机、噪声系数分析仪和信号分析仪必不可少,对于研制普通射频产品的单位来说,非常昂贵的测试仪器投资在短时间内很...

    昨天
  • 4G LTE设备测试的考虑因素

    本文旨在对4G LTE和LTE-Advanced设备在制造和测试过程中会遇到的一些挑战进行分析。这些挑战既有技术方面的,也有经济方面的。了解哪些缺陷需要检测有助于我们在实际的生产环境中采用更好的测试方法。4G设备制造商们可以通过现有测试技术和未来新型测试理念的结合,来确保为他们的客户提供高质量的用户体验。 LTE和LTE-Advanced技术:速度和数据容量 4G蜂窝移动通信技术的部署同时为消费者...

    昨天
  • 10GHz~90GHz宽口径变温噪声源

    1、引言 微波辐射计是一种用于测量物体微波热辐射的被动遥感仪器。由于物体的微波辐射信号是极其微弱的非相干信号,这种信号的功率比辐射计本身的噪声功率还要小很多,所以辐射计实质是一台高灵敏度接收机。为克服系统噪声和通道增益漂移对微波辐射计灵敏度、线性度和稳定性的影响,必须建立微波辐射计的输入亮温与输出电压之间的精确关系,称之为辐射计定标。定标精度将直接影响辐射计的测量精度。在已经发射的“风云三号(FY...

    昨天
  • 射频概念知识总结

    概念辨析:dBm,dBi,dBd,dB,dBc1、dBmdBm是一个考征功率绝对值的值,计算公式为:10lgP(功率值/1mw)。[例1]如果发射功率P为1mw

    昨天
  • 802.11ac 5GHz设备在生产过程中的明智测试方法

    对于最新的802.11ac标准,制造工程师们正面临越来越大的复杂性,这反过来又促使他们对测试策略进行不断的创新,以满足这些新近出现的要求。首先,也是最重要的一点是,在5GHz频段内以更高的带宽和调制阶数进行设备测试就意味着为工厂购买新的设备。但是,采用当今最新技术的设备还需要为传统的技术标准(802.11a/b/g/n)执行后向兼容测试,这就使问题变得更为复杂。考虑到这种趋势,工程师们在制定测试策...

    前天
  • 海量存储宽带接收机技术和方案

    一、概述 Keysight的M9392A 产品是一款高性能的海量存储宽带接收机,它的分析频率范围覆盖50MHz 到26.5GHz,高达250MHz 的瞬时带宽,并具有高达100MHz 模拟带宽的大数据量流盘能力。M9392A 系统由4 到5 个模块组成,它们分别是:M9360A PXI /预选器,M9361A 和M9351A (可选) PXI 下变频器,M9302A PXI 本振,和M9202A ...

    前天
  • 数字工程师需要掌握的射频知识

    做为一名高速数字电路设计或测试的工程师,仅仅借助于传统的时域方法去对信号和传输通道进行研究会面临很多制约。数字工程师需要掌握哪些射频知识呢?让我们分两期带大家去了解一下。 *** 上篇 *** 一、前言 随着人们对于海量数据传输和存储的需要,越来越多的数字总线数据速率达到了Gbit/s以上,比如HDMI的数据速率达到3.4Gb/s,USB3.0 的数据速率达到5Gb/s,SATA的数据速率达到...

    前天
  • C-RAN组网时的CPRI时延抖动测试方法

    集中基带池和分布式射频拉远技术是4G LTE无线接入网组网的发展趋势。为了节省光纤资源,会把基带池和多个射频拉远模块间的CPRI链路复用在一根光纤上进行传输,由此增加的时延抖动是否会影响系统可靠性是设计组网方案时要重点考虑的因素。本文介绍了一种利用是德公司(原安捷伦公司电子测量仪器部)的高带宽实时示波器进行C-RAN组网时的CPRI时延抖动测试的方法,并根据实际测试结果对彩光直驱和OTN承载两种方...

    02-06
下载排行榜
更多
广告