skewed screenshot fo the motherboard definition with Marlin 2 3d printer firmware for the bigtreetech SKR V1.4 defined as BOARD_BTT_SKR_V1_4

SKR V1.4 Configuration.h Marlin 2 Setup Part 2

The next stage in setting up the SKR V1.4 with Marlin 2 covers the Configuration.h file. Taking a look at relevant settings for the SKR V1.4 and Turbo boards.

SKR V1.4 Marlin 2 Setup Guide
Let’s Get Started

Serial Port
Stepper Drivers
BLTouch or Probe ?
Invert Stepper Direction
3D Printer Dimensions
Software End Stops
SD Support
Setting the LCD Controller


screenshot of Marlin 2 firmware showing the path to Configuration.h file within PlatformIO editor.

@section machine

*Quick Tip – To quickly search for a key word you can use the search feature. Moreover it will show up towards the top right of Visual Studio. Furthermore simply enter the word you wish to search for and hit either the enter or return key. Without a doubt it helps speed up editing Marlin 2 firmware and makes following the SKR V1.4 Configuration easier.

Mac – Press the CMD (⌘) and the F key at the same time.
PC – Press the Ctrl and the F key at the same time.


screenshot of Marlin 2 firmware defining the serial ports for the bigtreetech SKR V1.4. #define SERIAL_PORT 3 #define SERIAL_PORT2 -1

Where best to start editing the SKR V1.4 Configuration file then the very beginning, so let’s start with searching for the term //#define SERIAL_PORT.

Importantly, in order to enable an option within Marlin simply remove the forward slashes //. While placing forward slashes in front of an option disables it.

Furthermore define the serial port option to 3 as shown below to enable future use with Wi-Fi modules.

#define SERIAL_PORT 3

Additionally enable the SERIAL_PORT_2 option by removing the forward slashes and set the value to -1 for the USB connection.

#define SERIAL_PORT_2 -1


screenshot of Marlin 2 firmware defining the baud rate for the bigtreetech skr v1.4. #define BAUDRATE 115200

While completely possible to set data transfer speeds higher in the configuration file for SKR V1.4. However for reliability whilst configuring Marlin 2, it is advisable to set the baud-rate to 115200.

#define BAUDRATE 115200


screenshot of motherboard definition within Marlin 2 3d printer firmware for the bigtreetech SKR V1.4 defined as BOARD_BTT_SKR_V1_4

Now at this point in setting up the firmware for the SKR V1.4, Marlin has no idea as to what physical board the printer will be using. Because of this, we need to tell Marlin what board is being used.

Moreover we need to define the motherboard, todo this we need to change the board specified in #define MOTHERBOARD option. However frustratingly the board names seem always to be changing. But at the time of writing this guide the board name for the SKR V1.4 is BOARD_BTT_SKR_V1_4, see below.


But if you are using the SKR V1.4 Turbo then see the below example.


Furthermore from here on in there are no differences between the SKR V1.4 or the SKR V1.4 Turbo.

Without a doubt, it is good practise to regular save the work for the firmware you are adjusting. While you can use the mouse to go uptown the top of the screen. Then click File, then Save. However it is far quicker to use shortcuts.

Mac – Press the CMD (⌘) and the S key at the same time.
PC – Press the Ctrl and the S key at the same time.

@section extruder


screenshot of Marlin 2 firmware setting the normal filament diameter to 1.75mm. #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Additionally the next option to configure in the setting up Marlin 2 with the SKR V1.4 and the Configuration file, is the default nominal filament diameter. Moreover by default the nominal filament diameter is set to 3.0mm. While this is only used for volumetric extrusions. Nonetheless it is still not a bad thing to change this to 1.75mm. Furthermore see the below example for the changes made.


@section temperature

screenshoot of Marlin 2 firmware thermistor definitions for both extruder and heated bed. #define TEMP_SENOR_0 1 for Ender 3 Pro extruder thermistor. #define TEMP_SENSOR_BED 1 for Ender 3 Pro heated bed thermistor.


Undoubtedly one of the most important sections within Marlin 2 is setting the correct thermistor for both the hot end, and the heated bed. Because of this, if the wrong thermistor is allocated in the configuration, then the temperature of the hot end or heat bed on the SKR V1.4 may be recorded incorrectly.

