top of page

Ender 3 Pro Customising and Compiling Marlin Firmware

One of the marlin updates we made to our Ender 3s - our logo on the startup screen.

Disclaimers (aka The Fun Police)

Some settings can be dangerous, like allowing higher temperatures.

If you blow up your printer or burn down your office/house, you were warned that changing settings can be dangerous.


“Add to Path" during setup

  • On first run of VS - Select the following build platforms to install:

  • PlatformIO

  • C/C++

Getting the code

TIP: to save a file when looking at github in a web browser, open the file then right click on the "Raw" button. Select "save link as…"

Getting the project started in VS Code

  • Unzip the Marlin firmware to a folder that will serve as your Project folder.

(such as Documents\VS Projects\Firmware\)

  • Place the configuration files into the “Marlin” subfolder of the Project

(e.g. Documents\VS Projects\Firmware\Marlin\).

This will overwrite the default configuration files.

  • Open Visual Studio Code and choose the PlatformIO tab on the left side:

  • Click “Open Project” and navigate to the folder you unzipped before.

There should be a platformio.ini file in this folder.

  • Click “Open [Firmware]” - [Firmware] will be the name of the folder you unzipped.

  • Now open the platformio.ini file

  • For 4.2.2 and 4.2.7 boards, you want to change the default_envs to:

default_envs = STM32F103RET6_creality

  • Save platformio.ini and close it. PlatformIO should now start "Rebuilding Intellisense Index" in the background while you make some tweaks to the config.

  • First up, let’s double check the correct board is selected selected in Configuration.h

#define MOTHERBOARD BOARD_CREALITY_V4 //Use this for 4.2.2

#define MOTHERBOARD BOARD_CREALITY_V427 //Use this for 4.2.7

Before we get down to the config tweaks, a big tip here is to try to compile. It takes a lot longer the first time around as it downloads more libraries and compiles them.

Look for the Tick on the bottom left of the status bar

The default config has FAN_SOFT_PWM disabled which crashes the compile.

If you see an error related to this, use search to find that line in Configuration.h (line 2853 at the time of writing) and uncomment it.

Once compiled, you will find the firmware file in your project folder under \.pio\build\STM32F103RET6_creality\

Copy it to your microsd, pop it in your printer and reboot.

Now the fun stuff!

Some of the settings we have tweaked for our machines are below, jump into the corresponding file and use the find tool (Ctrl+F) to search for the place in code.

Most of the safe settings are in Configuration.h and the more advanced settings in Configuration_adv.h

Tweaking the firmware can add significant heft to the firmware size. Depending on your board and how many features you enable, you can run out of program memory. Towards the end of the compile log you will see a table of space used in RAM (64k) and flash (512k). PlatformIO also has an inspect tool that shows where the space is being taken up, but it takes an incredibly long time.



What it does


Show the SD card menu at the top.


Set a name that displays on the home screen

#define HEATER_0_MAXTEMP .. #define HEATER_7_MAXTEMP

Heater 0 through 7, sets a maximum temperature for the extruder. The actual temperature you can select will be 15deg lower than this value.


Enables PID tuning menu items. This takes up extra PROGMEM. You can run M403 autotune via terminal (octoprint or serial terminal) then set the K values using the PIDTEMP section of the Conf without adding the autotuning menu.


Tune stepper driver timing for different types of stepper drivers


Bed leveling is far too much to explain here, but this is what you’re looking for to enable it.


Change the preheat configurations that are baked into the firmware. Up to 5 materials are supported. You may need to clear the printer settings after the firmware update for the new values to take hold.



What it does


Enable host support for Octoprint. Allows you to pause Octoprint from the printer.


The total bootscreen time. Make sure that if you set the custom bootscreen time that you still allow time for Marlin’s screen. They put a lot of work in, so credit where it’s due!


This section allows for more informative progress displays. If you use time remaining via Post processing in Cura, this is less helpful.


On a production 3D printer, you can be printing the same file over and over. This setting keeps the menu ready to do just that!


This section allows you to add GCode to a custom submenu. Default entries include Home, Preheat for materials. Use the GCode below to create an interactive Position guide for manual Tramming of the bed.

#define MAIN_MENU_ITEM_4_DESC "Bed Adjust Positions" #define MAIN_MENU_ITEM_4_GCODE "G90 \nG28 \nM0 \nG1 Z5 \nG1 X32 Y36 F3000 \nG1 Z0 \nM0 \nG1 Z5 \nG1 X32 Y206 F3000 \nG1 Z0 \nM0 \nG1 Z5 \nG1 X202 Y206 F3000 \nG1 Z0 \nM0 \nG1 Z5 \nG1 X202 Y36 F3000 \nG1 Z0 \nM0 \nG1 Z5 \nG1 X117 Y121 F3000 \nG1 Z0 \nM0 \nG28 \nM84"

Changing the boot screen

Open the _Bootscreen.h file and read the comment block at the top.

You can upload an image file to the Marlin tool webpage to convert it to the code required for this file:

You may need to resize your image to 128pixels width or less.

Set the tool to generate Marlin 2, Binary, Boot then copy and paste the code back into your _Bootscreen.h file.

You may want to keep the following code in the _Bootscreen.h file:



This keeps the custom bootscreen up for 2.5 seconds and inverts the LCD.

Other tweaks:

  • _Statusscreen.h defines the image for the “Info screen” or home screen. This is “Ender-3 Pro” by default. Small images work best here, 40x16px, you want to see the temps right?

  • Marlin\src\lcd\menu\menu_temperature.cpp can be tweaked to move the preheat items up to the top of the menu. I’d recommend using the custom menu in Conf_adv instead as modifying the Marlin codebase will break when updating to a newer version of Marlin.

  • Marlin\src\lcd\menu\menu_main.cpp can be tweaked to move the custom menu to the top. Again this will break when Marlin is updated, but it’s worth the effort if you are using the custom menu a lot.

Get Creative!

As we said in the beginning, don't get too crazy with extending your machines capabilities unless you are making hardware changes to accommodate them.

Our main goal was to add a little glam to the machines but also to improve efficiencies by making custom menu items for PETG preheat, bed levelling procedure and also adding some custom audio alerts for end of print and other such niceties that just make managing a dozen machines and 50 product prints that little bit easier!

46 views0 comments

Recent Posts

See All

Allowing app installs from Unknown Sources in Android

As part of the Android Operating system, there is a restriction that blocks installing applications outside the Google Play Store. If it’s your first time installing an App from a download, you will b


Post: Blog2_Post
bottom of page