SerialDevice C#创建自定义开始字节

SerialDevice C#创建自定义开始字节,c#,serial-communication,C#,Serial Communication,因此,我试图创建一个C代码来与连接到我的PC的串行设备进行通信。但该设备需要一个起始字节来与我的代码进行通信。我尝试在创建SerialDevice类后发送它,并得到它的OutputStream,但设备根本没有响应 该设备的设备信息显示它无法配对。我认为这是因为DeviceInformation类请求与我的设备进行通信,但它没有响应,因为它缺少起始字节 有没有一种方法可以让我用这个类旁边的SerialDevice创建一个自定义连接 或者,我是否有办法在SerialDevice类的声明中配置开始字节

因此,我试图创建一个C代码来与连接到我的PC的串行设备进行通信。但该设备需要一个起始字节来与我的代码进行通信。我尝试在创建SerialDevice类后发送它,并得到它的OutputStream,但设备根本没有响应

该设备的设备信息显示它无法配对。我认为这是因为DeviceInformation类请求与我的设备进行通信,但它没有响应,因为它缺少起始字节

有没有一种方法可以让我用这个类旁边的SerialDevice创建一个自定义连接


或者,我是否有办法在SerialDevice类的声明中配置开始字节?

开始字节是:STX,0x02


如果您需要更多帮助,请详细说明您迄今为止所做的工作

我尝试集成的设备要求起始字节如下所示:

#定义指纹\u起始代码0xEF01

这是设备文档中的C代码。 当我试图将它迁移到C时,我不想改变起始字节,因此设备不会响应我的C代码

这是我声明的串行设备:

string aqs = SerialDevice.GetDeviceSelector("UART0");

            var dis = await DeviceInformation.FindAllAsync(aqs);

            UartPort = await SerialDevice.FromIdAsync(dis[0].Id);

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

            DataWriterObject = new DataWriter(UartPort.OutputStream);
            DataReaderObject = new DataReader(UartPort.InputStream);
然后我尝试用我的起始字节通过DataWriter发送数据:

 private async Task<int> EnviarPacote(Package package)
    {
        int sum;
        DataWriterObject.WriteBytes(package.start);
        DataWriterObject.WriteByte(package.address[0]);
        DataWriterObject.WriteByte(package.address[1]);
        DataWriterObject.WriteByte(package.address[2]);
        DataWriterObject.WriteByte(package.address[3]);
        DataWriterObject.WriteInt16(package.type);
        int tamanho = 12;
        DataWriterObject.WriteInt32(tamanho);
        //DataWriterObject.WriteBytes(package.length);
        sum = tamanho + package.type;
        foreach (var dado in package.data)
        {
            DataWriterObject.WriteByte(dado);

        }
        DataWriterObject.WriteInt32(12);
        await UartPort.OutputStream.WriteAsync(DataWriterObject.DetachBuffer());
        return sum;
    }
专用异步任务EnviarPacote(包)
{
整数和;
DataWriteObject.WriteBytes(package.start);
DataWriteObject.WriteByte(包地址[0]);
DataWriteObject.WriteByte(包地址[1]);
DataWriteObject.WriteByte(包地址[2]);
DataWriteObject.WriteByte(包地址[3]);
DataWriteObject.WriteInt16(package.type);
int-tamanho=12;
DataWriterObject.WriteInt32(塔曼霍);
//DataWriteObject.WriteBytes(package.length);
总和=塔曼霍+包装类型;
foreach(package.data中的var dado)
{
DataWriteObject.WriteByte(dado);
}
DataWriterObject.WriteInt32(12);
等待UartPort.OutputStream.WriteAsync(DataWriterObject.DetachBuffer());
回报金额;
}
但它就是不起作用


我想我应该更改SerialDevice声明中的某些内容,以便类知道如何与我的设备通信。但我不知道怎么做。

结束字节是ETX 0x03。
0xEF01
不能放入一个字节,至少需要两个。所以现在你必须担心字节顺序。我注意到了,但我发现的唯一顺序选项是LittleEndian和BigEndian。据我所知,两者都不能满足我的需要@本沃伊特