.NET的9位串口

时间:2019-02-20 13:23:00

标签: .net uart windows-iot-core-10 9-bit-serial multidrop-bus

我需要在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的parity bit。但我实际上不知道如何。
  2. 使用COM-> USB转换器,但实际上可能存在第9位的相同问题。
  3. 在中间使用Adruino,它将通过GPIO实现RxTx 9位,并以内部格式将数据输出到Raspberry。

1 个答案:

答案 0 :(得分: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;