SerialDevice C#创建自定义开始字节
因此,我试图创建一个C代码来与连接到我的PC的串行设备进行通信。但该设备需要一个起始字节来与我的代码进行通信。我尝试在创建SerialDevice类后发送它,并得到它的OutputStream,但设备根本没有响应 该设备的设备信息显示它无法配对。我认为这是因为DeviceInformation类请求与我的设备进行通信,但它没有响应,因为它缺少起始字节 有没有一种方法可以让我用这个类旁边的SerialDevice创建一个自定义连接SerialDevice C#创建自定义开始字节,c#,serial-communication,C#,Serial Communication,因此,我试图创建一个C代码来与连接到我的PC的串行设备进行通信。但该设备需要一个起始字节来与我的代码进行通信。我尝试在创建SerialDevice类后发送它,并得到它的OutputStream,但设备根本没有响应 该设备的设备信息显示它无法配对。我认为这是因为DeviceInformation类请求与我的设备进行通信,但它没有响应,因为它缺少起始字节 有没有一种方法可以让我用这个类旁边的SerialDevice创建一个自定义连接 或者,我是否有办法在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。据我所知,两者都不能满足我的需要@本沃伊特