Fix “avrdude: butterfly_recv(): programmer is not responding” (Pro Micro, Leonardo)
The ATmega32U4 bootloader closed before avrdude reached it. Double-tap RESET to open the 8-second window, and select the right 3.3 V/5 V board.
Community draft — report a mistake
What you see
Performing 1200-bps touch reset on serial port COM6
Waiting for upload port...
No upload port found, using COM6 as fallback
"C:\Users\me\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" -CC:\...\avrdude.conf -v -patmega32u4 -cavr109 "-PCOM6" -b57600 -D "-Uflash:w:C:\...\sketch.ino.hex:i"
Connecting to programmer: .
Found programmer: Id = "ÿ"; type =
Software Version = . ; Hardware Version = .
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Failed uploading: uploading error: exit status 1Performing 1200-bps touch reset on serial port COM6
Waiting for upload port...
No upload port found, using COM6 as fallback
"C:\Users\me\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" -CC:\...\avrdude.conf -v -patmega32u4 -cavr109 "-PCOM6" -b57600 -D "-Uflash:w:C:\...\sketch.ino.hex:i"
Connecting to programmer: .
Found programmer: Id = "ÿ"; type =
Software Version = . ; Hardware Version = .
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Failed uploading: uploading error: exit status 1
The ATmega32U4 on the Leonardo and Pro Micro handles USB itself. To upload, the IDE asks the sketch to reboot into the bootloader, which then appears as a new COM port for only 8 seconds. “butterfly_recv(): programmer is not responding” means avrdude talked to a port where no bootloader was listening.
Double-tapping RESET opens the bootloader by hand. Time the upload into that window and it works, even when the sketch has crashed USB.
Quick fix — try in order
- 1
Double-tap RESET, then upload within 8 seconds
Short RST to GND twice quickly (Pro Micro has no button — use a wire). The bootloader port appears for 8 seconds; click Upload just before or right after.
- 2
Select the board that matches the voltage
Pro Micro 5 V/16 MHz → “Arduino Leonardo” or SparkFun Pro Micro 5V. Pro Micro 3.3 V/8 MHz → SparkFun Pro Micro 3.3V. Uploading 16 MHz code to an 8 MHz board makes USB stop working afterwards.
- 3
Remove while(!Serial) loops that never end
Not a cause of the error itself, but a sketch that waits for the monitor can look dead. The board still uploads with the double-tap.
- 4
Windows: give the bootloader port a driver
If Device Manager shows an unknown device for those 8 seconds, reinstall the Arduino AVR Boards package (it installs the 32U4 driver).
Why it happens
Why does the port change?
The 32U4 runs USB in software. Your sketch's USB port (say COM6) disappears on reset, and the bootloader creates a different one (say COM7) for 8 seconds. If the IDE misses it, it falls back to COM6 — where nothing answers.
“No upload port found, using COM6 as fallback”
That line means the 1200-baud reset didn't bring up the bootloader port in time — usually because the running sketch crashed USB. The double-tap bypasses the sketch.
Bricked Pro Micro?
Almost never. Wrong-voltage uploads only break USB in the sketch; the bootloader still works. If even the double-tap fails, re-burn the bootloader over ISP.
Board-specific notes
Pro Micro: RST and GND are next to each other on the header — a pair of tweezers does the double-tap neatly.
Did this fix it?
Thanks — that helps us keep this page right.