Marlin, Ender 3 Pro, BTT SKR 1.4 Turbo board with automatic bed levelling BLTouch v3.1


This article describes how to compile Marlin released 9th July 2020 for use with the Ender 3 Pro and a custom hardware configuration comprising of the following components: BigTreeTech SKR 1.4 board, TMC2209 drivers, BLTouch. The BBT SKR 1.4 board is replacing the Creality Melzi board found in the stock printer.

Important information

There is a newer versions of this article and Marlin configurations available:

This article won’t be covering the physical assembly of the SKR 1.4 Turbo board instead this article looks at preparing Marlin from source for use on the board. A word of caution the stock case will prove to be a tight fit* and will need some sort of mounting bracket at a minimum to convert the existing mounting holes matching the Melzi board to those found on BBT SKR 1.4 board.

* The heat sinks on the TMC2209’s are tall and when coupled with the SKR board I think it unlikely there will be enough clearance using the stock case.

Here are some key features/highlights enabled in this custom version of Marlin

  • TMC2209 drivers with Stealth-chop & Hybrid threshold enabled on X, Y, Z axis.
  • BLTouch for ABL Bilinear.
    • Bed levelling is used in addition to a Z-stop switch.
    • Menu for levelling bed corners.
    • Restore bed levelling after G28.
    • Probes bed once at each point.
  • Movement on any axis is restricted until axis’s are homed.
  • Emergency stop interrupt commands supported
  • PID Tuning
  • Extruder fan after 50°C
  • Z Safe homing
  • Advanced pause and filament change
  • Classic Jerk

It’s assumed that you have the following equipment:

  • BTT SKR 1.4 Board.
  • BLTouch v3.1 (other versions of the BLTouch will work but you will need to adjust settings related to it and check your wiring).
  • Ender 3 or 3 Pro


I have made my Marlin configurations available for download they feature the same changes mentioned within this article:

If you wish to build your own variant from source; start by downloading the relevant Marlin releases used in this article from Marlin branch:

Once you have downloaded the sources above you will need to extract them to an accessible location, use the following steps as a reference:

  • Extract Marlin
  • Extract the 4 files from the Ender 3 device configuration page and extract and copy the 4 files to the location where you extracted Marlin sources.

PlatformIO Installation

I suggest VSCode as a quick method for compiling Marlin 2.0.x from source.

  1. Download VSCode and install.
  2. Open VSCode > Extension Manager
  3. Search for and Install  official PlatformIO IDE extension.

Alternatively if you already have a Python environment configured you can utilise pip to install PlatformIO:

pip install -U platformio


Firmware configuration modifications

Next we will be modifying 2 specific files from the release to customise the firmware for our requirement. For the Ender 3 Pro I made the following edits to files:

  • /Marlin/Configuration.h
  • /Marlin/Configuration_adv.h

If you wish to review the changes manually you need to modify 2 files:

  1. /Marlin/Configuration.h compare with file: Configuration.h (BitBucket)
  2. /Marlin/Configuration_adv.h compare with file: Configuration_adv.h (BitBucket)

When using my device configurations you should take care to check the following are suited to your setup/configuration:

  • Probe offsets for X, Y, Z (see below).
  • Require Fade height?
  • PID tuning (recommended).
  • E-Step calibration.

Important note on Probe offsets

Keep in mind that in using this; you will likely need to adjust your X, Y, Z offset settings specific to your setup; note in my hardware configuration. The change is simple and the key settings to look for is NOZZLE_TO_PROBE_OFFSET. Once found, this branch of Marlin requires the offsets to be defined as an array: {x, y, z}.

Updating Probe offset values manually using G-code M851

In the following examples I show the offset values I would use after flashing a new firmware these are sent using G-code. You will need to adjust these offsets to accommodate your own requirements.

Set the Z offset for the BLTouch by sending G-code:

M851 Z-1.46 

Set the X and Y distance (probe left front of nozzle) by sending G-code:

M851 X-46.00 Y-16.00 

Save the setting to the EEPROM by sending G-code:


Setting Fade Height manually via G-code M420

Set the Fade Height with G-Code:

M420 Z10