zoukankan      html  css  js  c++  java
  • 【入门】C#串口编程

    目录

    一、硬件要求

    1. 硬线连接
    2. 虚拟串口软件

    二、软件编程

    1. 如何获得本机可用的串口列表
    2. 串口的常用操作
    3. 如何避免死锁
    • 硬件要求

    需要保证硬件是接通的,即没有硬件方面的问题。如果不能确定的,可以下载一个串口助手测试一下硬件。

    如果没有可以调试的串口,可以下载一个VSPM虚拟串口软件,虚拟自己的串口。

    • 软件编程

    【指导手册: SerialPort MSDN 

    •  
      • 如何获得本机可用的串口列表
    Microsoft.VisualBasic.Devices.Computer pc;
    pc
    =new Microsoft.VisualBasic.Devices.Computer();

    foreach (string s in pc.Ports.SerialPortNames)
    {
    comboBox1.Items.Add(s);//comboBox1为UI上的下拉列表
    }

    注:使用Microsoft.VisualBasic.Devices需要在工程中添加Microsoft.VisualBasic的引用。方法为:菜单栏“项目”-》“添加引用”-》选择“.NET”选项卡-》找到“Microsoft.VisualBasic”后,点击,然后按“确定”,即可。

    •  
      • 串口的常用操作
        • 1.声明并实例化串口
    System.IO.Ports.SerialPort com;
    com
    =new System.IO.Ports.SerialPort();
    •  
      •  
        • 2.打开串口
    com.Open();
    •  
      •  
        • 3.关闭串口
    com.Close();
    •  
      •  
        • 4.串口的读写

    ①使用writeLine写数据,用readLine读数据

    com.WriteLine("hello Elar");//写数据
    //other code
    string inStr = com.ReadLine();//读数据

    注:使用readline和writeline时,要注意事先设定serialport的newLine。

    com.NewLine ="\r\n";//一般方法
    //或者用下面的代码
    com.NewLine = Environment.NewLine;//这样比较好

    ②使用write写串口,read(或readExisting)读串口

    com.Write("hello Elar");

    read函数有两种实现方式(详见【这里】):

    建议用 SerialPort.Read (Byte[], Int32, Int32) 方式,因为使用byte方式发送和接收,可用在传输的时候避免因为编码的问题而出现乱码的情况。

    使用方法如下:

    byte[] readBuffer =newbyte[com.ReadBufferSize];
    com.Read(readBuffer,
    0, readBuffer.Length);

    ReadBufferSize 是SerialPort的公共属性之一,通过它可以获取或设置 SerialPort 输入缓冲区的大小。通过上面的代码读出的是二进制数据,可以通过如下代码将其转换为常见的string型数据:

    string s = Encoding.Unicode.GetString(readBuffer);//要求编码时候用的也是Unicode编码方式

    ReadExisting 和 write 配合使用,并避免乱码(黄色标识的部分)的方案如下:

    Byte[] data = Encoding.Unicode.GetBytes(sendText.Text);//sendText为输入发送数据的文本框
    string str = System.Text.Encoding.Unicode.GetString(data);
    com.Write(str);
    //向端口写数据
    Byte[] data = System.Text.Encoding.Unicode.GetBytes(port.ReadExisting());//从端口读数据
    string str = Encoding.Unicode.GetString(data);//将数据转换为string型
    •  
      • 如何避免死锁

    待续……

     

  • 相关阅读:
    python 注释
    python元祖
    浅谈单片机应用程序架构----本质是定时调用
    原子哥的STM32视频,我发现他们都看不懂原子哥里面按键扫描程序
    指针函数与函数指针的区别
    基于不带字库的图形LCD模块汉字显示解决方案
    GB2312编码
    C语言可变参简介
    kEIL5环境下移置STM32库文件
    nodejs表单验证
  • 原文地址:https://www.cnblogs.com/elaron/p/1985378.html
Copyright © 2011-2022 走看看