C# 串口打开失败,SerialPort.Open 打开异常的解决方法

C# 串口打开失败,SerialPort.Open 打开异常的解决方法

问题描述:串口程序运行到serialPort.Open 时,下位机(MCU)程序会卡死,关闭串口后程序重新跑起来。

解决方法,设置串口时,加入以下两行代码:

serial.DtrEnable = false;
//如果为 true,则启用数据终端就绪 (DTR);否则为 false。 默认为 false。
serial.RtsEnable = false;
//如果为 true,则启用请求发送 (RTS);否则为 false。 默认为 false。

文档说默认为false,但是去掉这两句就会出问题。个人猜测与所使用的下位机硬件有关。
在此仅提供一个解决问题的方向,顺便记录一下。

已标记关键词 清除标记
相关推荐
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort port1 = new SerialPort(); string InputData = String.Empty; delegate void SetTextCallback(string text); private void Port_Select() {//获取机器中的串口地址 string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } } private void Form1_Load_1(object sender, EventArgs e) { Port_Select(); this.comboBox1.SelectedIndex = 0; this.comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "关闭串口") //当要关闭串口的时候 { port1.DiscardOutBuffer(); port1.DiscardInBuffer(); port1.Close(); button1.Text = "打开串口"; label3.Text = "串口当前状况:未打开"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else if (button1.Text == "打开串口") //当要打开串口的时候 { try { port1.PortName = comboBox1.SelectedItem.ToString(); port1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem); port1.DataBits = 8; port1.RtsEnable = true; port1.Open(); port1.DiscardOutBuffer(); port1.DiscardInBuffer(); button1.Text = "关闭串口"; comboBox1.Enabled = false; comboBox2.Enabled = false; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + " 波特率:" + comboBox2.SelectedItem.ToString() + " 数据位:8 "; } catch { button1.Text = "打开串口"; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + "打开失败"; MessageBox.Show("该串口无法打开"); } } } 资源中部分代码
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页