串行通信c#终端,改变停止位破坏了通信

时间:2017-08-21 13:44:01

标签: c# serial-communication

所以我用c#编写了一个终端,我需要与 kl25z微处理器进行通信

应用程序需要支持选择停止位数,波特率和奇偶校验方法的选项。

我设法用波特率对其进行排序,但是当我尝试更改停止位时,某些东西不同步,我无法弄清楚是什么。 问题是,uart正在变得越来越奇怪,而不是我想要的东西,当我使用一个停止位时它确实很好用,所以我假设我错过了我的代码中的东西

我会添加一些给我带来困难的代码: 这只是c#部分,我的终端我很确定问题出在这里 而不是在kl25z代码中

public Form1() {
    InitializeComponent(); //init all variables
    getAvailablePorts(); //fill the ports combo box with all the ports
}

void getAvailablePorts() {
    String[] ports = SerialPort.GetPortNames(); //get the names of all availoable ports
    comboBox1.Items.AddRange(ports); //add all the ports names to the combo box
}

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) {
    try {
        SerialPort sp = (SerialPort) sender;
        if (serialPort1.IsOpen & sp.IsOpen) {
            string indata = sp.ReadLine();

            Invoke(new Action(() => textBox1.Text = indata));

            if (indata.Equals("new settings been set") || 
                indata.Equals("\0new settings been set") ||
                indata.Equals("new settings been set??")) {

                // baud rate
                Invoke(new Action(() => baud = Convert.ToInt32(comboBox3.Text)));
                Invoke(new Action(() => serialPort1.BaudRate = baud));
    //end bits                       
                Invoke(new Action(() => serialPort1.StopBits = end));
            }
        }
    } catch (System.IO.IOException error) {
        return;
    } catch (System.InvalidOperationException error) {
        return;
    }
}

//here i open the port
private void button3_Click(object sender, EventArgs e) { //start port
    try { // give the micro processor the info it needs about the settings 
        serialPort1.Handshake = Handshake.RequestToSendXOnXOff;
        serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
        serialPort1.PortName = comboBox1.Text; //port
        serialPort1.BaudRate = baud; //baud rate current
        //  serialPort1.Parity= parity;//parity current
        serialPort1.StopBits = end; //stopBits  current 
        serialPort1.DataBits = bits; //current

        //sort strings to send
        String baudString = comboBox3.Text;
        String StopString = comboBox6.Text;
        String bitsString = comboBox2.Text;
        String parityString = comboBox4.Text;
        String startString = comboBox5.Text;
        serialPort1.Open(); //open port
        bitsString = "8";

        //send properties to klz
        serialPort1.Write("prop" + "$" + baudString + "$" + StopString + "$" + bitsString + "$" + parityString + "$" + startString + "$"); 

        if (Convert.ToInt32(comboBox6.Text) == 1) {
            end = StopBits.One;
        } else {
            end = StopBits.Two;
        }

        bits = Convert.ToInt32(comboBox2.Text);
    } catch (UnauthorizedAccessException) {
        textBox1.Text = "Unauthorized Access";
    }

    try {
        progressBar1.Value = 100;
        button1.Enabled = true;
        button2.Enabled = true;
        button3.Enabled = false;
        button4.Enabled = true;
        textBox2.Enabled = true;
    } catch (UnauthorizedAccessException) {
        textBox1.Text = "Unauthorized Access";
    }
}

0 个答案:

没有答案