它只是我,还是这个bug?
serialPort = await SerialDevice.FromIdAsync(Id);
Run Code Online (Sandbox Code Playgroud)
serialPort即使Id不是,也总是为空.
我需要这个工作.现在我只是编写非常"快速和脏"的代码来测试来自Windows 10 Universal应用程序的串行通信.我在x86和x64中都调试了相同的结果.
这就是我现在所处的位置,但如果没有创建serialPort,我不能走得很远....
public class SerialComm
{
private SerialDevice serialPort;
DataWriter dataWriteObject = null;
DataReader dataReaderObject = null;
public async void StartTest()
{
var deviceSelector = SerialDevice.GetDeviceSelector("COM3");
var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(deviceSelector);
var myCurrentDevice = myDevices[0];
string Id = myCurrentDevice.Id.ToString();
try
{
serialPort = await SerialDevice.FromIdAsync(Id);
}
catch (Exception)
{
throw;
}
StringBuilder commandBuilder = new StringBuilder();
while (true)
{
var rBuffer = (new byte[1]).AsBuffer();
await serialPort.InputStream.ReadAsync(rBuffer, 1, InputStreamOptions.Partial);
if ((char)rBuffer.ToArray()[0] != '\n')
{
commandBuilder.Append((char)rBuffer.ToArray()[0]);
}
else
{
string temp = "";
try
{
temp += rBuffer.ToString();
}
catch (Exception)
{
temp = "Error";
}
commandBuilder.Append(temp);
}
string stringToDisplay = commandBuilder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助和建议......
对于使用FTDI芯片进行USB到串行通信的Maxbotix传感器,我遇到了同样的问题.我可以在终端程序中很好地连接到设备,我可以从真正的.NET Framework SerialPort类中使用它,但是在GitHub的UWP SerialSample和我的代码中都SerialDevice.FromIdAsync()返回了null.
对我来说,解决方案分为两部分.
第一部分是在Package.appxmanifest文件中添加设备功能:
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
Run Code Online (Sandbox Code Playgroud)
第二部分是从FTDI网站下载更新的驱动程序(我使用的是2.12.06版本).我一做到这一点就开始工作了.
完整示例如下:
var aqsFilter = SerialDevice.GetDeviceSelector("COM3");
var devices = await DeviceInformation.FindAllAsync(aqsFilter);
if (devices.Any())
{
var deviceId = devices.First().Id;
this.device = await SerialDevice.FromIdAsync(deviceId);
if (this.device != null)
{
this.device.BaudRate = 57600;
this.device.StopBits = SerialStopBitCount.One;
this.device.DataBits = 8;
this.device.Parity = SerialParity.None;
this.device.Handshake = SerialHandshake.None;
this.reader = new DataReader(this.device.InputStream);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
如果您尝试打开的“COM3”串行端口是板载串行端口,则串行通信类的当前设计不允许访问板载串行端口。串行通信类仅支持 USB 转串行通信,不支持直接串行通信。在上面的代码中,myDevices[0].Port.Name 的值是多少?
| 归档时间: |
|
| 查看次数: |
11655 次 |
| 最近记录: |