第一次听说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();
}
}
}
}