Visual studio之C# 串口通讯SerialPort

背景

App需要串口进行通讯,在此做个记录和简要说明。

正文

  1. 添加命名空间
using System.IO.Ports;
  1. 实例化串口
SerialPort serialPortO = new SerialPort();
  1. 设置SerialPort参数
// 获取当前所有的COM口讯息
String[] serialPort1Array = SerialPort.GetPortNames();
if (serialPort1Array != null && serialPort1Array.Length != 0)
{
        // 对串口进行排序
        Array.Sort<String>(serialPort1Array);
        // 选择首个串口
        serialPortO.PortName = serialPort1Array[0];
        // 波特率 9600
        serialPortIn.BaudRate = 9600;        
        // 数据位为 8 位
        serialPortO.DataBits = 8;
        // 停止位为 1 位
        serialPortO.StopBits = StopBits.One;
        // 无奇偶校验位
        serialPortO.Parity = Parity.None;
        // 读取串口超时时间为1000ms
        serialPortO.ReadTimeout = 1000;
}
  1. 打开串口
if(serialPortO.IsOpen)
{
        serialPortO.Close();
}
try
{
        serialPortO.Open();
}
catch (Exception ex)
{    // 捕捉异常
        Console.Write(ex);
}
  1. 往串口写入数据
if((serialPortO != null) && (serialPortO.IsOpen))
{
        byte[] buf = new byte[2];
        buf[0] = 0x01;
        buf[1] = 0x02;
        
        try
        {
            // 参数1:发送数据的缓存位置
            // 参数2:缓存数据位置的偏移值
            // 参数3:发送数据字节大小
            serialPortO.Write(buf, 0, 2);
        }
        catch (Exception ex)
        {    // 捕捉异常
            Console.Write(ex);
        }
}
  1. 从串口读数据
    SerialPort类有一个数据接收事件,可如下注册数据接收事件,
//serialPortIn_DataReceived便是数据接收事件处理函数
serialPortIn.DataReceived += serialPortIn_DataReceived;

参考MSDN文档SerialPort.DataReceived EventDataReceived事件的描述,当接收到eof字符时,就算没有达到ReceivedByteThreshold的阈值条件,DataReceived事件也会产生,并且DataReceived事件并不能保证每次都能在接收条件均符合时能准确的产生DataReceived事件,由此可见,在DataReceived事件处理函数中,不能直接处理接收到的数据,因为有可能没有接收完全,因此在该事件函数中应该只可对数据进行压栈处理,然后另外开一个线程出栈并处理这些数据才更为稳妥。

//读函数如下
if((serialPortO != null) && (serialPortO.IsOpen))
{
        byte[] revbuf = new byte[2];
        
        try
        {
            // 参数1:读取数据的缓存位置
            // 参数2:缓存读取据位置的偏移值
            // 参数3:读取数据字节大小
            serialPortO.Read(revbuf, 0, 2);
        }
        catch (Exception ex)
        {    // 捕捉异常
            Console.Write(ex);
        }
}

至此记录完毕。

参考链接

记录时间:2017-5-9
记录地点:深圳WZ

转载于:https://www.cnblogs.com/ChYQ/p/6829608.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值