2026-01-25 6:14 AM
I am trying to get the USB CDC (Virtual COM Port) working on my STM32H743VIT6. I have successfully used this exact setup in the past, I would normally flash the code via ST-Link, plug in the USB micro USB cable, and the COM port would appear in Device Manager for Tera Term.
However, currently, the device refuses to exit DFU mode and enumerate as a COM port, even after flashing the application code.
step that i have done:
1. I pull BOOT0 to 3.3V to enter the bootloader. Device Manager correctly shows DFU in FS Mode
2. I upload my .elf file (My application code includes HAL_PWREx_EnableUSBVoltageDetector(); in main().) using STM32CubeProgrammer. The upload verifies successfully.
3. I disconnect power, move BOOT0 to GND, and reset
Issue: The Device Manager still shows "DFU in FS Mode". It does not switch to the Virtual COM Port (CDC).
My Question: What specific steps should I take to force the board to exit DFU mode. I want the device to boot directly into my application and enumerate as a COM Port automatically, without requiring BOOT0 manipulation every time.
2026-01-25 6:29 AM
If you hold reset, does the device disappear? And it re-appears when you release reset?
The reasons the chips boots into the bootloader are listed in AN2606. There are a multitude of ways to boot directly into the flash. You need to configure one of those. These involve a combination of option bits and the BOOT0/BOOT1 pins.
2026-01-25 6:55 AM
yes, when i hold reset the device disappear and then show again when i release reset.
Here are my address Option Bytes. I have never configured them before, but they show that BOOT_CM7_ADD0 is 0x0800 the start of Flash memory and ADD1 is 0x1ff0 the start of System Memory. Does this mean my system is fine and my chip is not confusing DFU and Flash modes?
2026-01-25 7:04 AM - edited 2026-01-25 7:05 AM
It sounds like you are not controlling the BOOT pin as you think. This could be due to a test setup error, or a bad solder connection, or something else.
Here are the possible ways for it to get into the bootloader:
It's also possible your user program jumps to the bootloader if that's something you have programmed into it.