1、生成串口调试助手的主要控件
2、生成串口对象
3、书写代码
3.1 串口的选择
跳转到图形化界面,然后双击空白位置,会自动生成From1_Load,此函数的作用是会更新串口的选择,然后加入代码,combox控件就可以识别串口
/* 新增自定义函数:更新可用串口 */
private void Updata_Serialport_Name(System.Windows.Forms.ComboBox MycomboBox)
{
string[] ArryPort; // 定义字符串数组,数组名为 ArryPort
ArryPort = SerialPort.GetPortNames(); // SerialPort.GetPortNames()函数功能为获取计算机所有可用串口,以字符串数组形式输出
MycomboBox.Items.Clear(); // 清除当前组合框下拉菜单内容
for (int i = 0; i < ArryPort.Length; i++)
{
MycomboBox.Items.Add(ArryPort[i]); // 将所有的可用串口号添加到端口对应的组合框中
}
}
private void Form1_Load(object sender, EventArgs e)
{
Updata_Serialport_Name(portNameCB); // 调用更新可用串口函数,portcomboBox为端口号组合框的名称
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//设置该属性 为false
}
3.2 打开串口
跳转到图形化界面,然后双击打开串口按钮,会自动跳转到openSerialPortButton_Click函数,然后加入下面代码
private void openSerialPortButton_Click(object sender, EventArgs e)
{
if (openSerialPortButton.Text == "打开串口") // 如果当前是串口设备是关闭状态
{
try // try 是尝试部分,如果尝试过程中出现问题,进入catch部分,执行错误处理代码
{
SerialPort.PortName = portNameCB.Text;
SerialPort.BaudRate = Convert.ToInt32(baudRateCB.Text);
SerialPort.Parity = (Parity)Enum.Parse(typeof(Parity), parityCB.Text);
SerialPort.DataBits = Convert.ToInt32(dataBitCB.Text);
switch (stopBitCB.Text)
{
case "1":
SerialPort.StopBits = StopBits.One;
break;
case "2":
SerialPort.StopBits = StopBits.Two;
break;
}
SerialPort.Open(); // 打开串口,如果打开了继续向下执行,如果失败了,跳转至catch部分
baudRateCB.Enabled = false;
portNameCB.Enabled = false;
parityCB.Enabled = false;
dataBitCB.Enabled = false;
stopBitCB.Enabled = false;
openSerialPortButton.BackColor = Color.Red; // 将串口开关按键的颜色,改为红色
openSerialPortButton.Text = "关闭串口"; // 将串口开关按键的文字改为“关闭串口”
}
catch
{
MessageBox.Show("打开串口失败,请检查串口", "错误"); // 弹出错误对话框
}
}
else // 如果当前串口设备是打开状态
{
try
{
SerialPort.Close(); // 关闭串口
baudRateCB.Enabled = true;
portNameCB.Enabled = true;
parityCB.Enabled = true;
dataBitCB.Enabled = true;
stopBitCB.Enabled = true;
openSerialPortButton.BackColor = Color.Lime; // 将串口开关按键的颜色,改为青绿色
openSerialPortButton.Text = "打开串口"; // 将串口开关按键的文字改为“打开串口”
}
catch
{
MessageBox.Show("关闭串口失败,请检查串口", "错误"); // 弹出错误对话框
}
}
}
3.3 串口接收
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string str = SerialPort.ReadExisting(); // 读取串口接收缓冲区字符串
receiveTB.AppendText(str + ""); // 在接收文本框中进行显示
}
3.4 串口发送
双击串口发送按钮,然后发送数据(数据只会以字符ASCII的形式发出)
private void sendButton_Click(object sender, EventArgs e)
{
if (SerialPort.IsOpen) // 如果串口设备已经打开了
{
char[] str = new char[1]; // 定义一个字符数组,只有一位
try
{
for (int i = 0; i < sendTextBox.Text.Length; i++)
{
str[0] = Convert.ToChar(sendTextBox.Text.Substring(i, 1)); // 取待发送文本框中的第i个字符
SerialPort.Write(str, 0, 1); // 写入串口设备进行发送
}
}
catch
{
MessageBox.Show("串口字符写入错误!", "错误"); // 弹出发送错误对话框
SerialPort.Close(); // 关闭串口
openSerialPortButton.BackColor = Color.Lime; // 将串口开关按键的颜色,改为青绿色
openSerialPortButton.Text = "打开串口"; // 将串口开关按键的文字改为“打开串口”
}
}
}
3.5 清除接收和发送窗口
点击对应的按钮,加入代码即可
private void clearSendButton_Click(object sender, EventArgs e)
{
sendTextBox.Text = "";
}
private void clearReceiveButton_Click(object sender, EventArgs e)
{
receiveTB.Text = "";
}