C#从串行端口

时间:2020-04-23 00:36:53

标签: c# serial-port vhdl fpga uart

我试图用C#编写GUI,以通过UART将FPGA与PC接口。在FPGA端,我使用32位无符号数据类型:

data_to_uart            :   out unsigned(31 downto 0);
data_to_uart            <= to_unsigned(1000, 32);

然后,在我的FPGA设计中,data_to_uart进入块,该块将无符号的32位拆分为4个字节,并通过UART一对一发送。因此,在终端我收到以下信息(值应为:1000):

00000000 00000000 00000011 11101000

我的问题是:如何通过使用 System.IO.Ports; 在c#中正确读取这四个字节,并将其转换为int(做一些数学运算),然后转换为字符串-以显示标签上的值。

我正在使用:

inputData = serialPort1.ReadExisting();

以下内容:Binary to decimal conversion example对我不起作用,因为.ReadExisting返回String:(

我看了这个:

Microsoft Docs - SerialPort Method

我必须使用SerialPort.ReadByte方法吗?有人说它只读取一个字节,如何读取所有四个字节然后转换为int?

我正在使用:波特率-115200、8位和1个停止位。

感谢您的关注,也许还有一些建议。 :)

1 个答案:

答案 0 :(得分:1)

正如其他人所说,您应该使用协议。但是要回答这个问题:

    if (serialPort1.ReadBufferSize >= 4)
    {
        var buffer = new byte[4];
        for (int i = 3; i >= 0; --i)
            buffer[i] = (byte)serialPort1.ReadByte();
        int myNumber = BitConverter.ToInt32(buffer, 0);
    }

这将从串行端口读取四个字节,并将它们转换为整数变量。请注意,缓冲区是向后填充的,因为您是将二进制文件从big-endian发送出去的。

相关问题