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
- 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 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 184.108.40.206, 220.127.116.11, 18.104.22.168... 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
- Download and install Visual Studio Code.
- From Visual Studio Code extension menu, install the PlatformIO IDE.
- With all requirements running, unpack this entire Marlin source code downloaded from the link below to a folder.
- 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".
- Select Terminal->Run Task->Build . It will take a few minutes for the system to download all dependencies and compile the code.
- If the code compiled properly you will see something like this in the terminal: "=== 1 succeeded in 00:00:30.050 ===".
- Copy the file "firmware.bin" from the folder "YOUR_PROJECT_ROOT\.pio\.pio\build\STM32F103RE_btt_USB\" to the printer SD card
- 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.
- Insert the card in the printer and reboot to update the firmware
Instructions for installation from the binary files
- Download the package appropriate to your hardware configuration.
- 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)
- Insert the SD card in the printer and reboot to update the firmware.
- 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).
- Cool down the bed and the nozzle. Heating should have little to no effect on this specific procedure.
- Disable stepper motors using the LCD menu command.
- Place a credit card on one the bed, the thickness of the card will be used as a reference distance.
- Turn the Z axis with your hand until the nozzle hits the credit card.
- 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.
- 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.
- 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).
- 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.
- Optional steps:
- Adjust the extruder steps (menu avaliable in the LCD)
- Calibrate the hot end and bed PIDs (menu available in the LCD)
- Set the linear advance K-Factor using Marlin tool.
- 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)
- 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.
XY homing position.
I would like to adjust my XY homing position so that the nozzle doesn't leak filament into the build area.
How can I go about defining that XY homing positions to do this while using Z_SAFE_HOMING?
Change Z_SAFE_HOMING_X_POINT from ((X_BED_SIZE) / 2) to the value you want. Same for Y.
After flashing, reset EEPROM and make a new mesh, to be on the safe side.
Firmware updated to 2.1.2
I just updated the firmware+source to version 2.1.2 in case any of you would like to get the latest 2023 version.
Dude!! Your firmware has…
Dude!! Your firmware has kept my printer and bltouch running flawlessly. Thank you for supporting the community :)
THANK YOU SO MUCH!
I just want to say - THANK YOU SO MUCH! :)
Excellent working firmware for me.
Needs a update
This firmware needs a update for Marlin 2.1.1 which has become the standard firmware now.
BigtreeTech's Touchscreen's which I have now have a minimum Marlin 2.1.1 dependency now.
Plus a bunch of bug fuzes about SPI and other things printing quality related have been introduced.
Hey guys, do I need to do anything to get the ender 3 pro stock lcd to work With the skr mini?
Ender 3 (Pro) stock
The Ender 3 Stock LCDs (CR-10 style) will work as is. Connection and firmware are the same.
Ender 3 V2 LCDs will need customization and updates on the board and LCD firmware as well, but not the CR-10 style screens.
Thx. I have the old…
Thx. I have the old fashioned lcd on my ender 3 pro. So that should work - right?
and does this count for both stock firmware AND this danbp Firmware?
I have the old fashioned lcd…
Yes. They are the same. Also the BTT TFT screens in "Marlin Mode" should work.
Yes. both firmware are set for the the CR-10 display.
Firmware for Ender 3 V2 may not work.
I would recommend that you get the source files and look at the configurations files. Then reapply the changes he made to Marlin 2.1.1, and compile.
That way you will have the same features but on the newest version of Marlin.
Muito top seu tópico, deu…
Muito top seu tópico, deu para dar uma boa avençada, só que essa última etapa não aparece em meu visor.
You forget to activate MESH_BED_LEVELING.(#define MESH_BED_LEVELING) in CONFIGURATION.H.
SKR Mini E3 V3 Compatibility?
I use your firmware for my V2 and absolutely love it, but my buddy has the new V3, and I'm curious if this firmware would work on it?
Not to use on SKR Mini E3 V3
No this firmware is not compatible with other boards. They use different MCU, beware not to brick your board.
What you can do is use the config files provided as reference, and change what is needed to compile to a different board.
I used his config files as reference and applied the changes he made to the example config files for the SKR Mini E3 Turbo, compiled and got working firmware to that board - with a few adjustments for personal preference.
You can start with the example Marlin config files for the SKR Mini E3 v3, use a text compare tool, as in Notepad++, and remake all the changes he did in this firmware (they are all commented) and then compile your own firmware for the V3 with the same feature set. Good learning exercise as well. :D
Hey bud this Elon, we need your compiled file to launch. We don't have time to do it and the SpaceX team would appreciate it. Let me know.
Quite weird issues...
I tried your firmware, but after the first Z-homing attempt via Bltouch, it always errors out saying there's an error with BLTouch. Official marlin builds of the firmware seem to work fine.
Follow the instructions and wire the probe accordingly. Have no issues here.
Hello,if you enable power outage feature and store settings then the printer halted at the start of any print.
For some reason, Bigtreetech SKR v2.0 board waited for a signal from the corresponding pin on the motherboard for this feature to work.
Can you resolve this issue in the mesh firmware?
inductive senson NPN NO
Hello i dont want to use bltouch becouse are easy to fail.
I want to use inductive sensor that works on 5V directly from the board and is NPN NO.
For that i need pullups activated in the software for Zmin axis and endstop inverting true.Thats it.
Am i correct or i am missing something?
ender 3 pro
what do i put on the sd card for ender 3 pro with out bl touch?
There are files for BL and non BL machines.
There are two zip files for download on the Article.
One for use with a BLTouch and one for machines without it.
And also the following instructions:
* = With or Without BLtouch.
This. But maybe you should read the other sections too.
Ender 3 pro
I’ve tried putting the firmware file on the card and nothing happened when I put it in the machine. Do I need to put just the firmware file on the card or what?
Just the "firmware.bin"
You just need the 'firmware.bin' file on the root of an SD card.
The card should be 8gb or less and formatted FAT32.
Insert the card, power down the printer, and then turn the printer on again.
If you did it right, it will update and rename the file on the card to 'firmware.cur'
There many video guides, but the steps for flashing are the same. Try this one, but only for the instructions of flashing.
He is using files from BTT- Don't do that.
Just use the firmware.bin from here, and follow his instructions.
Thanks and things
Firmware with the bltouch seems to work fine probing compared to the BTT broken one.
The Neopixle header on the SKR Mini E3 2.0 doesn't seem to work with WS2812 LED light strips or is disabled in the firmware.
Is the HOTEND_IDLE_TIMEOUT Submitted by Myzhar on Fri, 09/10/2021 being looked at or fixed?
I have the BTT Smart Filament Sensor and will hook up to E0-STOP as you mentioned, can it work in the TFT35 Touchscreen mode or just Marlin simulator?
Also does it pass the information about filament breaks to Octoprint using the host function?
Neopixel is not enabled. …
CR Touch not being recognised
Hi. Thank you for the firmware. I've been trying to do this for months with no success. The CR touch itself seems to be working ok but when i switch the printer on I get 'printer stopped due to errors. Fix the error and use M999 to restart' then it comes up with 'STOP called because BL Touch error - restart with M999' and then 'Failed to enable Bed Leveling'. Is there anything that needs changing in the firmware? I can't access BL touch wizard in the TFT menu either. Any help would be appreciated. Thanks Gavin
I was wondering if you found a work around for the CR Touch?
I just wanted to thank you for this firmware.
I wasted much of last Sunday trying to compile firmware with no success.
Your website and firmware has saved the day.
I have an Ender 3 Pro but just upgraded to a dual drive Z axis, Micro swiss all metal direct drive extruder, everything worked very well before the upgrades but I just wanted to try printing higher temperature filaments.
I should have read your Requirements list as I had problems after installing the firmware as my Zstop was still the mechanical switch :-(
I removed the black and grey wires from the BL Touch plug and fitted them to a new 2 pin plug and put that in the zstop socket on the PCB.
Everything worked perfectly after that.
I am now trying to tweak the offsets etc to get a nice print.
I will link to you from my youtube channel. https://www.youtube.com/channel/UCFTnQHvgadDIbSlP7qLmBkg
Auto bed leveling
I really like this firmware!
Everything works fine but I can't figure out how to stop the auto bed leveling with my bltouch before every print.
I turned off the auto bed leveling option in the printer's menu and removed the G29 command from my gcode but it still auto level.
Maybe I missed something?
It does not do auto bed…
It does not do auto bed leveling before every print unless your GCode has the G29 command. The firmware only home the axis using the probe.
Yeah, my bad I had another…
Yeah, my bad I had another G29 hiding in the script.
I am really loving what you did to the software! Was super easy to install and edit to my needs. So thanks a lot!
As i am using the CR-10 I'd really like to have the display say "Cr10-mini" instead of "Ender-3" in the upper left corner. As it is not "custom_machine_name" i was wondering if you could tell me how to change it.
Thanks a lot,
You will need to change the #define CUSTOM_MACHINE_NAME setting in configuration.h and recompile the firmware.
CR. Touch issue
Ive downloaded the file for the BL touch version. I have a CR Touch installed and when I unplug the Z stop wire from both plugs the print stays at the same Z axis level and tries to probe from there but not move down. If I manually move the z axis down and then try to probe with auto leveling it will say probing failed. If I plug in the Z stop wire the printer will go down for probing but it doesn’t stop when the probe is triggered. Any help would be appreciated.
How is your CR touch wired?
His firmware is set for bl/cr-touch with 2 pins on the z-end stop port, and the 3 on the probe port. Only the probe's 5 wires should be plugged. 3 in one port, 2 on the other. And the physical end stop switch left unplugged.
Hey I configured everything and there are two issues Ive noticed:
1. After plugging in USB(I use repetier server) whole printer continuously restarts.
2. Searching through gcodes on SD lags and restarts whole "Print from media" menu, sometimes even going blank with only Refresh option.
Firmware 22.214.171.124 for Ender 3 with SKR Mini v2.0 and BL Touch
Firstly, thank you for making your work available to everybody. Greatly appreciated, since I'm still new to compiling firmware! I've compiled your files and used it on my Creality CR-20 Pro with SKR Mini E3 V2 board and TFT35 E3 V3 display. It seems to work fine, however, when I boot I get the following error message and I don't know how to solve it.
"ERROR:FAILED TO ENABLE BED LEVELING"
I've checked the Configuration.h file. BLTouch is enabled. I've checked the Bed Leveling Section with my old configuration.h file and the only difference I can find is: in your file the option #define G26_MESH_VALIDATION is enabled while it was disabled in my setup. And the same is true for #define ABL_BILINEAR_SUBDIVISION.
Could that be the reason? Thanks for your help
I have compiled the firmware (succes) and put the firmware.bin on a SD card.
Put it in the Ender 3 pro with the SKR E3 mini V02 board, But it seems that the printer wo'nt read the card.
tried to format the card and still no succes.
Can you advice me what to do?
What is the capacity and model of the SD card? What type of format you are using for the data in the card? Do you have a custom display board or any other device that uses the serial ports from the board?
Bei BTT eine SD-Karte mit 128 mb verwenden
Connecting via USB Serial - Pulling my hair out!
Hi Daniel, thank you for all the hard work you put into this project.
I am having an issue connecting to the board via the usb serial port. I have NO issues connecting via the BTT pre-compiled firmware version on the GITHub for the SKR Mini E3 using the firmware for the Ender 3 (https://github.com/bigtreetech/BIGTREETECH-SKR-mini-E3) however they do not provide the configuration.h or the configuration_adv.h files so I can see what is different. There are a number of settings I need to change from their pre-configured firmware to work on my machine. But the weird thing is that the serial connection does work.
When I use your pre-compiled version, or compile it myself I cannot get connected via the usb serial. I have been pulling my hair out trying to figure out what setting is different, but I have so far had no luck.
I have tried to compile it using the STM32F103RE_BTT, STM32F103RE_BTT_USB, STM32F103RE_BTT_maple, STM23F103RC_btt, STM23F103RC_btt_usb, STM23F103RC_btt_maple all with no success in getting the usb serial to work so I can connect to it from my windows machine. The only configuration that seems to work is the one provided by BTT on the GitHub, but that is useless because many of the other settings are not correct for me like limit switch reversal.
I have tried a variety of baud rate settings all with the same result. The BTT version works with 115200 so I have made sure that the rest of my testing is using this setting because it clearly works there.
I wish one could reverse engineer the firmware so I could see what they have done to make it work properly.
Any additional settings that you could suggest to make this work?
The chip on my SKR mini E3 V2.0 is the STM32F103RCT6 if that helps.
I don't know what can be wrong, this firmware has been used for thousand of users on the same board without issues. Here are some suggestions:
Home point not centered
I just flashed this firmware last night and I have one small issue. The print head isn't homing on the center of the bed....its to the right a little bit. when I went to print it is too far over and prints off the edge of the bed. what setting do I need to change to get it back to center?
Home point not centered
Mine is home just right. Did you set the probe offsets for X and Y, or only Z?
I set them on the machine…
I set them on the machine not in the firmware. My bl touch is also homing to the right. I didn’t know if I needed to change anything in the firmware and reflash it.
If no changes were made in the fw from this page, then, when homing Z the bl-touch probe should be centered. If it's not, bed size or offsets may have wrong values. Check if X and Y offsets are properly set, including if the value is positive or negative.
Doing that worked for me. Also remember to reset eeprom after flahing firmware, set the new values, and save to eeprom again, to clear old info. Good luck.
Use the M851 GCode command to set the offsets without having to recompile/reflash the firmware.