For instance you may set the hot end to 210˚C. But the thermistor may read 200˚C instead of 210˚C. As such when the thermistor displays 210˚C it is in fact 220˚C. Without a doubt this will cause issues. However the correct settings are normally supplied by the manufacture of the printer or replacement part.

Furthermore in the below example is using the default settings for the Creality Ender 3 Pro, for the hot ends thermistor..

#define TEMP_SENSOR_0 1

While the below example is for the Creality Ender 3 Hot Bed Thermistor. Moreover it is the same as the hot end, as they both use the same thermistor.


PID Settings

If you would like to read more about PID settings and calibrating the hot end and heated bed, then have a look at the following guides, PID Tuning Extruder Calibration and Heated Bed PID Calibration.

@section homing


screenshot of Marlin 2 firmware, showing the default settings for the end stop pull-ups (ENDSTOPPULLUPS). #if DISABLED(ENDSTOPPULLUPS) // Disable ENDSTOPPULLUPS to set pullups individually //#define ENDSTOPPULLUP_XMAX //#define ENDSTOPPULLUP_YMAX //#define ENDSTOPPULLUP_ZMAX //#define ENDSTOPPULLUP_XMIN //#define ENDSTOPPULLUP_YMIN //#define ENDSTOPPULLUP_ZMIN //#define ENDSTOPPULLUP_ZMIN_PROBE#endif

Below we will be talking about endstops, these are the physical or optical switches that trigger when the 3D printer homes. Furthermore the homing switches are normally used on X, Y, and Z Min connectors on the SKR V1.4.

But what is a pull-up or a pull-down ?

A pull-up is a resistor that connects the pins not in use to the voltage of the switch either 3.3V or 5V. By doing so it keeps the switch as a High input. On the other hand a pull-down resistor will connect the pins not used to the ground which is 0V and as such gives a LOW input.

While on the SKR V1.4 I have not needed to individual enable any of the ENDSTOPPULLUPS options manually. However if this causes problems with your 3D printers particular setup, it’s end stops and homing. Then disable ENDSTOPPULLUPS, and enable if any of the options within the if disabled section.

Furthermore a likely option that will need to be enabled IF the ENDSTOPPULLUPS option is disabled is the ENDSTOPPULLUP_ZMIN_PROBE. Additionally in the option below #define ENDSTOPPULLUPS has been disabled by placing forward slashes in front, and the pull-up for the ENDSTOPPULLUP_ZMIN_PROBE enabled by removing the forward slashes.



screenshot of Marlin 2 firmware, showing the default settings for the end stop pull-downs (ENDSTOPPULLDOWNS). //#define ENDSTOPPULLDOWNS#if DISABLED(ENDSTOPPULLDOWNS) // Disable ENDSTOPPULLDOWNS to set pulldowns individually //#define ENDSTOPPULLDOWN_XMAX //#define ENDSTOPPULLDOWN_YMAX //#define ENDSTOPPULLDOWN_ZMAX //#define ENDSTOPPULLDOWN_XMIN //#define ENDSTOPPULLDOWN_YMIN //#define ENDSTOPPULLDOWN_ZMIN //#define ENDSTOPPULLDOWN_ZMIN_PROBE#endif

While ENDSTOPPULLDOWNS is often not needed. However some other probes and switches require a pull-down in order to function correctly its a similar process as above but for the ENDSTOPPULLDOWNS.

If this is the case for your 3D printers setup then ensure the #define ENDSTOPPULLUPS is disabled and all the ENDSTOPPULLUP_.


On the rare occasion you need a mix of pull-up and pull-down resistance methods, then disable both the ENDSTOPPULLUPS and the ENDSTOPPULLDOWNS.

In addition enable the relevant switch for a pull-up or pull-down by removing those forward slashes for the individual switches. See below for example.

#define ENDSTOPPULLUP_ZMIN_PROBE //This is only one enabled as pull-up

//#define ENDSTOPPULLDOWN_ZMIN_PROBE // This is only one not enabled as pull-down.


screenshot of Marlin 2 firmware showing end stop inverting. While this differs to each machine and end stops. However if using a BLTouch you and it is not responding to being triggered. Enable the #define ENDSTOPPULLUP_ZMIN_PROBE option

