UWP应用能否用UsbDevice类连接Keil HID例程的STM32开发板?
问题:UWP使用UsbDevice类无法连接STM32 HID设备(HidDevice类可正常连接)
我使用STM32F746G-Discovery开发板搭配Keil USB HID例程,目前UWP应用通过HidDevice类可以正常连接该USB HID设备。但由于需要使用仅UsbDevice类支持的InterruptOut功能,尝试改用UsbDevice类连接开发板却失败了。我采用微软示例代码并替换了正确的VID和PID,想请教这种操作是否不可行,还是连接过程存在问题?我刚接触USB开发,正在学习中。
示例代码如下:
private async void OpenDevice() { UInt32 vid = 0x045E; UInt32 pid = 0x0611; string aqs = UsbDevice.GetDeviceSelector(vid, pid); var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(aqs); try { usbDevice = await UsbDevice.FromIdAsync(myDevices[0].Id); } catch (Exception exception) { ShowStatus(exception.Message.ToString()); } finally { ShowStatus("Opened device for communication."); } }
核心原因与解决方向
核心问题
HID设备默认被Windows系统的HID专属驱动接管,UsbDevice类对应的是通用USB驱动栈,两者无法同时绑定同一个设备。这就是HidDevice能连接但UsbDevice不行的根本原因。
可行解决方向
修改STM32固件,改用自定义USB设备类
这是最直接的解决方案:在Keil的USB配置中,将设备类改为Vendor-specific(类代码0xFF),同时配置Interrupt IN和OUT端点,在固件中实现对应端点的数据处理逻辑。这样系统会为设备加载通用USB驱动,UsbDevice类就能正常识别并连接,同时支持InterruptOut功能。排查UWP应用配置与代码问题(辅助步骤)
如果暂时不想修改固件,先做以下排查确认问题:- 检查
Package.appxmanifest是否添加了正确的USB设备权限声明,示例如下:<DeviceCapability Name="usb"> <Device Id="vidpid:045E 0611"> <!-- 自定义类填classId:ff * *;HID类声明无法让UsbDevice连接 --> <Function Type="classId:ff * *"/> </Device> </DeviceCapability> - 代码中先判断设备枚举结果是否为空,避免索引越界;
- 捕获更详细的错误信息,比如通过
Marshal.GetLastWin32Error()获取Windows错误码(如ERROR_ACCESS_DENIED则明确是驱动占用问题)。
- 检查
优化后的代码示例
private async void OpenDevice() { UInt32 vid = 0x045E; UInt32 pid = 0x0611; string aqs = UsbDevice.GetDeviceSelector(vid, pid); var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(aqs); if (myDevices.Count == 0) { ShowStatus("未找到目标USB设备"); return; } try { usbDevice = await UsbDevice.FromIdAsync(myDevices[0].Id); if (usbDevice == null) { int errorCode = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); ShowStatus($"打开设备失败,错误码:{errorCode}"); } else { ShowStatus("设备连接成功"); } } catch (Exception exception) { ShowStatus($"异常:{exception.Message}"); } }
内容的提问来源于stack exchange,提问作者Tom Van Gaever
相关产品推荐
相关产品推荐

