An STM32 in DFU mode always enumerates as USBVID_0483&PID_DF11, but Windows 11 can bind four different drivers to that same ID — and the driver, not the chip, decides whether STM32CubeProgrammer, dfu-util or the old DfuSe tool can see it. Below: dfu-util 0.11 hosted here, a table mapping every string Device Manager shows to the tool that will actually work, and the STM32 families that have no USB DFU bootloader to begin with.

⬇ dfu-util 0.11 (official binaries, GPL-2)

Windows 64-bit and 32-bit · macOS · Linux · released 5 September 2021, still the current version

Download dfu-util 0.11

File: dfu-util-0.11-binaries.zip · 6.2 MB · SHA-256: 8f8055e71d686d412c25696a55eb9011df9120ad1fe9fe1e36a3df595585aea7 · repackaged as ZIP, nothing renamed or rebuilt, from the official dfu-util-0.11-binaries.tar.xz (SHA-256 6450de30a7dcd8d8c1273f43f0b153f054fd24d85f7f38296b1ad8edbd2ddb25) at dfu-util.sourceforge.net

There is no installer. The Windows executables are in win64 and win32 — run dfu-util.exe from a terminal opened in that folder.

⬇ Zadig 2.9 (driver installer)

Only needed if you are not installing STM32CubeProgrammer — see step 2

Download Zadig 2.9

File: Zadig-2.9.zip · 5.1 MB · SHA-256: a1a653be3be514116eea78fb024bf44cc1927907e54daed29277142c3b60dd5f · unmodified mirror of zadig.akeo.ie

Step 1 — get the chip into DFU mode

Board How to enter DFU Source
WeAct Black Pill (F401CC/CE, F411CE) Hold BOOT0, press and release NRST, release BOOT0 about half a second later Zephyr board docs
Generic F4 core board with a BOOT0 header BOOT0 to 3V3, then reset or power-cycle Pattern 1, AN2606
Nucleo-H743ZI BOOT0 (CN11 pin 7) to VDD, user USB port to the PC, ST-LINK port for power ST’s own walkthrough
Blue Pill (F103C8) Not possible as sold — see the next table AN2606 Rev 63, Table 3

One rule from AN3156 §1 catches people out: enumeration happens “as soon as the USB cable is plugged (or immediately if the cable is already plugged)”. If you do not want the part to enter DFU, the cable has to come out before the reset.

Does your STM32 even have a USB DFU bootloader?

Half of the “DFU device never appears” reports are parts whose factory bootloader has no USB at all. Per Table 3 of AN2606 Rev 63:

Family Bootloader interfaces in system memory USB DFU?
STM32F10xxx (F101/F102/F103, all densities) USART1 only No
STM32F105xx/107xx USART1/USART2 (remapped), CAN2, DFU Yes — but an 8, 14.7456 or 25 MHz HSE crystal is mandatory
STM32F401xB(C), F401xD(E), F411xx USART1/USART2, DFU (V2.2), SPI1-3, I2C1-3 Yes
STM32F410xx USART1/USART2, I2C, SPI No
STM32F40x/41x, F42x/43x, F446, F469/479, F7 USART + DFU (USB device FS) Yes
STM32G03x/04x, G07x/08x USART, I2C, SPI No
STM32G0B0/G0B1/G0C1 USART1-3, DFU (USB device FS) Yes

So a stock Blue Pill will never show up as 0483:DF11. It is USART1 on PA9/PA10, or you flash a third-party DFU bootloader — which enumerates under its own USB ID, not ST’s.

Step 2 — the driver, and what each one can talk to

What Device Manager shows Under Driver bound What can talk to it
STM32 BOOTLOADER Universal Serial Bus devices WinUSB STM32CubeProgrammer and dfu-util
STM32 BOOTLOADER Universal Serial Bus devices libusbK (Zadig) dfu-util
STM Device in DFU Mode STMicroelectronics DfuSe STTub30.sys (DfuSe, STSW-STM32080) DfuSe Demo only — CubeProgrammer and dfu-util will not see it
Yellow ⚠ STM32 BOOTLOADER, or “Unknown USB Device” Other devices none nothing — install one of the above
nothing appears — — the part never entered DFU — back to step 1