Now if upon testing your end-switches and they are not triggering you may need to invert the signal, luckily this can be in firmware rather than fitting new switches. Below is an example of an inverted logic for the probe or BLTouch not triggering when homing. Furthermore in my case I needed X, Y, and Z switches inverted. However your 3D printer may be different.


Stepper Drivers

screenshot of Marlin 2 firmware setting the driver type for X, Y, X and Extruder stepper drivers within Configuration.h. In this case they are using TMC2208. For example #define X_DRIVER_TYPE TMC2208

Obviously setting the correct stepper driver that is installed on the SKR V1.4 motherboard is important. While your particular stepper driver may differ, the below example is using TMC2208’s for UART mode, not standalone. Nonetheless Marlin lists the available stepper drivers, simply copy and paste the relevant driver to the each relevant axis.

#define X_DRIVER_TYPE TMC2208
#define Y_DRIVER_TYPE TMC2208
#define Z_DRIVER_TYPE TMC2208
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC2208
//#define E1_DRIVER_TYPE TMC2208
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988

@section motion


screenshot of steps per mm within Marlin 2 3d printer firmware. In this instance the values are set differently for each machine. For instance the steps for a Creality Ender 3 would be 80, while an Anet A8 or AM8 might be 100.

Without a doubt, setting the amount of steps a stepper motor needs to move per mm is important for dimensional accuracy. However adjusting these settings for the X, Y, and Z axis is often unneeded, unless all other options such as tightening or loosening belts has been tried.

However in the current Marlin version there seems to be a typo on the Z Axis as 4000.00 steps is a bit much, and this will need adjusting. Furthermore the extruder motors steps will need to be calibrated separately., if you would like to read more about calibrating your filament extruder have a look at the Calibrating Your Filament Extruder guide.

Additionally the below example for steps per mm for the Creality Ender 3 Pro.

#define DEFAULT_AXIS_STEPS_PER_UNIT { 80.00, 80.00, 400.00, 500.00 }

While an Anet A8 or AM8 will likely need the X and Y changed to 100.00 mm/s, see the below example.

#define DEFAULT_AXIS_STEPS_PER_UNIT { 100.00, 100.00, 400.00, 500.00 }

@section probes

Undoubtedly probes make life a little easier when it comes to bed levelling. However sometimes they take a bit of tweaking and trial and error to getting working well. Nonetheless all going well, you can simply plug into the servo or probe inserts on the SKR V1.4.

In order to work correctly, Marlin needs to know where the probe is connected. While this next step is now semi-redundant as it should be within the pins_BTT_SKR_V1_4.h file. However, it is still good practise to set it just encase there has been a mistake made with an update to Marlin.

However depending on which version of Marlin 2 you are running, there are two configuration differences for the BLTouch or Probe pin.

Marlin firmware or higher

screenshot of Marlin 3D printer firmware. If the Marlin Firmware is version and higher then use the probe pin P0_10 as shown in the image.

If the Marlin Firmware is version and higher then use the probe pin P0_10. But because of pin definition errors on previous versions the probe pin doesn’t work and the Z-Stop (Z-Min) is used.

Furthermore search and enable #define Z_MIN_PROBE_PIN and set the pin number as set out in the below examples.

So for Marlin or higher set the Z Min Probe pin to 10, see below.

#define Z_MIN_PROBE_PIN P0_10

Marlin firmware lower then

screenshot of Marlin 3D printer firmware. If the Marlin Firmware version is lower than Disable the Z_MIN_PROBE_PIN option and enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN instead

While for Marlin firmware versions lower than we need to disable the Z_MIN_PROBE_PIN option and enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN instead, .see the below examples.

Firstly enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN option as below.


Secondly disable the Z_MIN_PROBE_PIN option as below.

//#define Z_MIN_PROBE_PIN P0_10

A point of note, the pins_BTT_SKR_V1_4.h will need changing for both the Turbo and non-Turbo versions, as the Turbo version references pins from the non-Turbo version.

BLTouch or Probe ?

screenshot of Marlin 2 firmware showing the FIX_MOUNTED_PROBE option enabled if using non-moving bed levelling sensors. Such as inductive sensors

In order that the reading from the sensor to be correct, we need to set what type of probe we are using. If the sensor on the 3D printer is an inductive or a switch type sat on the nozzle, then enable the fix mounted probe.


screenshot of Marlin 2 firmware enabling the BLTOUCH option within configuration.h

