【C#】制作简易串口调试助手

①其实串口调试助手还是挺简单的,首先我们需要using一个重要的类。

using System.IO.Ports;

②new出一个实例

private SerialPort serialPort = new SerialPort();

③接下来到窗口里面获取当前电脑的串口

public MainWindow()
{
​ InitializeComponent();
​ string[] ports = SerialPort.GetPortNames(); //获取端口
this.cbPortName.ItemsSource = ports; //绑定数据源
}

④然后就可以明显看到下拉框有两个串口

serialport01

⑤我们接下来写打开串口逻辑

private void btnOpenOrClose_Click(object sender, RoutedEventArgs e)     //打开串口逻辑
{
string strContent = this.btnOpenOrClose.Content.ToString();
if (strContent == "打开串口")
{
//执行打开串口代码
serialPort.PortName = this.cbPortName.SelectedValue.ToString(); //串口名字
object objBaudRate =((ComboBoxItem)this.cbBaudRate.SelectedItem).Content;
serialPort.BaudRate = Convert.ToInt32(objBaudRate); //波特率
serialPort.StopBits = StopBits.One; //停止位
serialPort.DataBits = 8; //数据位
serialPort.Parity = Parity.None; //校验位
serialPort.Open(); //打开串口
btnOpenOrClose.Content = "关闭串口";
}
else
{
//执行关闭串口代码
serialPort.Close();
btnOpenOrClose.Content = "打开串口";
}
}

⑥那我们打开串口后怎么验证后,例如,我在按钮一上设置写入0x01 ,0xff ,0x80 ,0x10 ,0xef然后在硬件上面写收到这些数据则实现流水灯效果。

private void btn1_Click(object sender, RoutedEventArgs e)
{
byte[] data = { 0x01 ,0xff ,0x80 ,0x10 ,0xef};
serialPort.Write(data, 0, data.Length);
}

⑦因为我手上也没有硬件,实物看不到效果,但是我可以用两个串口调试助手之间来看是否发出去.

serialport02

⑧可以明显看出数据是可以发出去的,那我们来写数据接收,我需要写一个string的类来规范收到的数据为字符串,这一点我就不演示了,然后就new出一个实例。

private Data data = new Data();   //收到的数据,字符串格式

然后在窗口里面把数据源绑定到data上面

this.tbReceive.DataContext = data;      //接收框接收到的数据

但是不是这么简单就可以收到数据了,我们还需要在打开串口的逻辑里面补充代码

serialPort.DataReceived += (s1,e1) =>               //lambda表达式
{ //读取数据的核心代码
int len = serialPort.BytesToRead; //表示这一次接收到的数据长度
byte[] buffer = new byte[len];
serialPort.Read(buffer,0,len);
string str = BitConverter.ToString(buffer); //这个函数会将字节数组转换为字符串,但是中间有横线
str = str.Replace("-", " "); //把横线转换成空格
this.Dispatcher.Invoke(() => //线程分配器
{
this.tbReceive.Text += str + "\r\n";
});
};

⑨让我们来看看效果。

serialport03

一个基本功能的串口调试助手已经做好了,还可以自己去做更多功能,比如把按钮做成一个文本框,想输入啥就输入啥,这个并不是很难,自己去实现吧。

然后源码的下载链接是这个
源码下载

blank