C#获取本机串口参数(适合初学者参考)

版权声明:本博客所有原创文章转发或者拷贝均须注明出处,本人保留版权法律追诉权。 https://blog.csdn.net/haigear/article/details/84563913

在C#中实现串口相比VC下容易很多,只要在工具栏中拖一个串口控件,设置好串口号即可开始工作。
如果是在后台运行串口通讯,那么简单的设置已经足够了。
当然,我们如果想让这个串口有比较友好的界面设置那么,我们在实现的时候,往往需要把界面上增加一些串口属性参数的设置框。
一、串口号选择框的实现(最简单的办法枚举有所串口号)
我在网上见到过很多利用注册表或者System.Management来获取本机所有可用串口号的代码,给我的感觉都有舍近求远的嫌疑。这里我们用朴实的方法,一句话搞定:
string[] sps = SerialPort.GetPortNames();
comboBox1.Items.AddRange(sps);
这个方法必须保证引入System.IO.Ports;
我们平时不怎么用串口的人可能对这个方法不太熟悉,这里提供官方的链接,一看就懂;
SerialPort官方链接
二、波特率及停止位的选择框的实现
我仔细的找了官方的文档,没有发现可以直接枚举出来的属性和方法,那么这里只能自己建立枚举,这里写出来,大家拷贝后即可使用,代码如下:

/// <summary>
        /// 串口数据位列表(5,6,7,8)
        /// </summary>
        public enum SerialPortDatabits : int
        {
            FiveBits = 5,
            SixBits = 6,
            SeventBits = 7,
            EightBits = 8
        }

        /// <summary>
        /// 串口波特率列表。
        /// 75,110,150,300,600,1200,2400,4800,9600,14400,19200,28800,38400,56000,57600,
        /// 115200,128000,230400,256000
        /// </summary>
        public enum SerialPortBaudRates : int
        {
            BaudRate_75 = 75,
            BaudRate_110 = 110,
            BaudRate_150 = 150,
            BaudRate_300 = 300,
            BaudRate_600 = 600,
            BaudRate_1200 = 1200,
            BaudRate_2400 = 2400,
            BaudRate_4800 = 4800,
            BaudRate_9600 = 9600,
            BaudRate_14400 = 14400,
            BaudRate_19200 = 19200,
            BaudRate_28800 = 28800,
            BaudRate_38400 = 38400,
            BaudRate_56000 = 56000,
            BaudRate_57600 = 57600,
            BaudRate_115200 = 115200,
            BaudRate_128000 = 128000,
            BaudRate_230400 = 230400,
            BaudRate_256000 = 256000
        }

其余的属性,相对简单也不常用,这里不再赘述。

 public Form1()
        {
            InitializeComponent();
             //获取串口号     
            string[] sps = SerialPort.GetPortNames();
            comboBox1.Items.AddRange(sps);
            comboBox1.SelectedIndex=comboBox1.Items.Count-1;
            serialPort1.PortName = comboBox1.Text;
            //获取波特率
            SerialAttributeInfo.SetBauRateValues(comboBox2);
            //注意,在用indexof时要将数字转为字符串,否则找不到
            comboBox2.SelectedIndex = comboBox2.Items.IndexOf(serialPort1.BaudRate.ToString());
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text.Contains("O") && !serialPort1.IsOpen)
            {
                serialPort1.Open();
                             
                textBox1.Text = serialPort1.ReadChar().ToString();
                button1.Text = "关闭串口[&C]";
            }
            else
            {
                serialPort1.Close();
                button1.Text = "打开串口[&O]";
            }
            
        }

简单设置好后,我们就可以进行串口通讯了
运行效果如下图:
在这里插入图片描述
打开串口后可以收到串口的数据
在这里插入图片描述
这里的程序很简单,如果要比较好的实现时事通讯,那么最好用ReadBufferSize结合线程来控制读写。如果只需要简单的通讯,也可以结合计时器来实现。这里不再深入讨论。

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84563913