0

我需要通过 Raspberry Pi 3 在 Windows IoT 上运行的 Multidrop 总线节点和主进程之间建立通信。
我知道如何用 8 位字节交换数据。它的工作代码示例:

_serial_port = await SerialDevice.FromIdAsync(di.Id);

if (_serial_port == null) return false;

_serial_port.WriteTimeout = TimeSpan.FromMilliseconds(1000);
_serial_port.ReadTimeout = TimeSpan.FromMilliseconds(1000);
_serial_port.BaudRate = 9600;
_serial_port.Parity = SerialParity.None;
_serial_port.StopBits = SerialStopBitCount.One;
_serial_port.DataBits = 8;

dataWriteObject = new DataWriter(_serial_port.OutputStream);
dataReaderObject = new DataReader(_serial_port.InputStream);

dataWriteObject.WriteBytes(0xAA);
await dataWriteObject.StoreAsync();

await dataReaderObject.LoadAsync(1);
byte resp = dataReaderObject.ReadByte();

在这里,我从远程节点 发送1010 1010和接收。xxxx xxxx

这个问题。

  1. 可以说,远程节点发送给我1010 1010 1
  2. 可以说我需要发送1010 1010 1

代码需要是什么样的?

更新

我考虑解决方法:

  1. 使用UART 的奇偶校验位。但我实际上不明白,如何。
  2. 使用 COM -> USB 转换器,但实际上第 9 位可能会出现同样的问题。
  3. 在中间使用 Adruino,它将通过 GPIO 实现 RxTx 9 位,并以我们的内部格式将数据输出到 Raspberry。
4

1 回答 1

0

SerialDevice.Parity 用于错误检查而不是数据传输。并且应用程序无法访问该位。

使用两个字节进行 9 位传输。

发送部分:

dataWriteObject.WriteBytes(new byte[] { 0b10101010, 0b10000000});

接收部分:

                byte[] data = new byte[2] { 0, 0 };
                dataReaderObject.ReadBytes(data);
                int data1 = data[0];
                int data2 = data[1];
                data1 = data1 << 1;
                data2 = data2 >> 7;
                int data3 = data1 | data2;
于 2019-02-21T06:25:49.807 回答