Windows下STM32 USB CDC自定义厂商与串口名称显示问题求助
解决Windows下STM32 USB CDC自定义设备信息的简化方案
方案1:注册表脚本修改设备显示信息
无需驱动签名,用户只需导入注册表文件即可生效:
- 设备连接Windows后,打开设备管理器,找到目标USB串口,右键→属性→详细信息→硬件ID,复制完整的硬件ID(格式如
USB\VID_xxxx&PID_xxxx&MI_xx) - 创建后缀为
.reg的注册表文件,替换其中的硬件ID和自定义信息:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx&MI_xx\0000] "FriendlyName"="你的自定义设备名称" "Manufacturer"="你的自定义厂商名称" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx&MI_xx\0000\Device Parameters] "PortName"="你的自定义串口名称"
- 用户双击导入注册表,拔插设备后即可看到自定义名称。注意:此方法针对单设备实例,多台同PID/VID设备需分别处理,但操作门槛极低。
方案2:用DPInst简化未签名.inf安装
微软官方的DPInst工具可自动匹配设备并安装未签名驱动,简化用户操作:
- 编写匹配你VID/PID的.inf文件:
[Version] Signature="$Windows NT$" Class=Ports ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} Provider=%ManufacturerName% DriverVer=01/01/2024,1.0.0.0 [Manufacturer] %ManufacturerName%=DeviceList,NTamd64,NTx86 [DeviceList.NTamd64] %DeviceName%=USB_SERIAL, USB\VID_xxxx&PID_xxxx [DeviceList.NTx86] %DeviceName%=USB_SERIAL, USB\VID_xxxx&PID_xxxx [USB_SERIAL] Include=mdmcpq.inf Needs=UsbSerial_Install [USB_SERIAL.Services] Include=mdmcpq.inf Needs=UsbSerial_Install.Services [Strings] ManufacturerName="你的厂商名称" DeviceName="你的自定义串口名称"
- 将.inf文件与对应系统版本的DPInst.exe放在同一文件夹,用户双击DPInst.exe即可自动安装。Windows会弹出未签名提示,用户只需临时开启"允许未签名驱动"(Windows 10/11可在设置→更新和安全→恢复→高级启动→启动设置里开启),完成后即可显示自定义信息。
方案3:修改USB描述符匹配兼容已签名驱动
通过调整STM32的USB设备描述符,让Windows加载会读取设备字符串的已签名CDC驱动:
- 在STM32的USB CDC初始化代码中,添加兼容ID描述符,将设备标记为与某款已被Windows原生支持且允许自定义名称的串口设备兼容(例如部分第三方USB转串口芯片的兼容ID)
- 确保设备的字符串描述符(厂商名、产品名)已正确配置,Windows加载兼容驱动后会自动读取这些自定义字符串并显示。此方法无需修改VID/PID或申请签名,但需要具备基础的USB协议调试能力。
内容的提问来源于stack exchange,提问作者durukan oktay




