Pre-configured Marlin for SKR Mini E3 v2 on Ender 3

This is pre-configured package for the 2.x Marlin Firmware for SKR Mini v2 boards on Creality Ender 3. The configuration files were specially crafted to extract the maximum performance of the printer while maintaining the manufacturer recommended settings. The download packages include both the source code and the compiled binary files.

This firmware will not work with 8-bit boards or Creality 32-bit boards.


Extra features enabled over the standard Marlin firmware configuration.

  • Official Marlin Firmware with the latest updates
  • Ready for Octoprint
  • PID adjustments and auto tune from LCD (nozzle and bed)
  • BLTouch using the probe as Z-Endstop or manual Mesh calibration
  • Bilinear bed leveling with multiple slow probing for maximum precision (5x5 array)
  • Filament runout sensor enabled (3-wire sensor, EZOut compatible) - can be disabled from the LCD menu
  • Restore bed leveling after G28 - no need of custom slicer GCode to load the bed level data
  • LCD based bed leveling
  • Z safe homing (avoid hitting the printed parts)
  • BLTouch voltage menu on the LCD (for BLTouch 3.0 and 3.1)
  • Show filament consumption on the LCD
  • Show remaining, elapsed and estimated printing time in the LCD. If the slicer added the time estimations to the GCode, it will use the slicer information.
  • Power loss recovery - can be turned on/off from the LCD
  • Babystepping
  • Arc support (G2/G3)
  • Bezier curve support (G5)
  • Support for level test (G26)
  • Adjusted the filament change settings for the official Ender 3 bowden tube length
  • Customized menus with the "famous" Heat and Level command
  • Pins debugging (M43)
  • Advanced pause - filament change (M600)
  • Hot End idle timeout - turn off the heater after 5 minutes
  • Host Action commands - enhanced Octoprint integration
  • Homing bump - extra precision to the end switches
  • Adaptive step smoothing
  • Probe offset wizard
  • Enhaced serial float precision - for Octoprint and external LCDs
  • Detailed position data (M114)
  • Soft reset via serial (using KILL or ^X)
  • UTF Filename support for SD Cards
  • Linear Advance + S-Curve acceleration (experimental).

Note about the bed leveling strategy

There are two ways to perform the automatic bed leveling, the first is before every print and the second is only when necessary. Based on my experience with the Ender 3, it's better to do an extremely precise bed leveling when necessary instead of a simpler one before every print. This firmware configuration reflects this choice.

Unified Bed Leveling (UBL) is not recommended and will not be implemented. This feature adds a lot of complexity but does not bring any significant advantage in comparison with the bilinear bed leveling in cartesian printers (delta is another story).

If you want to do quick/imprecise bed leveling before every print you will need to reconfigure the firmware.

BLTouch comments:

  • BLTouch is a convenience for Ender 3 users but not mandatory. Mesh Bed leveling does exactly the same without the hardware additions and does not take much longer to perform.
  • BLTouch 3.0 is problematic, try using higher (3.1, for example) or lower versions (1.x or 2.x).
  • BLTouch sensors are low quality devices and are very susceptible to wiring related problems.
  • Bed level failing is not a problem with the firmware! The only thing you can do from the firmware perspective is setting the correct voltage (you can use the LCD menu).

Note about new version updating strategy

I tend to be very conservative regarding new Marlin versions. The "stable" versions on their website are not that stable at all and installing every minor release can cause more problems that solutions.

New versions of this firmware package will be released according the following criteria:

  • Critical bug fixes: problems that could crash or damage the printer. Small bug fixes like text labels or in features not related with the printer and/or the enabled features will be ignored.
  • Build version increases,, will be ignored unless there are critical bugs to be fixed.
  • Minor version increases: 2.0.6 to 2.0.7 will be released after after I test the version for a few weeks in my printer.
  • Major version increases: 2.0 to 2.1 will depend on what changed and if the hardware supports.


  • SKR Mini E3 v2.0 32-bit board
  • For BLTouch enabled printers:
    • Z-stop switch removed and the BLTouch endstop wires (black and white) connected to the Z endstop pins in the motherboard
    • IMPORTANT! BLTouch tip height must be adjusted according to the official instruction manuals. There are different BLTouch sensor clearances and the YouTube videos tips are wrong most of the times
  • For printers with filament sensor:
    • 3-wire sensor plugged in the E0-STOP port (EZOut compatible)
  • Microsoft Visual Studio Code only if you plan to compile and install from the source code
  • PlatformIO IDE extension installed on Visual Code only if you plan to compile and install from the source code
  • Pronterface (optional): send custom G-Codes to your printer from the USB interface. Very useful to find errors and calibrate the printer. Octoprint does the same.

