首页 > 解决方案 > UWP C# UART RS485 通信问题

问题描述

我一直在使用 Windows IoT Core 测试 RaspberryPi3,以通过 RS485 与我现有的飞思卡尔硬件进行通信。我一直在使用SerialUART 示例作为参考。在我的 UWP 成功初始化 UART 端口后,我似乎无法接收到我的硬件传输的 RS485 数据。

我的硬件 RS485 UART 配置为 4800 波特率、8 位数据格式、非校验和停止等待模式禁用。我设法4800-8-none-one在 UWP 示例上成功初始化,但硬件传输的数据没有触发并显示在Read Data text block. 从我的硬件传输的数据是十六进制的,即F5-01-55-4B

传输过程中出现错误。 出现异常错误。

RS485 电路如下。 在此处输入图像描述

请告知我错过了什么吗?谢谢。

标签: uwpraspberry-pi3uartwindows-iot-core-10rs485

解决方案


你可以参考下面的代码。请注意,ReadString方法需要一定长度的“代码单元”才能读取。这就是“在线”时每个字符串前面都有其长度的原因。在您的场景中,您无法确保以代码单元从硬件传输的数据。我不确定您是否可以接受在 TextBox 中以十六进制格式显示数据。

    private async Task ReadAsync(CancellationToken cancellationToken)
    {
        Task<UInt32> loadAsyncTask;

        uint ReadBufferLength = 1024;

        // If task cancellation was requested, comply
        cancellationToken.ThrowIfCancellationRequested();

        // Set InputStreamOptions to complete the asynchronous read operation when one or more bytes is available
        dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;

        using (var childCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken))
        {
            // Create a task object to wait for data on the serialPort.InputStream
            loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(childCancellationTokenSource.Token);

            // Launch the task and wait
            UInt32 bytesRead = await loadAsyncTask;
            if (bytesRead > 0)
            {
                //rcvdText.Text = dataReaderObject.ReadString(bytesRead);
                var bufferArray = dataReaderObject.ReadBuffer(bytesRead).ToArray();
                var content = string.Empty;
                foreach(var b in bufferArray)
                {
                    content += Convert.ToString(b,16).ToUpper() + " ";
                }

                rcvdText.Text = content;
                status.Text = "bytes read successfully!";
            }
        }
    }

推荐阅读