美好的一天,
首先让我说我是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);
}
}