Instructions for installation from the Source Code

  1. Download and install Visual Studio Code.
  2. From Visual Studio Code extension menu, install the PlatformIO IDE.
  3. With all requirements running, unpack this entire Marlin source code downloaded from the link below to a folder.
  4. From Visual Studio Code select File->Open folder and select the folder where the platformio.ini file is located. Attention! Use the "open folder" command, not the"open file".
  5. Select Terminal->Run Task->Build . It will take a few minutes for the system to download all dependencies and compile the code.
  6. If the code compiled properly you will see something like this in the terminal: "=== 1 succeeded in 00:00:30.050 ===".
  7. Copy the file "firmware.bin" from the folder "YOUR_PROJECT_ROOT\.pio\.pio\build\STM32F103RE_btt_USB\" to the printer SD card
  8. Backup the current firmware from the card by copying the file "firmware.cur" (if exists) to a folder in your computer. Do this before inserting the SD card back to the printer.
  9. Insert the card in the printer and reboot to update the firmware

Instructions for installation from the binary files

  1. Download the package appropriate to your hardware configuration.
  2. Open the ZIP file and extract the "firmware.bin" from "\.pio\build\STM32F103RE_btt_USB\" to an SD card (NOTE: This folder might be hidden in some operating systems)
  3. Insert the SD card in the printer and reboot to update the firmware.

Post-installation configuration

  1. Manually pre-level the bed! This is important because the BLTouch has limited max/min detection ranges and the print quality can be affected if the Z-Axis moves too much (even without BLTouch).
    1. Cool down the bed and the nozzle. Heating should have little to no effect on this specific procedure.
    2. Disable stepper motors using the LCD menu command.
    3. Place a credit card on one the bed, the thickness of the card will be used as a reference distance.
    4. Turn the Z axis with your hand until the nozzle hits the credit card.
    5. Move hot end to several positions of the bed, starting from the 4 corners. For each position, adjust the bed level knobs to keep the nozzle at the credit card thickness distance from the nozzle. This is what you would do in manual calibration but instead of using a paper you will use the card for convenience. The card thickness does not matter because the BLTouch probe will redefine the Z reference.
  2. Heat the bed to the printing temperature and run the bed level command from the LCD (Motion -> Bed Leveling -> Level bed) or use the G29 GCode or the Heat and Level command from the custom menu (recommended). Note that the Heat and Level command waits 2 minutes after the bed is hot to allow the mounted surfaces to expand/contract properly.
  3. Save the settings using the LCD menu or the M500 gcode (if you used the Heat and Level custom command, they will be automatically saved).
  4. After enabling the bed level, print something large and flat to adjust the Z offsets. The nozzle tends to be far from the bed until you adjust the offset to a negative value (Configuration -> Probe Z Offset). Don't forget to save the settings after the print to keep the offset in the memory.
  5. Optional steps:
    1. Adjust the extruder steps (menu avaliable in the LCD)
    2. Calibrate the hot end and bed PIDs (menu available in the LCD)
    3. Set the linear advance K-Factor using Marlin tool.
    4. Set the desired Z fade distance for the bed level compensation. I recommend around 5mm for the Ender 3. (menu available in the LCD: Motion->Bed Leveling)
    5. Save all previous setting to the EEPROM.

Troubleshooting and FAQ

  • I don't want to use the Linear Advance feature: Just set the K to 0 in the LCD menu.
  • The S-Curve should not be enabled with Linear Advance: This firmware is using the experimental mode that allows both features to co-exist. After many hours printing with both features enabled I didn't noted any problems with this printer/board. If you set the K to 0, only S-Curve acceleration will be used.
  • BLTouch is probing outside the bed or too far from the edges: Adjust the probe offsets (Configuration -> Advanced settings -> Probe Offsets )
  • Bed or nozzle are not centered: Please adjust the home offsets (M206) and the hotend offsets (M218).
  • Why not use the ENDSTOP_INTERRUPTS feature? Bigtreetech did not enabled this feature in the original firmware. I am still trying to figure out the reason for that.
  • Want to go back to the previous firmware: If you did the backup of the original firmware, just rename the firmware.cur file to firmware.bin and then put inside the SD card and reboot the printer.
  • Does it supports TFT35, TFT43, TFT50, TFT70, etc... displays: Yes, no modifications required. Please remember that such displays have their own firmware and not all functions will be reachable from the graphical interface unless you use the "Marlin mode".
  • Does it work on the Ender 3 v2? If you are using the SKR E3 Mini v2.0 board and the CR-10, Ender 3v1 display or the TFT35 display (or similar) it will work. If you are using the SKR board with the standard display the answer is no (different wiring).
  • I don't have a filament sensor: No problem, the filament sensor is a switch that closes when there is no filament. If there is no switch installed, the printer will ignore that. If you want to install a switch, just plug the wire and it will work instantaneously (unless it is a rare switch that works with an inverted signal).
  • Why the downloads are so big? Because I included all pre-compiled libraries with it. This allows you to recompile the firmware with a single click in the compile button. Before I included the libraries, many users had problems downloading them.
  • Temperatures are going up and down like crazy: Please calibrate the PID for the bed and for the nozzle, there is a menu in the LCD for that. Alternately you can use the PID Autotune (M303).

If you have problems compiling the firmware...

I can compile the firmware for you. Please see here for more details.

Other Marlin downloads for Ender 3

