C#serial IO.port:Serial Data Parsing响应速度不够快?

时间:2016-08-26 16:08:29

标签: c# serial-port msp430 virtual-serial-port

美好的一天,

首先让我说我是C#的新手,因为我更喜欢嵌入式C。

我正在尝试使用MSP430FR5739(TI微控制器)从信号发生器读取2Hz信号。我使用板载ADC以1MHz周期的1024个样本对模拟值进行采样,并使用USB转串口通过UART通信以9600波特率发送。我认为所有工作都非常完美....(因为我通过超级终端和arduino的串行监视器测试了这一点)

发送的数据如下所示:(每个都在新行上)

0

0

0

16

51

123

157

227

250

315

338

384

404 .....

如您所见,每个数据都显示在一个新行上......但这是我的问题。

目前我正在使用这个C#代码在显示它的应用程序中读取和解析数据,如下所示:

[收到的数据] [1]

以下是UI应用程序的问题:

当2Hz信号发生变化时(例如从正弦波到方波,或峰 - 峰值发生变化),数据在我的应用中需要更改。如果我通过超级终端或arduino的串行监视器读取信号数据,一旦信号值发生变化,数据也会发生变化......但不是在此应用程序中。我想,我正在正确读取串口,但我认为有某种缓冲区填满,然后这个缓冲区需要永远到达信号变化的点,然后显示它。我真的需要了解发生了什么......我试图在互联网上找到可能的解决方案,但我找不到任何有意义的解决方案。

为什么我不能像串口控制台那样实时读取这个内容?

/***function for listening incoming data on the serial COM port***/
    private void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        { 
            if (serialPort.ReadBufferSize != 0)
            {
                ReceivedData = ComPort.ReadLine();      //read each data line whenever the buffer size is not zero
                this.Invoke(new EventHandler(DisplayData)); //call another thread to write data on rtxtDisplay
            }
        }
        catch(TimeoutException)
        {
            MessageBox.Show(this, "Buffer error!", "TIMEOUT EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }

    /***function to display the received***/
    private void DisplayData(object sender, EventArgs e)
    {
        try
        {
            if (ckBoxAutoscroll.Checked == true)
            {
                rtxtDataRx.AppendText(ReceivedData);   //display each data received
                rtxtDataRx.SelectionStart = rtxtDataRx.Text.Length - 1;
                rtxtDataRx.ScrollToCaret();                     //auto scroll the rich textbox with incoming data
            }
            else
            {
                rtxtDataRx.AppendText(ReceivedData);   //display each data received
                rtxtDataRx.SelectionStart = rtxtDataRx.Text.Length - 1;
            }                

            //for testing the signal generator
            val1 = Convert.ToDouble(ReceivedData);
            val1 = (val1 * 0.00352);
            num1 = Math.Round(val1, 2);
            voltage = Convert.ToString(num1);
        }
        catch (Exception)
        {
            //catch any bug and display this message
            MessageBox.Show(this, "Transmission jammed!", "UART COMs ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }

0 个答案:

没有答案