无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口
Posted
技术标签:
【中文标题】无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口【英文标题】:Unable to open UART port on Windows IoT with Raspberry Pi 3 【发布时间】:2019-07-06 01:28:57 【问题描述】:在运行在 Raspberry Pi 3 上的 Windows IoT Core 10 上用 C# 打开 SerialDevice 后,串口中有 null。
代码如下:
string aqs = SerialDevice.GetDeviceSelector();
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(aqs);
List<DeviceInformation> list = devices.ToList();
DeviceInformation di = list.First();
serialPort = await SerialDevice.FromIdAsync(di.Id);
serialPort
是 null
。
di.Id
等于:Id "\\\\?\\ACPI#BCM2836#0#86e0d1e0-8089-11d0-9ce4-08003e301f73" string
list.Count
等于1
这里有两条来自/api/devicemanager/devices
GET
请求的记录与UART
相关:
"Class": "Ports",
"Description": "BCM283x Mini UART Serial Device",
"ID": "ACPI\\BCM2836\\0",
"Manufacturer": "Microsoft",
"ParentID": "ACPI_HAL\\PNP0C08\\0",
"ProblemCode": 0,
"StatusCode": 25182218
,
"Class": "System",
"Description": "ARM PL011 UART Device Driver",
"ID": "ACPI\\BCM2837\\4",
"Manufacturer": "Microsoft",
"ParentID": "ACPI_HAL\\PNP0C08\\0",
"ProblemCode": 0,
"StatusCode": 25165834
,
我尝试将 Rx 和 Tx 都短接,并且不短接,它不起作用...
更新
如果我拆分给定的 ID,我有 Invalid data
异常。
string aqs = SerialDevice.GetDeviceSelector();
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(aqs);
List<DeviceInformation> list = devices.ToList();
DeviceInformation di = list.First();
string id = "86e0d1e0-8089-11d0-9ce4-08003e301f73";
try serialPort = await SerialDevice.FromIdAsync(id); catch(Exception e) Debug.WriteLine(e.Message);
id = "\\\\?\\ACPI#BCM2836#0#";
try serialPort = await SerialDevice.FromIdAsync(id); catch(Exception e) Debug.WriteLine(e.Message);
id = di.Id;
try serialPort = await SerialDevice.FromIdAsync(id); catch(Exception e) Debug.WriteLine(e.Message);
if (serialPort == null) Debug.WriteLine("No device"); return;
输出:
抛出异常:mscorlib.ni.dll 中的“System.Exception” 数据无效。 (来自 HRESULT 的异常:0x8007000D) 数据无效。 (来自 HRESULT 的异常:0x8007000D) 没有设备
【问题讨论】:
很明显,您找到的 di.Id 字符串比存储在设备记录中的 ID 更长,即末尾包含 GUID。也许它找不到您要它查找的 ID? 你错了,看我的更新。 我怎么错了?! "ACPI\\BCM2836\\0" != "\\\\?\\ACPI#BCM2836#0#"...大声笑 看看***.com/questions/37505107/… 还有这个social.msdn.microsoft.com/Forums/en-US/… 【参考方案1】:正如Grim所说,解决方案在这里:SerialDevice.FromIdAsync() yields a null serial port
需要补充:
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
在Package.appxmanifest
文件中的<Capabilities>
标记中。
【讨论】:
以上是关于无法使用 Raspberry Pi 3 在 Windows IoT 上打开 UART 端口的主要内容,如果未能解决你的问题,请参考以下文章
无法在触摸屏中使用 3.5 的 Raspberry Pi 3 上成功启动 Kivy 应用程序
Android Things 3 无法从 Raspberry PI 3 上的 rxtx 读取
无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3
在 Raspberry Pi 3 上使用 pymssql 的 SQL Server 连接