USB烧录器需先在Windows宿主机正确识别并获取VID&PID,再通过VMware手动连接或VirtualBox配置USB过滤器直通至虚拟机,最后在虚拟机内安装对应驱动并验证调试链路。

确认USB设备能否被虚拟机识别
Windows宿主机上插好USB烧录器(如ST-Link V2、J-Link、CH341、PL2303串口模块等)后,先别急着开虚拟机,打开设备管理器,看它是否显示为“通用串行总线设备”或具体型号,且无黄色感叹号。【若宿主机都识别失败,虚拟机必然无法使用】
右键该设备→“属性”→“详细信息”选项卡→在“属性”下拉菜单中选“硬件ID”,复制其中的VID_XXXX&PID_YYYY字符串。这个ID是后续在虚拟机中绑定设备的关键依据。
VMware Workstation中将USB设备直通给虚拟机
启动已安装好驱动的Windows虚拟机(推荐Win10/Win11),确保虚拟机处于开机状态且获得焦点。
点击VMware顶部菜单栏“虚拟机”→“可移动设备”→找到你的USB烧录器名称(如“STMicroelectronics ST-LINK/V2”)→点击“连接(断开与主机的连接)”。这一步必须手动触发,VMware不会自动抢设备。
若列表中未出现设备,说明宿主机正占用它——关闭Keil、STM32CubeProgrammer、Xshell等任何可能调用该设备的软件,再刷新列表。有些驱动(如ST-Link官方驱动)会常驻后台服务并锁定设备,需在任务管理器中结束“STMicroelectronics”相关进程。
VirtualBox中配置USB过滤器实现稳定接管
VirtualBox比VMware对USB设备的控制更底层,适合需要反复插拔、烧录+调试连续操作的场景。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
关机状态下选中目标虚拟机→“设置”→“USB”→勾选“启用USB控制器”,并根据设备类型选择:ST-Link/J-Link选“USB 2.0(EHCI)控制器”,CH341/FT232类串口芯片选“USB 3.0(xHCI)控制器”。
点击右侧“添加过滤器”图标(带“+”号的绿色方块)→“从设备添加”→在弹出列表中勾选你的烧录器。此时会自动生成一条含VID/PID的过滤规则,虚拟机开机后将自动捕获该设备,无需每次手动连接。
【关键前提:宿主机用户必须属于vboxusers用户组】 否则即使配置完成,虚拟机内设备也会显示为“灰色不可用”。在宿主机PowerShell中以管理员身份运行:Add-LocalGroupMember -Group "vboxusers" -Member "你的Windows用户名",然后重启宿主机生效。
虚拟机内部驱动安装与验证
设备成功直通后,虚拟机内会触发新硬件向导。对于ST-Link、J-Link等仿真器,直接安装厂商官方驱动(如STSW-LINK007、J-Link_Windows_V786f)即可;对于CH341、PL2303等USB转串口芯片,安装对应串口驱动(CH341SER.EXE、PL2303_Prolific_Driver)。
驱动装完,在虚拟机设备管理器中确认端口号(如COM3)或调试器名称已正常列出。打开Keil µVision或STM32CubeIDE,进入“Options for Target”→“Debug”页,选择对应仿真器(如“ST-Link Debugger”),点击“Settings”能读到芯片ID,说明链路已通。
若Keil提示“Cannot access JTAG-DP”或“SWD connect failed”,不要立刻换线——先检查虚拟机是否启用了USB 3.0控制器但烧录器实际插在USB 2.0接口上,这种协议不匹配会导致握手失败。换到主板后置原生USB 2.0口重试。

