The WinUSB route, from ST. ST’s install guide says to run the STM32 Bootloader.bat file “provided with the release package”, found in DriversDFU_Driver under the STM32CubeProgrammer folder. This is the one worth having: it is WinUSB-based, so dfu-util works afterwards with no Zadig at all.

The Zadig route, if you do not want a 44 MB installer for a 1 MB job: Options → List All Devices → pick STM32 BOOTLOADER → choose WinUSB → Replace Driver. Same flow as the USBasp driver install.

They are mutually exclusive. ST’s guide is explicit: “If the DFUSE driver is installed on your machine, first uninstall it, then reboot the machine and run the previously mentioned ‘.bat’ file.” Tick Delete the driver software for this device when you uninstall, or Windows puts STTub30 straight back.

Step 3 — flash it

dfu-util.exe -l
Found DFU: [0483:df11] ver=2200, devnum=5, cfg=1, intf=0, path="1-3",
  alt=0, name="@Internal Flash  /0x08000000/..."

dfu-util.exe -a 0 -s 0x08000000:leave -D firmware.bin

That ver= field is free information most people skip past. dfu-util prints the descriptor’s version word verbatim — the format string inside the binary is Found %s: [%04x:%04x] ver=%04x — and AN3156 §1 says “the bootloader version is returned in the device descriptor in the MSB of the bcd device field (example: 0x2000 = version 2.0)”. So ver=2200 is bootloader protocol V2.2, and Table 5 of the same note tells you what that buys you:

Table 5 of application note AN3156 listing STM32 bootloader protocol versions V2.0, V2.1, V2.2 and V3.0 with their descriptions
Section 6, Table 5 of AN3156 Rev 16 (September 2024). V2.1 added the OTP and device-feature interfaces; V2.2 made option bytes and OTP read/write only. Source: STMicroelectronics.

The five failures, with the exact message

“No DFU capable USB device available” — the device is enumerated but bound to a driver libusb cannot open. This is the signature of a DFU device with no WinUSB/libusbK behind it. Fix: step 2.

CubeProgrammer connects to nothing after years of DfuSe. The old STTub30 binding wins until you delete it. Uninstall, reboot, then run the .bat — in that order, per ST.

Windows 11 refuses the DfuSe driver outright. This OpenGD77 thread documents it: STTub30.sys is dated 2015, Memory Integrity blocks it, and it will not load even with driver-signature enforcement turned off. The answer in 2026 is to stop using DfuSe.

An F105/F107 enumerates once, then resets in a loop. AN2606 is blunt about this one: for the connectivity line the external clock “is mandatory only for DFU and CAN bootloaders”, at 8, 14.7456 or 25 MHz, and a clock failure generates a system reset. A missing or wrong crystal looks exactly like a driver problem and is not one.

Device Manager shows nothing when you plug the board in. Before touching drivers, swap the cable — a charge-only USB lead produces the identical symptom on an STM32 as it does on a CH340 board.

FAQ

Do I need Zadig if I already installed STM32CubeProgrammer? No. Its DFU driver is WinUSB-based, and dfu-util speaks to WinUSB. Running Zadig on top only risks swapping it for libusbK, which CubeProgrammer may then refuse.

Can I keep DfuSe for an old project and CubeProgrammer for a new one? Not on the same PC for the same device — one driver is bound to 0483:DF11 at a time. DfuSe has had no update since v3.0.6 and is the one to drop.

My board shows a COM port instead of a DFU device. Then it booted your application, not the bootloader. BOOT0 was not high when reset was released — the timing in step 1 matters.

Sources

With the bootloader reachable, the rest is ordinary work. If you would rather go in over SWD and keep the USB port for your application, that is the ST-Link V2 route; if the probe on your bench is a Segger, see the J-Link driver and J-Flash Lite guide.