C# 之系列

串口通信

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。

创建C#串口通信程序之命名空间

System.IO.Ports命名空间中最重用的是SerialPort 类。

创建C#串口通信程序之创建SerialPort 对象

通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。

串口通信-属性

  • .BaudRate;获取或设置波特率
  • .BytesToRead;得到 接收到数据的字节数
  • .BytesToWrites;得到送往串口的字节数
  • .DataBits;获取或设置数据位
  • .IsOpen;获取一个值,判断串口是否打开
  • .Pariy;获取或设置校验位
  • .PortName;串口名称
  • .ReadBufferSize;获取或设置读取数据的缓存大小
  • .ReadTimeout;获取或设置读取操作未完成时发生超时之前的毫秒数 默认值-1
  • .StopBits;停止位
  • .NewLine;用于解释通过ReadLine()与WriteLine()的值
  • .WriteBufferSize;与ReadBufferSize相对
  • .WriteTimeout;与ReadTimeout相对

串口通信-方法

  • .Close();判断串口
  • .Open();打开串口
  • .Read(Byte[], int32, int32);读取数据
  • .Read(Char[], int32, int32);
  • .ReadByte();读取一个字节的数据
  • .ReadChar();读取一个字符的数据
  • .ReadLine();一直读取到输入缓冲区的NewLine值:返回string类型
  • .ReadExisting();读取可用的字节
  • .ReadTo(string value);读取数据,直到读到该value时停止。
  • .Write(string);写入数据
  • .Write(byte[], int32, int32);
  • .Write(char[], int32, int32);
  • .WriteLine(string value);将指定的value值与NewLine值一起写入

串口通信-写

        static SerialPort serialPort = new SerialPort();
        static void Main(string[] args)
        {
            serialPort.PortName = "COM1";//串口名称
            serialPort.BaudRate = 9600; //获取或设置波特率
            serialPort.Parity = Parity.Even;//获取或设置校验位
            serialPort.DataBits =8;//获取或设置数据位默认值8
            serialPort.StopBits = StopBits.One;// 停止位
            serialPort.Open();
            serialPort.Write("A");
            serialPort.Close();
        }

串口通信-读

        static SerialPort serialPort = new SerialPort();
        static void Main(string[] args)
        {
            byte[] a = System.Text.Encoding.ASCII.GetBytes(" ");
            serialPort.PortName = "COM1";//串口名称
            serialPort.BaudRate = 9600; //获取或设置波特率
            serialPort.Parity = Parity.None;//获取或设置校验位
            serialPort.DataBits =8;//获取或设置数据位默认值8
            serialPort.StopBits = StopBits.One;// 停止位
            serialPort.DataReceived += SerialPort_DataReceived;
            serialPort.Open();
            Console.ReadKey();
        }

        private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] b = new byte[8];
            int A = serialPort.Read(b,0,8);
            Console.Write(System.Text.Encoding.ASCII.GetString(b));
        }

如果没有测试串口,可以用Virtual Serial Port Driver Pro 模拟

C# 之系列_第1张图片

下载地址:

链接:
https://pan.baidu.com/s/1NTyNGpWi7YkmaKG4qnhuAA

提取码:ukqe

C# 之系列_第2张图片

SerialPort serialPort = new SerialPort();
        private void btmSend_Click(object sender, EventArgs e)
        {
            serialPort.PortName = "COM1";//串口名称
            serialPort.BaudRate = 9600; //获取或设置波特率
            serialPort.Parity = Parity.Even;//获取或设置校验位
            serialPort.DataBits = 8;//获取或设置数据位默认值8
            serialPort.StopBits = StopBits.One;// 停止位
            serialPort.Open();
            serialPort.Write(txtSend.Text);
            serialPort.Close();
        }

        private void btnReceive_Click(object sender, EventArgs e)
        {
            byte[] a = System.Text.Encoding.ASCII.GetBytes(" ");
            serialPort.PortName = "COM1";//串口名称
            serialPort.BaudRate = 9600; //获取或设置波特率
            serialPort.Parity = Parity.None;//获取或设置校验位
            serialPort.DataBits = 8;//获取或设置数据位默认值8
            serialPort.StopBits = StopBits.One;// 停止位
            serialPort.DataReceived += SerialPort_DataReceived;
            serialPort.Open();
        }

        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] b = new byte[8];
            int A = serialPort.Read(b, 0, 8);
            this.Invoke(new Action(() =>
            {
                txtReceive.Text = System.Text.Encoding.ASCII.GetString(b);
            }));
        }

串口测试工具 AccessPort

链接:https://pan.baidu.com/s/1HEvtpqBdIQsiVZ_cK5mnWA 
提取码:g4a7 

你可能感兴趣的:(串口通信,C#)