Else if you are using a BLTouch style sensor then enable the bltouch.

#define BLTOUCH


So at this point Marlin knows there is a sensor, it knows what type and where it is plugged in. However it doesn’t know where it is physically attached to the printer.

Undoubtedly this is important, let’s say your probe is to the left of the nozzle by 22mm. However without Marlin knowing this, the point in height for where the nozzle will always be wrong. Due to the measurement is for 22mm away to the left of the nozzle.

So by telling Marlin where the nozzle is physically located Marlin adjusts that point of reference accordingly. As a result, the height for the nozzle is now correct. So if you are using a 3D printed model supplied from say Thingiverse or a purchased holder. Furthermore the distance from the probe to the nozzle is often documented within the description of the file.

However if you don’t know the placement you are going to need to measure the distance from the centre of the nozzle to the centre of the probe or neddle. Both in the X-Axis (Left or right) and the Y-Axis (Front or back). The Z Height adjustment comes much later.

Probe Offset Examples

screenshot of Marlin 2 3d printer firmware. Showing the distance form the nozzle to the sensor option. In the image the sensor is 22mm to the right and is not in front or behind the sensor. It is defined as #define NOZZLE_TO_PROBE_OFFSET { 22, 0, 0 }

So in the example below, my probe position that I designed is exactly 22mm to the right. It is not in front or behind the centre of the nozzle.

Now if the nozzle is to the left it is a negative number, if it was to the right you would leave off the minuses as it would be positive number.

#define NOZZLE_TO_PROBE_OFFSET { 22, 0, 0 }

However, let’s say your probe was to the left by 30mm, and behind the probe by 10mm it would look like below.

#define NOZZLE_TO_PROBE_OFFSET { -30, 10, 0 }

In Marlin if the probe is behind the nozzle it is a positive number, and if it was in front then it would be a negative. Marlin supplies a little example in this section.

Invert Stepper Direction

Screenshot of Marlin 2 firmware inverting the stepper motor direction if it is moving the wrong way. You could re-wire the stepper motor but it is easier to adjust the settings within Marlin. For instance the image sows the Z moving in the wrong direction so the Invert Z needs to be turned on. Defined as #define INVERT_Z_DIR true

Wether you need to invert the direction in which the stepper motor moves, is dependent upon individual 3D printers. However you will notice straightaway if you need to enable this option, when things are moving in opposite to the intended direction.

Furthermore in the example below I only needed the Z axis inverted on the AM8.

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

However I did need the filament extruder also inverted.

#define INVERT_E0_DIR true

3D Printer Dimensions

screenshot of Marlin 2 firmware bed size dimension setting. Here you match the physical size of the 3D printers build platform or bed. In this example image the bed size is 220mm for an Anet A8 or AM8. For instance #define X_BED_SIZE 220 #define Y_BED_SIZE 220

While not just specific to the SKR V1.4 it is however worth pointing out that you need to set the correct bed size. Not only is this key for printing boundaries but also required for getting as much of the bed level as possible.

so look for and define the X_BED_SIZE and the Y_BED_SIZE options and adjust for your printer.

For example if your printer was a Anet A8 it would be 220 x 220. While if it was a Creality Ender 3 Pro, it would be 230 x 230. Why 230 ? Without a doubt you can get the automatic bed levelling nearer to the edge even with the standard setup.

#define X_BED_SIZE 230
#define Y_BED_SIZE 230

Additionally Marlin needs to know how high the printer can print too. So search for and adjust Z_MAX_POS, as a guide for the Anet A8 is 240, and the Creality Ender 3 Pro is 250.

#define Z_MAX_POS 250

Software End Stops

screenshot of Marlin 2 firmware showing the software end stop options. If using any automatic bed levelling then the MIN_SOFTWARE_ENDSTOP_Z needs to be disabled by placing // in front of the option. Such as //#define MIN_SOFTWARE_ENDSTOP_Z

Furthermore within Marlin 2 there is a section for software minimum end stops. For instance lets say the height for the Z-Axis is 0mm, it would stop at 0mm and not go any lower. Because this is defined in Z_MIN_POS as 0.

However when bed levelling this causes an issue where the probe or nozzle can not be lowered enough. Naturally we want to disable this, so search for the MIN_SOFTWARE_ENDSTOPS option. Furthermore disable the option for the MIN_SOFTWARE_ENDSTOP_Z, See below for an example.


