# Pro Micro or Leonardo disappears after a bad upload: double reset to recover

> Recover a Pro Micro: short RST to GND twice quickly to enter the bootloader for a few seconds, and pick the port that appears right then.

Canonical: https://roboticsengineering.in/fix/arduino-pro-micro-leonardo-bootloader-double-reset/ | Published: 2026-11-03 | Updated: 2026-11-04

**Short RST to GND twice in quick succession, then upload while the board is in the bootloader.**

## What the message means

These boards use native USB. A sketch that stops USB, or a wrong board setting, leaves no port. The bootloader runs for a few seconds after a double reset and shows a different port.

## Fix it in this order

1. Select the board as Arduino Leonardo or Sparkfun Pro Micro with the right voltage.
2. Start the upload, then short RST to GND twice within about half a second.
3. Watch the port list. A new port appears for a short time.
4. Choose that port and upload again at once.
5. Keep a minimal blink sketch ready for recovery.
6. Use a data cable and avoid a hub.

## Why it happens

Boards with the ATmega32U4 handle USB inside the chip, so a sketch that crashes or stops the USB code makes the serial port disappear, and the usual auto-reset on upload does not work reliably. Shorting RST to GND twice in quick succession starts the bootloader, which stays active for about eight seconds and shows up as a different port. The upload has to start inside that window.

The trick that works every time is to start the upload, wait for the compile to finish, then double-tap reset just as the upload begins.

## If you see this, do this

| You see | Do this |
| --- | --- |
| No port after upload | Double reset. |
| Port changes each time | Normal. Use the one in bootloader mode. |

## Related

[board not detected](https://roboticsengineering.in/fix/arduino-nano-clone-not-detected-ch340-driver/), [avrdude programmer not responding](https://roboticsengineering.in/fix/avrdude-stk500-recv-programmer-is-not-responding/).

Last reviewed: November 2026. These are the usual causes and the order that finds them fastest. Test on your own board; clones and cables differ.

## Why this happens

Boards with the ATmega32U4, such as the Leonardo and the Pro Micro, handle USB inside the chip itself, with no separate USB-to-serial chip. When the sketch runs, the serial port exists only because your code is running. A sketch that crashes, stops USB or loops forever with a bad delay can make the port vanish. The usual auto-reset trick used for the Uno is less reliable here.

The bootloader provides the fix. A double tap of the reset line makes the board start the bootloader, which stays active for about eight seconds and appears as a separate USB port. The upload must begin inside that window. The Pro Micro has no reset button, so you touch the RST pin to the neighbouring GND pin twice, quickly. The board type also matters: the 5 V and 3.3 V versions of the Pro Micro run at different clock speeds, and choosing the wrong one gives upload and timing problems.

## How to confirm the cause

- Open Device Manager on Windows and watch the Ports list. After a good double tap, a new COM port appears for a few seconds and then disappears.
- Note the number of the new port. The port during the bootloader is not the one used while the sketch runs.
- Check the board’s LED. On many boards it pulses while the bootloader is active.
- Confirm that the cable carries data, not only power, by testing it with a device that is known to work.
- Check the board selection in the IDE against the marking on your board, including 5 V or 3.3 V.

## Worked example

A guard for sketches that send keystrokes, so a runaway sketch cannot lock you out. Wire pin 2 to GND to disable them:

```
#include <Keyboard.h>
const int SAFE_PIN = 2;        // connect to GND to skip Keyboard.begin()

void setup() {
  pinMode(SAFE_PIN, INPUT_PULLUP);
  delay(3000);                 // a window to upload before USB is used
  if (digitalRead(SAFE_PIN) == HIGH) Keyboard.begin();
}
void loop() {}
```

## Common mistakes

- Tapping reset only once.
- Tapping too slowly. The two taps need to be within about half a second.
- Choosing the port before the bootloader appears and then uploading to the old port number.
- Starting the upload so early that the board is still running the sketch and the port is busy.
- Using while(!Serial) in a sketch that has to run without a computer connected.

## If this did not fix it

- The bootloader itself may be erased. This needs an ISP programmer to restore it.
- A power-only cable or a damaged USB connector on the board.
- A counterfeit or different board whose bootloader uses another timing.
