Marlin 2.x for a CR-10 V3

I’ve been wanting a 3D printer for a while and finally bought one. I ended up with a Creality CR-10 V3 based on a friends recommendation.

CR-10 V3

I added a BL Touch v3.1 to it and then, instead of using the Creality provided firmware based on Marlin 1.1.6 that still says “CR-10 V2” all over it, I built Marlin 2.0.6 for it with a lot of help from some friends.

Here’s my original Reddit post:

Here are my configuration files and some pre-compiled firmware if you want to use it “as is” and not have to build your own:

I’ve just completed a print and appears to have worked just fine so I think this firmware works.

12 thoughts on “Marlin 2.x for a CR-10 V3

  1. Thank you a lot!!! Working wonderfully. Why is the temperature is limited to 240 only? I used 260 for my PETG before on CR10-v3 Titanium Extruder, and now it’s limited to 240.

    • Looks like 240 might be a default in Marlin 2.x

      If you look in Configuration.h around line 469 these settings are commented out:

      // Above this temperature the heater will be switched off.
      // This can protect components from overheating, but NOT from shorts and failures.
      // (Use MINTEMP for thermistor short/failure protection.)
      #define HEATER_0_MAXTEMP 255
      #define HEATER_1_MAXTEMP 275
      #define HEATER_2_MAXTEMP 275
      #define HEATER_3_MAXTEMP 275
      #define HEATER_4_MAXTEMP 275
      #define HEATER_5_MAXTEMP 275
      #define HEATER_6_MAXTEMP 275
      #define HEATER_7_MAXTEMP 275
      #define BED_MAXTEMP 120

      I suspect if you changed this:

      #define HEATER_0_MAXTEMP 255

      to this:

      #define HEATER_0_MAXTEMP 260

      You’d get your max temp of 260c back.

      I can look into it when the next Marlin Firmware comes out. I don’t print that hot.

      Are you sure the Max is 240c and not 255c?

    • Ah ha, found the answer:

      MAXTEMP is defined as “if a heater reaches this temperature there’s something seriously wrong and we need to do an emergency stop”. By default you can only set a heater temperature to MAXTEMP minus 15 degrees – the extra is so the error condition doesn’t trigger when the temperature is converging to the set value. If you need to set the temperature to 250C you need to set MAXTEMP to 265.

      So 255 – 15 = 240

      You’d need to change:

      #define HEATER_0_MAXTEMP 255


      #define HEATER_0_MAXTEMP 275

      I will do this next Marlin update since our printers are rated for 260c.

  2. Hey Eric, This is awesome!
    I also recently got a BL touch from Creality and it kept bugging me that it had the V2 label instead of V3 (Just one of little details that makes a big difference haha) I tried downloading their source code, but then realised the status screen uses an image and not text for the top left corner.

    I was just curious, have you had any issues with the power recovery feature with this firmware? I was doing some searching of v1 vs v2 and it seems Marlin 2 uses more memory than v1 and on a few boards Marlin v2 doesn’t work correctly due to memory requirements. What I can’t seem to work out is if the V3 has an 8-bit board or not, as I found it strange that Creality was still using v1 on new printers. Thought perhaps this could have been a factor. (or they got lazy haha)

    Again, thanks heaps for this! I plan to try it out anyway once my current print is finished.


    • I believe the V3 uses an 8-bit board. When I compile the firmware I specify the build environment to be “mega2560”.

      A quick Google for “mega2560” comes up with this: which says “The 8-bit board with 54 digital pins, 16 analog inputs, and 4 serial ports.”

      I have not tested the power loss/resume function. I have my printer hooked up directly to a Octoprint VM and don’t use the SD card. I suspect for the resume function to work the print has to be on the SD card.

  3. Will this also work without BLTouch? I don’t currently have one but would like to upgrade to marlin 2.0.x since I think I am having issues with the stock version of the firmware.

    • I haven’t tested it but I don’t see why it wouldn’t work with out a BLTouch attached.

      Just don’t run any of the mesh leveling Gcode and you’re probably fine.

      You can always test and if it doesn’t work revert to the stock firmware. Low risk and doesn’t take long.

      If you want to alter the firmware yourself you basically want to comment out (add //) line 31 in configuration.h:

      //#define CR10V2_BLTOUCH

      With the next release of Marlin I will start compiling a BLTouch and non-BLTouch version of the firmware (if I remember).

      I highly recommend getting a BLTouch.

      • Thank you i will try that.

        I have one ordered but it will take a few days to arrive. But i am having issues with the stock firmware.
        Tough i think i received a lemon since my v3 keeps freezing and i have to hard reset.

        I figured it try another firmware and see if it might reset the pcb. Thanks for answering my question though. and having both versions is a great idea for those people like myself who don’t get bltouch right from the start.

      • Hi Eric,
        I first tried it with your precompiled version of 2.0.7. this did not properly work since i do not have the BLTouch.
        Then I recompiled a Version of your own code with the line changes:

        line #31 commented out
        // Is the BLTouch option installed?
        //#define CR10V2_BLTOUCH

        line # 665, 668 & 669 set to false and removed the ENABLED(CR10V2_BLTOUCH)
        // Mechanical endstop with COM to ground and NC to Signal uses “false” here (most common setup).
        #define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Z_MIN_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the endstop.
        #define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Z_MAX_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the endstop.
        #define Z_MIN_PROBE_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the probe.

        this runs Marlin 2.0.7 on CR10v3 without the BLTouch. Thanks for all your hardwork.

        • Thanks for the update! Odd you had to comment out multiple lines. I thought commenting out the bit on Line 31 automatically disabled all BLTouch related code in the firmware.

          Will keep an eye on it for the next release.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.