C# (江湖熟手)- 串口设备对接

news/2024/11/30 0:40:19/

基本概况

串口介绍

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

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

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

    • 数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。

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

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

  • 串口通信的接口标准:标准有很多,有 RS-232C、RS-232、RS-422A、RS-485 等。常用的就是 RS-232 和 RS-485。串口通信使用的大多都是 DB9 接口,如下图

  • 1 载波检测(DCD)         2 接受数据(RXD)         3 发出数据(TXD)         4 数据终端准备好(DTR) 5 信号地线(SG)         6 数据准备好(DSR)         7 请求发送(RTS)         8 清除发送(CTS) 9 振铃指示(RI)

c#中的串口操作类

System.IO.Port.SerialPort.NET Framework提供的操作串行端口的类,里面提供了一些方法、属性和和事件供开发者调用操作串口。

 常用字段:

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

示例

// 建立串口对象
private static SerialPort serialPort;public void init()
{serialPort = new SerialPort();//串行波特率serialPort.BaudRate = 115200;//每个字节的标准数据位长度serialPort.DataBits = 8;// 设置每个字节的标准停止位数serialPort.StopBits = StopBits.One;// 读、写 超时时间 单位毫秒serialPort.ReadTimeout = 500;serialPort.WriteTimeout = 500;// 串口名称serialPort.PortName = "COM1";}

常用方法

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

示例

public void test1()
{// 判断串口是否打开if (serialPort==null || serialPort.IsOpen){return;}// 打开串口serialPort.Open();// 读取串口中的内容serialPort.ReadExisting()//如果串口处于打开状态,则关闭if (serialPort.IsOpen){// 关闭串口serialPort.Close();}	
}

常用事件

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

示例

public void test2()
{//设备监听回调serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}// 回调方法
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{try{//解析内容SerialPort sp = (SerialPort)msg;string content = sp.ReadExisting();Console.WriteLine("WX GZH: 程序猿知秋,"+content);}catch (Exception ex){Console.WriteLine(ex);}}

http://www.ppmy.cn/news/252080.html

相关文章

linux系统下串口设备和串口号绑定

3.7 linux系统下串口设备和串口号绑定 3.7.1 问题由来 ​在ROS小车的开发过程中,需要使用ROS通信串口模块、激光雷达的串口模块、IMU的串口模块等,为了防止每次开机这些设备的串口号发生变动,所以需要对串口号与串口设备绑定;为了更好的识别串口,我们也可以对串口号进行…

【Vue】二:Vue核心处理---vue的其它指令和自定义指令

文章目录 1.vue的其它指令1.1v-text 和 v-html1.2 v-cloak1.3 v-once1.4 v-pre 2. 自定义指令2.1 函数式2.2 对象式2.3.定义全局的指令 1.vue的其它指令 1.1v-text 和 v-html v-text:当做文件解析。 v-html:当做 HTML 代码解析。 1.2 v-cloak v-cloa…

linux串口设备配置方法(固定ID)

硬件开发时有时候需要配置USB串口,一般配置方式有以下两种: 一、对于没有重复ID的情况 1.1、查看设备ID: 输入指令: lsusb例如图片中的最上面0951:1666就是对应Kingston Technology DataTraveler 100 G3/G4/SE9 G2设备的ID号&…

串口

dbg_print怎么打开? 哪个宏控制呢? DRV_DEBUG打开后串口还是没有信息出来 make/drv/drv.def中加入DRV_DEBUG 我一般在dbgprint.c里面直接修改#if 1//def DRV_DEBUG#if 1//(!defined(IC_MODULE_TEST)) ---------------------------------------------…

C++串口同步和异步的读取与串口设备编程

本文主要讲述如何对串口进行高效率的读写,当串口中数据到达时立即读取进行处理,以及如何将该方法运用到串口设备编程中。为了使得程序更加清晰文中的代码去除了异常处理的情况。文中加粗的文字相应的比较重要,需要多注意。当然文中会有错误&a…

串口通信

串口 一、并行通信和串行通信1、串行通信2、并行通信 二、同步通信和异步通信1、同步通信2、异步通信三、串口1、了解什么是串口2、串口的几个电平标准3、串口的通信原理波特率起始位、停止位数据位数据校验位 额外说明 一、并行通信和串行通信 1、串行通信 串行通信技术&…

使用USB Gadget框架让USB变成串口设备

1. 背景介绍 串口是一种经典且对软件工程师友好的通信方式,因为可以在直接使用echo进行通信,不需要驱动,非常的方便,但当使用串口时,往往需要用到杜邦线和usb2ttl设备,虽然软件上面方便了,但是…

RT-Thread串口设备驱动框架

转自:嵌入式系统学习记录 - 知乎 目录 1. 串口设备控制块 2. 注册串口设备rt_hw_serial_register 3. 串口设备操作方法 3.1 rt_serial_init 3.2 rt_serial_control 3.3 rt_serial_open 3.4 rt_serial_close 3.5 rt_serial_read 3.6 rt_serial_write 串口驱…