C#串口通信

第一次听说C#串口通信 是在一个群里面 一个人说领导让他写一个串口通信 他不会,当时我在想,诶,我以后会遇到这样的问题吗?我会写吗?于是去查了一下百度,发现 好难啊,不会写,还是算了,自己又不搞这种东西以后肯定不会遇到啦!不管了,,一年多过去了,现在我开始出来实习了,可是天灾人祸也就这样发生了,我根本来不及反应,,我现在也要写串口通信这个东西...真的是要哭晕在厕所,我开始怀疑那次是不是在某一个时空的自己在提醒自己?还是说我的时空已经被玩坏了?还是说我的生活就像是楚门秀?[手动一脸懵逼],,最后到处查资料还是把他写出来了,,

但是网上好多都是写的窗体程序 还有各种复杂的类里面,看起来很费劲儿,所以我这里就写了一个 只有控制台 只有 一个主函数类 类似于c语言结构化的方式,把真的的问题暴露出来,重点凸出来...

大概步骤就是:检测串口是否存在以及数量-->定义一个端口句柄(SerialPort),-->设置端口句柄的信息(端口号,波特率,数据位,奇偶检验,停止位..)--->打开端口->发送消息,接收消息 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace cSharp_熟悉串口
{

    class Program
    {
        private static SerialPort serialPort;
        private static Thread threadRe;
        delegate void reDele(out string strRe); //委托 
        public static void sendToPort(string str)
        {
            // byte[] data = Encoding.Unicode.GetBytes(str); //将字符转为byte
            serialPort.WriteLine(str); //发送数据给串口
            Console.WriteLine("发送成功\n");
        }
        public static void receive()
        {
            string strRe;
            while (true)
            {
                // strRe = serialPort.ReadLine();
                strRe = serialPort.ReadTo("#");
                Console.WriteLine(strRe);
            }
        }

        static void Main(string[] args)
        {
            string[] str = SerialPort.GetPortNames();
            if (str == null)
            {
                Console.WriteLine("没有串口\n");
                return;
            }
            else
            {
                Console.WriteLine("本机的COM口列表:");
                foreach (string s in str) //输出本机所有的COM口名称
                    Console.WriteLine(s);
            }

            //foreach(string s in System.IO.Ports.SerialPort.GetPortNames()) //通过遍历获得串口号
            //{
            //    Console.WriteLine(s);
            //  }
            //str[0] 为COM1

            //定义一个串口句柄
            serialPort = new SerialPort();
            if (!serialPort.IsOpen) //如果串口没有打开
            {
                //设置串口号
                serialPort.PortName = str[4].ToString(); //给串口句柄绑定物理串口COM4(这里是虚拟出来的一个COM端口号(CVSPD软件) COM4 可以与COM5之间通信)
                // serialPort.PortName = "COM4"; //如果确定COM1口存在 可直接这样写
                serialPort.BaudRate = 9600; //设置串口波特率
                serialPort.DataBits = 8;    //设置串口数据位(8位总共就是10位 一个开始位 一个停止位)
                serialPort.StopBits = (StopBits)1; //设置停止位(当个包的最后一位,同步用 适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢)
                //奇偶检验
                serialPort.Open(); //打开端口
                if (!serialPort.IsOpen)
                {
                    Console.WriteLine("串口没有被打开");
                }
                //开启一个线程接收数据
                threadRe = new Thread(new ThreadStart(receive));
                threadRe.Start();
                while (true)
                {
                    //发送数据
                    string strInput;
                    strInput = Console.ReadLine();
                    sendToPort(strInput);
                }
                serialPort.Close();
                Console.ReadKey();
            }
        }
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值