一. 问题由来
Windows系统使用USB 转串口工具或者USB接口的开发板时,Windows系统是依据所接入的USB设备的VID、PID以及序列号三者组合的不同而分配不同的COM口编号,同一个厂商的VID/PID完全相同,但是系统在每次检测到新USB设备接入后,会根据新的序列号在当前已经占用的COM口编号基础上递增分配新的COM口编号,后续即使设备已被拔出,所分配的COM端口在该系统上仍然处于被占用的隐藏状态,由此产生了许多被占用的多余的COM端口。
二. 解决方法
1. 删除占用的串口号
-
-
用管理员身份运行命令行。命令
set devmgr_show_nonpresent_devices =1
。
-
-
-
打开设备管理器。点击菜单
查看
>显示隐藏设备
, 显示隐藏的没有连接到电脑上的设备名称。
-
-
-
在设备管理器窗口左侧展开串口部分,将可以看到所有已被分配的COM口的设备列表。选择相应的串口设备,通过右键菜单> 卸载。
-
2.让同型号的设备串口号不再增加
如果并不希望系统接入的同一个厂商相同型号的设备COM口编号随着不同设备的接入而变化,需要固定使用同一COM口编号,可以通过修改注册表相关选项让Windows系统忽略指定的VID/PID设备的序列号。
如果知道对应厂商的VID,PID 可以直接打开注册表编辑器,定位到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
在窗口右侧,右键-->新建-->二进制值
,然后在出现的新值 #1
上右键重命名为IgnoreHWSerNumXXXXYYYY
,XXXX为厂商VID, YYYY为厂商PID,然后在它上面右键-->更改二进制数据
,在弹出的数值数据中输入01,确认保存。
另外,可以新建一个文本文档,输入以下内容后,并把XXXX,YYYY更改为对应的VID,PID,保存时把文件后缀由.txt
改为.reg
,然后双击同意更改注册表就可以了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags]
"IgnoreHWSerNumXXXXYYYY"=hex:01
如果不知道厂商的PID,VID可以定位到注册表计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\COM Name Arbiter\Devices
,在右侧的对应的COMx 中可以看到对应的vid_xxxx
, pid_yyyy
,如下图以COM33 为例: