STM32 DFU flasher that checks before it writes
Put the board in DFU mode, pick a .dfu, .hex or .bin, and the page reads the chip’s flash map and identity, then checks every byte of the file against them. If anything is off, the Flash button stays off and it tells you why. It never touches option bytes or readout protection. Works in Chrome, Edge or Opera on a computer.
✓
Connection problems?
The browser is fine but the board does not show up, or the port will not open:
- Use a data USB cable (many phone charging cables carry no data) and try another USB port; on a hub, try the computer directly.
- Close anything else holding the port (Arduino IDE serial monitor, PlatformIO, a terminal, another tab of this page) and reconnect.
- Windows: the DFU device needs the WinUSB driver. Install it with Zadig (pick the STM32 BOOTLOADER device, driver WinUSB). zadig.akeo.ie
- Linux: allow the DFU device without root with a udev rule, then replug:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="df11", MODE="0666"' | sudo tee /etc/udev/rules.d/60-stm32-dfu.rules; sudo udevadm control --reload
1 · Connect the board in DFU mode
Hold BOOT0 (or BOOT) while you reset or plug in the board, then pick “STM32 BOOTLOADER” from the list. Nothing is written on connect: the page only reads the flash map and identity.
- Family
- DEV_ID
- Internal flash
- Never written
- Readout protection
- USB
2 · Choose the firmware
- File
- Type
- Writes
- Vector table
- DFU target
- SHA-256
3 · Compatibility
Every line must pass before Flash is enabled.
Connect a board and choose a file to see the checks.
4 · Flash
Advanced
Paste one SHA-256 per line. While the list is not empty, any other file is refused. It is stored in this browser only (localStorage) as a convenience, not as a security control.
Free tool, provided as is, without warranty. You are responsible for choosing the right firmware for your board; flashing can erase or overwrite what’s on the device. Need it done for you? We can help.
Log
The formula
every byte inside writable internal flash of this device · fits · initial SP inside this family’s SRAM · reset handler odd and inside the image · .dfu VID:PID and target match · read back after writing
When to use it
Loading a release build onto an STM32 dev board, re-flashing a batch on the bench, or handing a customer a page that flashes their device without STM32CubeProgrammer. It talks to ST’s own ROM DFU bootloader (USB 0483:DF11) through WebUSB, the same protocol dfu-util and CubeProgrammer use, so there is nothing to install on the board either.
Pitfalls
- Enter DFU mode first: hold BOOT0 high (or the BOOT button) while pressing reset or plugging in. The board then shows up as “STM32 BOOTLOADER”. Boards with an ST-LINK on them need a direct USB cable to the target’s own USB connector, not the ST-LINK port.
- STM32F103 “Blue Pill” has no USB bootloader in ROM — only the serial one on USART1. This tool cannot see it; a serial-bootloader tool is a separate page.
- The flash map, option-bytes area and OTP come from the bootloader itself (its DfuSe alternate-setting strings), so “writable internal flash” means this chip’s, not a generic table. Anything that lands in option bytes, OTP, system memory or RAM is refused, and those areas are never opened for writing.
- A .bin carries no address, so the page writes it where you say (0x08000000 by default). It then checks the vector table at that address: the initial stack pointer must be inside this family’s SRAM and the reset handler must be a Thumb address inside the file. That is what catches a G0 build on an F4 board, or an app image dropped at the wrong offset.
- Only the sectors the file covers are erased. Erase-all is off by default and needs its own confirmation. Readout protection (RDP) is detected and the page stops: it will not try to lower it, which would erase the chip.
- Nothing leaves your computer: the file is parsed in the page and written straight over USB. The approved-hash list lives in this browser only.
Related note
Browser-based firmware flashing without an installerWant a flasher like this for your own product, with serial numbers and a production log?