串口通信
在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。
创建C#串口通信程序之命名空间
System.IO.Ports命名空间中最重用的是SerialPort 类。
创建C#串口通信程序之创建SerialPort 对象
通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。
串口通信-属性
- .BaudRate;获取或设置波特率
- .BytesToRead;得到 接收到数据的字节数
- .BytesToWrites;得到送往串口的字节数
- .DataBits;获取或设置数据位
- .IsOpen;获取一个值,判断串口是否打开
- .Pariy;获取或设置校验位
- .PortName;串口名称
- .ReadBufferSize;获取或设置读取数据的缓存大小
- .ReadTimeout;获取或设置读取操作未完成时发生超时之前的毫秒数 默认值-1
- .StopBits;停止位
- .NewLine;用于解释通过ReadLine()与WriteLine()的值
- .WriteBufferSize;与ReadBufferSize相对
- .WriteTimeout;与ReadTimeout相对
串口通信-方法
- .Close();判断串口
- .Open();打开串口
- .Read(Byte[], int32, int32);读取数据
- .Read(Char[], int32, int32);
- .ReadByte();读取一个字节的数据
- .ReadChar();读取一个字符的数据
- .ReadLine();一直读取到输入缓冲区的NewLine值:返回string类型
- .ReadExisting();读取可用的字节
- .ReadTo(string value);读取数据,直到读到该value时停止。
- .Write(string);写入数据
- .Write(byte[], int32, int32);
- .Write(char[], int32, int32);
- .WriteLine(string value);将指定的value值与NewLine值一起写入
串口通信-写
static SerialPort serialPort = new SerialPort();
static void Main(string[] args)
{
serialPort.PortName = "COM1";//串口名称
serialPort.BaudRate = 9600; //获取或设置波特率
serialPort.Parity = Parity.Even;//获取或设置校验位
serialPort.DataBits =8;//获取或设置数据位默认值8
serialPort.StopBits = StopBits.One;// 停止位
serialPort.Open();
serialPort.Write("A");
serialPort.Close();
}
串口通信-读
static SerialPort serialPort = new SerialPort();
static void Main(string[] args)
{
byte[] a = System.Text.Encoding.ASCII.GetBytes(" ");
serialPort.PortName = "COM1";//串口名称
serialPort.BaudRate = 9600; //获取或设置波特率
serialPort.Parity = Parity.None;//获取或设置校验位
serialPort.DataBits =8;//获取或设置数据位默认值8
serialPort.StopBits = StopBits.One;// 停止位
serialPort.DataReceived += SerialPort_DataReceived;
serialPort.Open();
Console.ReadKey();
}
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] b = new byte[8];
int A = serialPort.Read(b,0,8);
Console.Write(System.Text.Encoding.ASCII.GetString(b));
}
如果没有测试串口,可以用Virtual Serial Port Driver Pro 模拟
下载地址:
链接:
https://pan.baidu.com/s/1NTyNGpWi7YkmaKG4qnhuAA提取码:ukqe
SerialPort serialPort = new SerialPort();
private void btmSend_Click(object sender, EventArgs e)
{
serialPort.PortName = "COM1";//串口名称
serialPort.BaudRate = 9600; //获取或设置波特率
serialPort.Parity = Parity.Even;//获取或设置校验位
serialPort.DataBits = 8;//获取或设置数据位默认值8
serialPort.StopBits = StopBits.One;// 停止位
serialPort.Open();
serialPort.Write(txtSend.Text);
serialPort.Close();
}
private void btnReceive_Click(object sender, EventArgs e)
{
byte[] a = System.Text.Encoding.ASCII.GetBytes(" ");
serialPort.PortName = "COM1";//串口名称
serialPort.BaudRate = 9600; //获取或设置波特率
serialPort.Parity = Parity.None;//获取或设置校验位
serialPort.DataBits = 8;//获取或设置数据位默认值8
serialPort.StopBits = StopBits.One;// 停止位
serialPort.DataReceived += SerialPort_DataReceived;
serialPort.Open();
}
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] b = new byte[8];
int A = serialPort.Read(b, 0, 8);
this.Invoke(new Action(() =>
{
txtReceive.Text = System.Text.Encoding.ASCII.GetString(b);
}));
}
串口测试工具 AccessPort
链接:https://pan.baidu.com/s/1HEvtpqBdIQsiVZ_cK5mnWA
提取码:g4a7