If you haven’t already don’t forget to save your changes.

Mac – Press the CMD (⌘) and the S key at the same time.
PC – Press the Ctrl and the S key at the same time.

@section calibrate


screenshot of Marlin 2 firmware setting the automatic bed levelling method the easiest option. #define AUTO_BED_LEVELING_BILINEAR

While there are various options for the style of automatic bed levelling within Marlin. However the quickest and easiest to get along with is AUTO_BED_LEVELING_BILINEAR so let’s start with that.


Importantly for the most part when the printer is set to home the G28 command is giving. However it will forget any previous bed levelling probing. So we need to make sure that it doesn’t forget. So search for and enable the RESTORE_LEVELING_AFTER_G28 option.


The next major step in setting up bed levelling within Marlin is the amount of grid lines per dimension is used. By default this is 3 x 3 however, for most beds you may need a higher value. I would suggest 9 is a good point to start with for many beds. So lets alter the value of the amount of grid points in GRID_MAX_POINTS_X.



screenshot of Marlin 2 firmware option to enable safe homing of the Z axis. Disabled by default this option must be enabled if using an bed levelling probe, otherwise the z axis will crash into the bed. #define Z_SAFE_HOMING

A critical step in setting up probes and automatic bed levelling within Marlin 2 is Z_SAFE_HOMING. Without this option enabled the nozzle will crash into the bed when homing. So search and enable Z_SAFE_HOMING if using a BlTouch or probe.


@section extras

screenshot of Marlin 2 3d printer firmware, showing the EEPROM settings. As shown in this image to enable EEPROM which is needed, #define EEPROM_SETTINGS. Furthermore so settings can be changed via a terminal on a computer such as PC, Mac or Raspberry Pi running OctoPrint. We need to enable #define EEPROM_CHITCHAT

Undoubtedly without the EEPROM option being enabled, many of the Marlin options will be lost once the printer is turned off. Furthermore without EEPROM enabled, many options simply won’t be available.

This is because it has not been saved into the printers memory. So memory on a printer can be via a physical chip or software via the SD card. However which ever option is used we need to enable the storing of information into that memory known as EEPROM. So search and enable EEPROM_SETTINGS.


Now we want to be able to talk back and forth to that memory so we need to enable the chit-chat option.


@section lcd

screenshot of Marlin 2 3d printer firmware showing the SD card support option enabled, by default SD card option is disabled. #define SDSUPPORT

SD Support

If your LCD or graphics controller has an SD card reader, then you need to enable the SD memory card option.


Setting the LCD Controller

screenshot of Marlin 2 firmware showing the enabling of an LCD screen. In this image the example used is the Reprap full graphics smart controller. #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Marlin 2 needs to know the type of LCD display we are using on the 3D printer so it can display the information correctly. In this case it is important to double check what display you are using and find it in the list within the lcd section. However for most people using a purchased LCD this is going to be REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER.


However for those using Creality 3D printers the CR10_STOCKDISPLAY option is likely to best suited.



While the pin number for the Neopixels needs to be set to P1_24. However additionally the number of LED’s in use also needs to be specified in the NEOPIXEL_PIXELS option. Without a doubt it is import to remember that those using the DCDC module, are limited to a maximum of 30 LED’s. Furthermore if you would like to read more on installing NeoPixels to the SKR V1.4 including its configuration then have a read of the SKR V1.4 Adding NeoPixel LED’s guide.

#define NEOPIXEL_PIN P1_24
//#define NEOPIXEL2_PIN 5 
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 }

SKR V1.4 Configuration File Completed

Congratulations, that is the basic setup done in the Configuration file for using the SKR V1.4 complete. Furthermore this finishes the second part of the SKR V1.4 Marlin 2 setup guide. While there are other settings that may changing within Configuration these are non-specific to the SKR V1.4 and tend to be machine specific. Nonetheless the next step of configuring the SKR V1.4 is the Configuration_adv.h file.

Additionally it is important that you remember to save your changes.

Mac – Press the CMD (⌘) and the S key at the same time.
PC – Press the Ctrl and the S key at the same time.

If you found this guide useful, please consider a donation to help keep the Make ‘N’ Print website running. For further information please have a look at our support us page

Thank You

© 2019-2020 Copyright - All Rights Reserved.