c#串行端口-未读取发送的所有数据

c#串行端口-未读取发送的所有数据,c#,serial-port,C#,Serial Port,我最近创建了一个应用程序,可以从我的STM设备接收通过UART发送的数据。我尝试发送的数据是一个浮点数组-float[512]。 数据以纯二进制(而非字符串)的形式发送。通常的想法是4xbyte=float 我确信我发送的数据是好的。用名为“终端”的程序检查,然后是IEEE 754转换器。 在程序中,我从可用参数和其他参数中选择COMport。 (默认情况下,它们是我的COM适配器参数)。我打开连接,然后当STM完成发送数据时,我点击“Odebrane”按钮,这样它就会在文本框中显示数据 问题

我最近创建了一个应用程序,可以从我的STM设备接收通过UART发送的数据。我尝试发送的数据是一个浮点数组-float[512]。 数据以纯二进制(而非字符串)的形式发送。通常的想法是4xbyte=float

我确信我发送的数据是好的。用名为“终端”的程序检查,然后是IEEE 754转换器。

在程序中,我从可用参数和其他参数中选择COMport。 (默认情况下,它们是我的COM适配器参数)。我打开连接,然后当STM完成发送数据时,我点击“Odebrane”按钮,这样它就会在文本框中显示数据

问题是我没有收到所有数据。 我不知道原因是什么

private List<float> lista = new List<float>();
private float[] fDane = new float[1024];

    public Form1()
    {
        InitializeComponent();            
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        getAvailablePorts();
        tb_Rx.Text = "Wprowadź parametry transmisji";
        cb_BaudRate.Text = "9600";
        cb_DataBits.Text = "8";
        cb_Handshake.Text = "None";
        cb_Parity.Text = "None";
        cb_StopBits.Text = "One";
    }


    private void SerialP_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;

        int size = sp.BytesToRead;
        byte[] bArray = new byte[size];
        float[] fArray = new float[size / 4];
        sp.Read(bArray, 0, size);

        for (uint i = 0; i < size / 4; i++)
        {
            fArray[i] = ByteToFloat(bArray, i); // change 4 bytes to  float
            lista.Add(fArray[i]);            
        }

    }

    private float ByteToFloat(byte[] input, UInt32 i)
    {

        byte[] Array = new[] { input[4 * i], input[4 * i + 1], input[4 * i + 2], input[4 * i + 3] };
        return BitConverter.ToSingle(Array, 0);
    }

    private void bt_transform_Click(object sender, EventArgs e)
    {
        float[] fDane = lista.ToArray();
        for(UInt32 i = 0; i < fDane.Length; i++)
        {
            RxPisz(fDane[i]);

        }
    }
private List lista=new List();
私有浮动[]fDane=新浮动[1024];
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
getAvailableReports();
tb_Rx.Text=“Wprowadźparametry transmisji”;
cb_BaudRate.Text=“9600”;
cb_DataBits.Text=“8”;
cb_Handshake.Text=“无”;
cb_Parity.Text=“无”;
cb_StopBits.Text=“一”;
}
private void SerialP_DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
SerialPort sp=(SerialPort)发送方;
int size=sp.BytesToRead;
byte[]baray=新字节[大小];
浮动[]法拉利=新浮动[大小/4];
sp.Read(bArray,0,大小);
对于(uint i=0;i
-------------------------解决--------------------- 已更改的数据接收中断处理程序

private void SerialP_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            byte[] bArray = new byte[4*numberOfSamples];
            float[] fArray = new float[numberOfSamples];


            int previouse = counterOfRecBytes;

            counterOfRecBytes += sp.BytesToRead;

            sp.Read(bArray, previouse, (counterOfRecBytes - previouse));



            if (counterOfRecBytes == 4*numberOfSamples)
            {
                for (uint i = 0; i < numberOfSamples; i++)
                {
                    fArray[i] = ByteToFloat(bArray, i); // change 4 bytes to float
                    lista.Add(fArray[i]);
                }
                counterOfRecBytes = 0;
            }
        }
private void SerialP\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
SerialPort sp=(SerialPort)发送方;
字节[]bArray=新字节[4*numberOfSamples];
float[]fArray=新的float[numberOfSamples];
int-previouse=循环字节的计数器;
counterOfRecytes+=sp.BytesToRead;
sp.Read(bArray,previouse,(counterOfRecBytes-previouse));
if(计数器的重复字节==4*numberOfSamples)
{
对于(uint i=0;i
我认为您读取数据的速度不好,请尝试将波特率从9600更改为19200。

我认为您读取数据的速度不好,请尝试将波特率从9600更改为19200。

好吧,我试过了-这没有帮助。通常,我可以将UART-RS232适配器设置为各种速度。SerialPort.ByTest不应该读取我在一个8位帧的“数组”中发送的所有数据的大小吗?嗯,我试过了,但没用。通常,我可以将UART-RS232适配器设置为各种速度。SerialPort.ByTest不应该读取我在一个8位帧的“数组”中发送的所有数据的大小吗?