Marlin 2.x
Ender 3 with SKR Mini v2.0 boards
File size
80 to 180 MB
SHA256: 7C5F788E1F6D813F8EC8031CD976B9C931B85908EC4D334D4D4AC210F3361A57
SHA256: DA9B86E7DFDAC61D9C3B9D19ECB65A1F13C591B70D663F2A6BE2D69464ED311A
SHA256: e130b8c760e9ce40bc763be5b87f59c333347546f8d8b7bb7ede01c17ad73875

Post Categories


FIGURED IT OUT, nm. This ended up being a 100% a contact issue. So when you pushed the pins onto the SKR, there's quite a bit of play in the molex connector. Hot glueing the pins into place and hot glueing the connector into the board worked. Thanks again!

Submitted by Heath on Fri, 11/06/2020 Permalink

Thanks for this superb, easy to follow guide for a non-softie like me. I now have the capability to tune my printer how I want, although I think you have done everything I wanted anyway. I tried for ages trying to compile using the ARDUINO IDE without success so I was very pleased that your guide using PlatformIO worked right away.  

Submitted by Manuel on Wed, 10/21/2020 Permalink

Hi Daniel,

first i want to thank you so much for all your efforts with this specific firmware files.

May i ask when you will release the next update to the current Marlin


Best Regards,



Submitted by Ciro on Mon, 10/12/2020 Permalink

Hi, Thank you. I Just installed your non BLtouch FW on a SKR Mini E3 v2 on an -otherwise stock- Ender 3 (using default end stops), and I really love your compilation. Will try to run some longer tests.

Just a quick question before the main subject of this post. Homing just X or Y behave as I am used to - stopping at 0. But when 'auto homing' or 'homing Z', after hitting the stops, X and Y go to  the middle of the bed. Is that intended?

Now the main point: a few days ago, a fix was committed to the BTT GitHub fixing several config issues (#421). Some of these sound troublesome if unchecked, such as the incorrect TMC current for the the stepper motors.

I checked my settings on the LCD display and they list TMC's as 800 for 4 steppers. The fix says that "correct TMC current values for Crealtiy/Ender-3 steppers. X/Y/Z should be 580 and E0 should be 650".

Does your pack include the correct current values in that fix?

Thank you again for the great work .



Hello Ciro,

This firmware is configured to use the BLTouch as Z-Probe. To do this the leveling of Z is performed in the middle.

I will fix the currents when I release the next version of the firmware. No need to worry about that, the maximum current is only used for sensorless homing and this feature is disabled in this specific version of the firmware.


I just assumed that only the BLTouch version would go to the middle, as you have one FW for BLT and one for Mesh Leveling. But I guess it makes no practical difference, so no real need for them to have different directions. But for a moment there I wondered if I had flashed the wrong one. :)

As for the currents, I adjusted them on the LCD menu and saved for now and  will wait for your updates.

Thanks again, it's a great improvement over BTT releases.

So, either firmware (bltouch or mesh) .bin files will auto home to center of X/Y? I do not use the BLTouch, and instead rely on Mesh leveling.  Sometimes when bed is heating up before print, the nozzle may "ooze", right onto the middle of the bed. Anyway to force auto home to original location?  BTW, THANK YOU for your efforts! Loving this firmware so far after just installing my SKR Mini.  


I had the same issue with oozing in the middle of the bed as my start Gcode does a homing before printing.

Since I like the homing, just not in the middle of the bed, I modified the configuration to my needs by re-commenting the following line in Configuration.h

//#define Z_SAFE_HOMING

and then recompiling the firmware.

I hope Daniel considers making this the default setting for the non BL Touch firmware. It makes more sense to me for manual leveling.



If you mentioned that you could not compile yet I would have posted a binary for you.

But now you can compile your own FW and tune it to your liking and keep on improving.


Submitted by Maarten B on Fri, 10/02/2020 Permalink

Hi Dan, thank you for your work. When starting a print tho it heats up, does the ABL all perfectly but then when it actually goes to print. the heat values drop to 43 degrees on the screen and i get the cold extrusion prevented error

.tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}.tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}.ws_toolbar {z-index:100000} .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px} .tb_highlight{background-color:yellow} .tb_hide {visibility:hidden} .ws_toolbar img {padding:2px;margin:0px}

Submitted by Gino on Mon, 09/21/2020 Permalink

I cant find the legendary heat and level command

In custom menu i just flashed a new skr mini e3 v2

With this and a btt tft 35 screen

Submitted by Getz on Mon, 09/14/2020 Permalink

Hi, thank you for your work :)                                      But my nozle go to midle of heatbed, can you fix firmware.bin file for bed mesh leveling ? Thank you !!!

Submitted by Alex on Thu, 09/10/2020 Permalink

Thank you Daniel for your work! My Ender 3 changed completely after installing your firmware!

Now, I will be updating the mainboard to a BIGTREETECH SKR V1.4 Turbo Control Board with TMC2209.

Do you happen to know if this firmware will work or I if I have to make some changes on it? I would appreciate your input!

Thank you again and keep it up!!

Finally I got the upgrade on my Ender · but sadly I was not able to use your firmware after changing it to work with the SKR 1.4 Turbo but it was a good starting point.

I was able to get the Custom Menu section and the leveling strategy.

Keep up with the good work and happy printing!