做项目正好做到了这部分,查了很多相关的资料,终于成功了,这次利用到串口主要是因为gprs模块,发现串口也分2线和四线的2线的不支持全双工,四线的才支持,所以做之前要先把硬件是否支持弄清楚。
串口的读写分为两种形式:多线程,和单线程。
多线程需要自己起一个线程运行监听串口的功能,单线程可以使用c#自带的DataReceived。
首先,c#中有using System.IO.Ports;库里面有个专门提供给串口的类SerialPort,这个类介绍:
代码使用实例;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace chuankou
{
public partial class Form1 : Form
{
SerialPort _serialPort = null;
SerialPort spSend = null;
public Form1()
{
InitializeComponent();
_serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
}
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(DoUpdate));
}
private void DoUpdate(object s, EventArgs e)
{
this.textBox2.Text += _serialPort.ReadExisting();
}
private void DoUpdate1(object s, EventArgs e)
{
this.textBox4.Text += spSend.ReadExisting();
}
private void btnStart_Click(object sender, EventArgs e)
{
//_serialPort = new SerialPort();com1
//_serialPort.Handshake = Handshake.RequestToSendXOnXOff;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
_serialPort.Open();
//this.btnStart.Enabled = false;
}
private void button1_Click(object sender, EventArgs e)
{
//spSend = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
//spSend.Open();
byte[] f = new byte[200];
byte[] bytes = Encoding.UTF8.GetBytes(textBox1.Text);
//_serialPort.Write(bytes,0,textBox1.Text.Length);
_serialPort.Write(textBox1.Text);
//spSend.Close();
int i = 0;
}
private void button3_Click(object sender, EventArgs e)
{
//spSend = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
//spSend.Open();
spSend.Write(textBox3.Text);
//spSend.Close();
}
private void button4_Click(object sender, EventArgs e)
{
spSend = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
//spSend.Open();
spSend.DataReceived += new SerialDataReceivedEventHandler(spSend_DataReceived);
spSend.Open();
}
void spSend_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(DoUpdate1));
}
}
}
界面:
左边两个是发送,右边两个是接收,使用了串口模拟工具进行了模拟:Configure Virtual Serial Port Driver(虚拟串口驱动)
结果成功完成了全双工的串口通讯。