diff --git a/Marlin/src/HAL/HAL_AVR/fastio.h b/Marlin/src/HAL/HAL_AVR/fastio.h
index 501a7cdf0616ae28228565341c944d25492e50d1..a36bf468a099c309261b971e04549ba4f2f4f143 100644
--- a/Marlin/src/HAL/HAL_AVR/fastio.h
+++ b/Marlin/src/HAL/HAL_AVR/fastio.h
@@ -279,14 +279,25 @@ enum ClockSource2 : char {
  */
 
 // Determine which harware PWMs are already in use
+#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
 #if PIN_EXISTS(CONTROLLER_FAN)
-  #define PWM_CHK_FAN_B(P) (P == CONTROLLER_FAN_PIN || P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
+  #define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
 #else
-  #define PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
+  #define PWM_CHK_FAN_B(P) _PWM_CHK_FAN_B(P)
 #endif
 
-#if ANY_PIN(FAN, FAN1, FAN2)
-  #if PIN_EXISTS(FAN2)
+#if ANY_PIN(FAN, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7)
+  #if PIN_EXISTS(FAN7)
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN || P == FAN7_PIN)
+  #elif PIN_EXISTS(FAN6)
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN)
+  #elif PIN_EXISTS(FAN5)
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN)
+  #elif PIN_EXISTS(FAN4)
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN)
+  #elif PIN_EXISTS(FAN3)
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN)
+  #elif PIN_EXISTS(FAN2)
     #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN)
   #elif PIN_EXISTS(FAN1)
     #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN)
diff --git a/Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h b/Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h
index b32b05eac0ff0ff33a4aa0b9f72d9bba08127394..ffc70b3452d8e016e5202887847ba574dfa40a86 100644
--- a/Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h
+++ b/Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h
@@ -46,6 +46,10 @@
   #error "TEMP_4_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
 #elif _OLD_TEMP_PIN(TEMP_5)
   #error "TEMP_5_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
+#elif _OLD_TEMP_PIN(TEMP_6)
+  #error "TEMP_6_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
+#elif _OLD_TEMP_PIN(TEMP_7)
+  #error "TEMP_7_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
 #endif
 #undef _OLD_TEMP_PIN
 
diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
index b5b62076e87bf5b8bc36f809f0b24df19449701f..6074e4bbd61592556967dd6ce172575991ecd2f6 100644
--- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
+++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
@@ -59,6 +59,16 @@
 #else
   #define GET_TEMP_5_ADC()          -1
 #endif
+#if HAS_TEMP_ADC_6
+  #define GET_TEMP_6_ADC()          PIN_TO_ADC(TEMP_6_PIN)
+#else
+  #define GET_TEMP_6_ADC()          -1
+#endif
+#if HAS_TEMP_ADC_7
+  #define GET_TEMP_7_ADC()          PIN_TO_ADC(TEMP_7_PIN)
+#else
+  #define GET_TEMP_7_ADC()          -1
+#endif
 #if HAS_TEMP_PROBE
   #define GET_PROBE_ADC()           PIN_TO_ADC(TEMP_PROBE_PIN)
 #else
@@ -85,13 +95,15 @@
   #define GET_BUTTONS_ADC()         -1
 #endif
 
-#define IS_ADC_REQUIRED(n)      (GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n      \
-                                 || GET_TEMP_3_ADC() == n || GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n   \
-                                 || GET_PROBE_ADC() == n                                                      \
-                                 || GET_BED_ADC() == n                                                        \
-                                 || GET_CHAMBER_ADC() == n                                                    \
-                                 || GET_FILAMENT_WIDTH_ADC() == n                                             \
-                                 || GET_BUTTONS_ADC() == n)
+#define IS_ADC_REQUIRED(n) ( \
+     GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n || GET_TEMP_3_ADC() == n \
+  || GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n || GET_TEMP_6_ADC() == n || GET_TEMP_7_ADC() == n \
+  || GET_PROBE_ADC() == n          \
+  || GET_BED_ADC() == n            \
+  || GET_CHAMBER_ADC() == n        \
+  || GET_FILAMENT_WIDTH_ADC() == n \
+  || GET_BUTTONS_ADC() == n        \
+)
 
 #define ADC0_IS_REQUIRED    IS_ADC_REQUIRED(0)
 #define ADC1_IS_REQUIRED    IS_ADC_REQUIRED(1)
@@ -151,6 +163,12 @@ uint16_t HAL_adc_result;
     #if GET_TEMP_5_ADC() == 0
       TEMP_5_PIN,
     #endif
+    #if GET_TEMP_6_ADC() == 0
+      TEMP_6_PIN,
+    #endif
+    #if GET_TEMP_7_ADC() == 0
+      TEMP_7_PIN,
+    #endif
     #if GET_PROBE_ADC() == 0
       TEMP_PROBE_PIN,
     #endif
@@ -185,6 +203,12 @@ uint16_t HAL_adc_result;
     #if GET_TEMP_5_ADC() == 1
       TEMP_5_PIN,
     #endif
+    #if GET_TEMP_6_ADC() == 1
+      TEMP_6_PIN,
+    #endif
+    #if GET_TEMP_7_ADC() == 1
+      TEMP_7_PIN,
+    #endif
     #if GET_PROBE_ADC() == 1
       TEMP_PROBE_PIN,
     #endif
@@ -227,6 +251,12 @@ uint16_t HAL_adc_result;
       #if GET_TEMP_5_ADC() == 0
         { PIN_TO_INPUTCTRL(TEMP_5_PIN) },
       #endif
+      #if GET_TEMP_6_ADC() == 0
+        { PIN_TO_INPUTCTRL(TEMP_6_PIN) },
+      #endif
+      #if GET_TEMP_7_ADC() == 0
+        { PIN_TO_INPUTCTRL(TEMP_7_PIN) },
+      #endif
       #if GET_PROBE_ADC() == 0
         { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) },
       #endif
@@ -270,6 +300,12 @@ uint16_t HAL_adc_result;
       #if GET_TEMP_5_ADC() == 1
         { PIN_TO_INPUTCTRL(TEMP_5_PIN) },
       #endif
+      #if GET_TEMP_6_ADC() == 1
+        { PIN_TO_INPUTCTRL(TEMP_6_PIN) },
+      #endif
+      #if GET_TEMP_7_ADC() == 1
+        { PIN_TO_INPUTCTRL(TEMP_7_PIN) },
+      #endif
       #if GET_PROBE_ADC() == 1
         { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) },
       #endif
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
index 9dcb77ae4f144ec1a98db819285fa4774695e938..0db0371caee274ccfc09927a1003f15e2a4feea1 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
@@ -118,6 +118,12 @@ const uint8_t adc_pins[] = {
   #if HAS_TEMP_ADC_5
     TEMP_5_PIN,
   #endif
+  #if HAS_TEMP_ADC_6
+    TEMP_6_PIN,
+  #endif
+  #if HAS_TEMP_ADC_7
+    TEMP_7_PIN,
+  #endif
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
     FILWIDTH_PIN,
   #endif
@@ -160,6 +166,12 @@ enum TEMP_PINS : char {
   #if HAS_TEMP_ADC_5
     TEMP_5,
   #endif
+  #if HAS_TEMP_ADC_6
+    TEMP_6,
+  #endif
+  #if HAS_TEMP_ADC_7
+    TEMP_7,
+  #endif
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
     FILWIDTH,
   #endif
@@ -346,6 +358,12 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) {
     #if HAS_TEMP_ADC_5
       case TEMP_5_PIN: pin_index = TEMP_5; break;
     #endif
+    #if HAS_TEMP_ADC_6
+      case TEMP_6_PIN: pin_index = TEMP_6; break;
+    #endif
+    #if HAS_TEMP_ADC_7
+      case TEMP_7_PIN: pin_index = TEMP_7; break;
+    #endif
     #if HAS_JOY_ADC_X
       case JOY_X_PIN: pin_index = JOY_X; break;
     #endif
diff --git a/Marlin/src/core/drivers.h b/Marlin/src/core/drivers.h
index 024cdedc9bebc52154fd98c1a52ce5d218fa5cff..a89578f529bc0047afa8866f287a2bf5cf112d79 100644
--- a/Marlin/src/core/drivers.h
+++ b/Marlin/src/core/drivers.h
@@ -79,7 +79,8 @@
 
 #define HAS_E_DRIVER(T) (  AXIS_DRIVER_TYPE_E0(T) || AXIS_DRIVER_TYPE_E1(T) \
                         || AXIS_DRIVER_TYPE_E2(T) || AXIS_DRIVER_TYPE_E3(T) \
-                        || AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) )
+                        || AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) \
+                        || AXIS_DRIVER_TYPE_E6(T) || AXIS_DRIVER_TYPE_E7(T) )
 
 #define HAS_DRIVER(T) (    AXIS_DRIVER_TYPE_X(T)  || AXIS_DRIVER_TYPE_X2(T) \
                         || AXIS_DRIVER_TYPE_Y(T)  || AXIS_DRIVER_TYPE_Y2(T) \
@@ -152,7 +153,8 @@
                           || AXIS_HAS_##T(Z3) \
                           || AXIS_HAS_##T(E0) || AXIS_HAS_##T(E1) \
                           || AXIS_HAS_##T(E2) || AXIS_HAS_##T(E3) \
-                          || AXIS_HAS_##T(E4) || AXIS_HAS_##T(E5) )
+                          || AXIS_HAS_##T(E4) || AXIS_HAS_##T(E5) \
+                          || AXIS_HAS_##T(E6) || AXIS_HAS_##T(E7) )
 
 #define HAS_STEALTHCHOP    ANY_AXIS_HAS(STEALTHCHOP)
 #define HAS_STALLGUARD     ANY_AXIS_HAS(STALLGUARD)
diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index e7841ae4519cdd154283c7bbf49a416a2bb86afa..fe279bae894758948b91e9fbcc5119c197ce32ad 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -359,6 +359,8 @@
   #define LCD_STR_N3 "3"
   #define LCD_STR_N4 "4"
   #define LCD_STR_N5 "5"
+  #define LCD_STR_N6 "6"
+  #define LCD_STR_N7 "7"
 #else
   #define LCD_FIRST_TOOL '1'
   #define LCD_STR_N0 "1"
@@ -367,6 +369,8 @@
   #define LCD_STR_N3 "4"
   #define LCD_STR_N4 "5"
   #define LCD_STR_N5 "6"
+  #define LCD_STR_N6 "7"
+  #define LCD_STR_N7 "8"
 #endif
 
 #define LCD_STR_E0 "E" LCD_STR_N0
@@ -375,6 +379,8 @@
 #define LCD_STR_E3 "E" LCD_STR_N3
 #define LCD_STR_E4 "E" LCD_STR_N4
 #define LCD_STR_E5 "E" LCD_STR_N5
+#define LCD_STR_E6 "E" LCD_STR_N6
+#define LCD_STR_E7 "E" LCD_STR_N7
 
 #include "multi_language.h"   // Allow multiple languages
 
diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h
index 72578faaaf27c50593e9ebf80919e30da3858701..97ce5af5ee645bd6887a316126baad94bde2f209 100644
--- a/Marlin/src/core/types.h
+++ b/Marlin/src/core/types.h
@@ -43,11 +43,7 @@ enum AxisEnum : uint8_t {
   E_AXIS   = 3,
   X_HEAD   = 4, Y_HEAD = 5, Z_HEAD = 6,
   E0_AXIS  = 3,
-  E1_AXIS  = 4,
-  E2_AXIS  = 5,
-  E3_AXIS  = 6,
-  E4_AXIS  = 7,
-  E5_AXIS  = 8,
+  E1_AXIS, E2_AXIS, E3_AXIS, E4_AXIS, E5_AXIS, E6_AXIS, E7_AXIS,
   ALL_AXES = 0xFE, NO_AXIS = 0xFF
 };
 
diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp
index 1e6145f5b5d03c06f3dfcf87d6cb23c90c83bdc1..1ee03f8905385c04b69d090434a612825ba2c32c 100644
--- a/Marlin/src/gcode/control/M42.cpp
+++ b/Marlin/src/gcode/control/M42.cpp
@@ -47,23 +47,38 @@ void GcodeSuite::M42() {
 
   const pin_t pin = GET_PIN_MAP_PIN(pin_index);
 
-  if (!parser.boolval('I') && pin_is_protected(pin)) return protected_pin_err();
-
-  pinMode(pin, OUTPUT);
-  extDigitalWrite(pin, pin_status);
-  analogWrite(pin, pin_status);
-
   #if FAN_COUNT > 0
     switch (pin) {
       #if HAS_FAN0
-        case FAN0_PIN: thermalManager.fan_speed[0] = pin_status; break;
+        case FAN0_PIN: thermalManager.fan_speed[0] = pin_status; return;
       #endif
       #if HAS_FAN1
-        case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; break;
+        case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; return;
       #endif
       #if HAS_FAN2
-        case FAN2_PIN: thermalManager.fan_speed[2] = pin_status; break;
+        case FAN2_PIN: thermalManager.fan_speed[2] = pin_status; return;
+      #endif
+      #if HAS_FAN3
+        case FAN3_PIN: thermalManager.fan_speed[3] = pin_status; return;
+      #endif
+      #if HAS_FAN4
+        case FAN4_PIN: thermalManager.fan_speed[4] = pin_status; return;
+      #endif
+      #if HAS_FAN5
+        case FAN5_PIN: thermalManager.fan_speed[5] = pin_status; return;
+      #endif
+      #if HAS_FAN6
+        case FAN6_PIN: thermalManager.fan_speed[6] = pin_status; return;
+      #endif
+      #if HAS_FAN7
+        case FAN7_PIN: thermalManager.fan_speed[7] = pin_status; return;
       #endif
     }
   #endif
+
+  if (!parser.boolval('I') && pin_is_protected(pin)) return protected_pin_err();
+
+  pinMode(pin, OUTPUT);
+  extDigitalWrite(pin, pin_status);
+  analogWrite(pin, pin_status);
 }
diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
index f23bfbeaefaff6a60b90aa328550185b649e3d47..578deac844f1e9a2006f67b282cf03a23cf193d0 100644
--- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
@@ -38,7 +38,7 @@
   #define M91x_SOME_X (M91x_USE(X) || M91x_USE(X2))
   #define M91x_SOME_Y (M91x_USE(Y) || M91x_USE(Y2))
   #define M91x_SOME_Z (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3) || M91x_USE(Z4))
-  #define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5))
+  #define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5) || M91x_USE_E(6) || M91x_USE_E(7))
 
   #if !M91x_SOME_X && !M91x_SOME_Y && !M91x_SOME_Z && !M91x_SOME_E
     #error "MONITOR_DRIVER_STATUS requires at least one TMC2130, 2160, 2208, 2209, 2660, 5130, or 5160."
@@ -91,6 +91,12 @@
     #if M91x_USE_E(5)
       tmc_report_otpw(stepperE5);
     #endif
+    #if M91x_USE_E(6)
+      tmc_report_otpw(stepperE6);
+    #endif
+    #if M91x_USE_E(7)
+      tmc_report_otpw(stepperE7);
+    #endif
   }
 
   /**
@@ -188,6 +194,12 @@
       #if M91x_USE_E(5)
         if (hasNone || eval == 5 || (hasE && eval < 0)) tmc_clear_otpw(stepperE5);
       #endif
+      #if M91x_USE_E(6)
+        if (hasNone || eval == 6 || (hasE && eval < 0)) tmc_clear_otpw(stepperE6);
+      #endif
+      #if M91x_USE_E(7)
+        if (hasNone || eval == 7 || (hasE && eval < 0)) tmc_clear_otpw(stepperE7);
+      #endif
     #endif
   }
 
@@ -263,6 +275,12 @@
               #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
                 case 5: TMC_SET_PWMTHRS_E(5); break;
               #endif
+              #if E_STEPPERS > 6 && AXIS_HAS_STEALTHCHOP(E6)
+                case 6: TMC_SET_PWMTHRS_E(6); break;
+              #endif
+              #if E_STEPPERS > 7 && AXIS_HAS_STEALTHCHOP(E7)
+                case 7: TMC_SET_PWMTHRS_E(7); break;
+              #endif
             }
           #endif // E_STEPPERS
         } break;
@@ -312,6 +330,12 @@
       #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
         TMC_SAY_PWMTHRS_E(5);
       #endif
+      #if E_STEPPERS > 6 && AXIS_HAS_STEALTHCHOP(E6)
+        TMC_SAY_PWMTHRS_E(6);
+      #endif
+      #if E_STEPPERS > 7 && AXIS_HAS_STEALTHCHOP(E7)
+        TMC_SAY_PWMTHRS_E(7);
+      #endif
     }
   }
 #endif // HYBRID_THRESHOLD
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index 4e0fe843907b69c0e0cd95e4b02517780de8683b..00be08433d0804119eb73ffbb81fb263e2f86add 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -34,6 +34,8 @@
   #undef TEMP_SENSOR_3
   #undef TEMP_SENSOR_4
   #undef TEMP_SENSOR_5
+  #undef TEMP_SENSOR_6
+  #undef TEMP_SENSOR_7
   #undef FWRETRACT
   #undef PIDTEMP
   #undef AUTOTEMP
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 02e20cdd6eaf2ec62c375d9d4dd78f8d8f69f4ca..1a2c39ec258833fca50d5487b6f1e6d62df3063c 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -341,7 +341,7 @@
  * Temp Sensor defines
  */
 
-#define ANY_TEMP_SENSOR_IS(n) (TEMP_SENSOR_0 == (n) || TEMP_SENSOR_1 == (n) || TEMP_SENSOR_2 == (n) || TEMP_SENSOR_3 == (n) || TEMP_SENSOR_4 == (n) || TEMP_SENSOR_5 == (n) || TEMP_SENSOR_BED == (n) || TEMP_SENSOR_PROBE == (n) || TEMP_SENSOR_CHAMBER == (n))
+#define ANY_TEMP_SENSOR_IS(n) (TEMP_SENSOR_0 == (n) || TEMP_SENSOR_1 == (n) || TEMP_SENSOR_2 == (n) || TEMP_SENSOR_3 == (n) || TEMP_SENSOR_4 == (n) || TEMP_SENSOR_5 == (n) || TEMP_SENSOR_6 == (n) || TEMP_SENSOR_7 == (n) || TEMP_SENSOR_BED == (n) || TEMP_SENSOR_PROBE == (n) || TEMP_SENSOR_CHAMBER == (n))
 
 #define HAS_USER_THERMISTORS ANY_TEMP_SENSOR_IS(1000)
 
@@ -483,6 +483,44 @@
   #undef HEATER_5_MAXTEMP
 #endif
 
+#if TEMP_SENSOR_6 == -4
+  #define HEATER_6_USES_AD8495
+#elif TEMP_SENSOR_6 == -3
+  #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_6."
+#elif TEMP_SENSOR_6 == -2
+  #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_6."
+#elif TEMP_SENSOR_6 == -1
+  #define HEATER_6_USES_AD595
+#elif TEMP_SENSOR_6 > 0
+  #define THERMISTOR_HEATER_6 TEMP_SENSOR_6
+  #define HEATER_6_USES_THERMISTOR
+  #if TEMP_SENSOR_6 == 1000
+    #define HEATER_6_USER_THERMISTOR
+  #endif
+#else
+  #undef HEATER_6_MINTEMP
+  #undef HEATER_6_MAXTEMP
+#endif
+
+#if TEMP_SENSOR_7 == -4
+  #define HEATER_7_USES_AD8495
+#elif TEMP_SENSOR_7 == -3
+  #error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_7."
+#elif TEMP_SENSOR_7 == -2
+  #error "MAX7775 Thermocouples (-2) not supported for TEMP_SENSOR_7."
+#elif TEMP_SENSOR_7 == -1
+  #define HEATER_7_USES_AD595
+#elif TEMP_SENSOR_7 > 0
+  #define THERMISTOR_HEATER_7 TEMP_SENSOR_7
+  #define HEATER_7_USES_THERMISTOR
+  #if TEMP_SENSOR_7 == 1000
+    #define HEATER_7_USER_THERMISTOR
+  #endif
+#else
+  #undef HEATER_7_MINTEMP
+  #undef HEATER_7_MAXTEMP
+#endif
+
 #if TEMP_SENSOR_BED == -4
   #define HEATER_BED_USES_AD8495
 #elif TEMP_SENSOR_BED == -3
@@ -538,8 +576,8 @@
 #endif
 
 #define HOTEND_USES_THERMISTOR ANY( \
-  HEATER_0_USES_THERMISTOR, HEATER_1_USES_THERMISTOR, HEATER_2_USES_THERMISTOR, \
-  HEATER_3_USES_THERMISTOR, HEATER_4_USES_THERMISTOR, HEATER_5_USES_THERMISTOR)
+  HEATER_0_USES_THERMISTOR, HEATER_1_USES_THERMISTOR, HEATER_2_USES_THERMISTOR, HEATER_3_USES_THERMISTOR, \
+  HEATER_4_USES_THERMISTOR, HEATER_5_USES_THERMISTOR, HEATER_6_USES_THERMISTOR, HEATER_7_USES_THERMISTOR )
 
 /**
  * Default hotend offsets, if not defined
@@ -1025,6 +1063,18 @@
 #define HAS_E5_MICROSTEPS (PIN_EXISTS(E5_MS1))
 #define HAS_SOLENOID_5    (PIN_EXISTS(SOL5))
 
+#define HAS_E6_ENABLE     (PIN_EXISTS(E6_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)))
+#define HAS_E6_DIR        (PIN_EXISTS(E6_DIR))
+#define HAS_E6_STEP       (PIN_EXISTS(E6_STEP))
+#define HAS_E6_MICROSTEPS (PIN_EXISTS(E6_MS1))
+#define HAS_SOLENOID_6    (PIN_EXISTS(SOL6))
+
+#define HAS_E7_ENABLE     (PIN_EXISTS(E7_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)))
+#define HAS_E7_DIR        (PIN_EXISTS(E7_DIR))
+#define HAS_E7_STEP       (PIN_EXISTS(E7_STEP))
+#define HAS_E7_MICROSTEPS (PIN_EXISTS(E7_MS1))
+#define HAS_SOLENOID_7    (PIN_EXISTS(SOL7))
+
 // Trinamic Stepper Drivers
 #if HAS_TRINAMIC
   #define STEALTHCHOP_ENABLED ANY(STEALTHCHOP_XY, STEALTHCHOP_Z, STEALTHCHOP_E)
@@ -1095,6 +1145,8 @@
 #define HAS_TEMP_ADC_3        HAS_ADC_TEST(3)
 #define HAS_TEMP_ADC_4        HAS_ADC_TEST(4)
 #define HAS_TEMP_ADC_5        HAS_ADC_TEST(5)
+#define HAS_TEMP_ADC_6        HAS_ADC_TEST(6)
+#define HAS_TEMP_ADC_7        HAS_ADC_TEST(7)
 #define HAS_TEMP_ADC_BED      HAS_ADC_TEST(BED)
 #define HAS_TEMP_ADC_PROBE    HAS_ADC_TEST(PROBE)
 #define HAS_TEMP_ADC_CHAMBER  HAS_ADC_TEST(CHAMBER)
@@ -1118,6 +1170,8 @@
 #define HAS_HEATER_3    (PIN_EXISTS(HEATER_3))
 #define HAS_HEATER_4    (PIN_EXISTS(HEATER_4))
 #define HAS_HEATER_5    (PIN_EXISTS(HEATER_5))
+#define HAS_HEATER_6    (PIN_EXISTS(HEATER_6))
+#define HAS_HEATER_7    (PIN_EXISTS(HEATER_7))
 #define HAS_HEATER_BED  (PIN_EXISTS(HEATER_BED))
 
 // Shorthand for common combinations
@@ -1146,12 +1200,14 @@
 #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
 #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
 #define HAS_AUTO_FAN_5 (HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN))
+#define HAS_AUTO_FAN_6 (HOTENDS > 6 && PIN_EXISTS(E6_AUTO_FAN))
+#define HAS_AUTO_FAN_7 (HOTENDS > 7 && PIN_EXISTS(E7_AUTO_FAN))
 #define HAS_AUTO_CHAMBER_FAN (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN))
 
-#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_CHAMBER_FAN)
+#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_FAN_6 || HAS_AUTO_FAN_7 || HAS_AUTO_CHAMBER_FAN)
 #define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
 #if HAS_AUTO_FAN
-  #define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5))
+  #define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5) || _FANOVERLAP(CHAMBER,6) || _FANOVERLAP(CHAMBER,7))
 #endif
 
 #if !HAS_TEMP_SENSOR
@@ -1164,8 +1220,14 @@
 
 // Other fans
 #define HAS_FAN0 (PIN_EXISTS(FAN))
-#define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN && E4_AUTO_FAN_PIN != FAN1_PIN && E5_AUTO_FAN_PIN != FAN1_PIN)
-#define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN && E4_AUTO_FAN_PIN != FAN2_PIN && E5_AUTO_FAN_PIN != FAN2_PIN)
+#define _HAS_FAN(P) (PIN_EXISTS(FAN_##P) && CONTROLLER_FAN_PIN != FAN_##P##_PIN && E0_AUTO_FAN_PIN != FAN_##P##_PIN && E1_AUTO_FAN_PIN != FAN_##P##_PIN && E2_AUTO_FAN_PIN != FAN_##P##_PIN && E3_AUTO_FAN_PIN != FAN_##P##_PIN && E4_AUTO_FAN_PIN != FAN_##P##_PIN && E5_AUTO_FAN_PIN != FAN_##P##_PIN && E6_AUTO_FAN_PIN != FAN_##P##_PIN && E7_AUTO_FAN_PIN != FAN_##P##_PIN)
+#define HAS_FAN1 _HAS_FAN(1)
+#define HAS_FAN2 _HAS_FAN(2)
+#define HAS_FAN3 _HAS_FAN(3)
+#define HAS_FAN4 _HAS_FAN(4)
+#define HAS_FAN5 _HAS_FAN(5)
+#define HAS_FAN6 _HAS_FAN(6)
+#define HAS_FAN7 _HAS_FAN(7)
 #define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
 
 // Servos
@@ -1203,7 +1265,7 @@
 #define HAS_MOTOR_CURRENT_PWM ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_Z, MOTOR_CURRENT_PWM_E)
 
 #define HAS_SOME_Z_MICROSTEPS (HAS_Z_MICROSTEPS || HAS_Z2_MICROSTEPS || HAS_Z3_MICROSTEPS || HAS_Z4_MICROSTEPS)
-#define HAS_SOME_E_MICROSTEPS (HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS || HAS_E5_MICROSTEPS)
+#define HAS_SOME_E_MICROSTEPS (HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS || HAS_E5_MICROSTEPS || HAS_E6_MICROSTEPS || HAS_E7_MICROSTEPS)
 #define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_X2_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Y2_MICROSTEPS || HAS_SOME_Z_MICROSTEPS || HAS_SOME_E_MICROSTEPS)
 
 #if HAS_MICROSTEPS
@@ -1278,26 +1340,27 @@
 #if HAS_HEATER_0 && !defined(HEATER_0_INVERTING)
   #define HEATER_0_INVERTING false
 #endif
-
 #if HAS_HEATER_1 && !defined(HEATER_1_INVERTING)
   #define HEATER_1_INVERTING false
 #endif
-
 #if HAS_HEATER_2 && !defined(HEATER_2_INVERTING)
   #define HEATER_2_INVERTING false
 #endif
-
 #if HAS_HEATER_3 && !defined(HEATER_3_INVERTING)
   #define HEATER_3_INVERTING false
 #endif
-
 #if HAS_HEATER_4 && !defined(HEATER_4_INVERTING)
   #define HEATER_4_INVERTING false
 #endif
-
 #if HAS_HEATER_5 && !defined(HEATER_5_INVERTING)
   #define HEATER_5_INVERTING false
 #endif
+#if HAS_HEATER_6 && !defined(HEATER_6_INVERTING)
+  #define HEATER_6_INVERTING false
+#endif
+#if HAS_HEATER_7 && !defined(HEATER_7_INVERTING)
+  #define HEATER_7_INVERTING false
+#endif
 
 /**
  * Helper Macros for heaters and extruder fan
@@ -1314,6 +1377,12 @@
         #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, (v) ^ HEATER_4_INVERTING)
         #if HOTENDS > 5
           #define WRITE_HEATER_5(v) WRITE(HEATER_5_PIN, (v) ^ HEATER_5_INVERTING)
+          #if HOTENDS > 6
+            #define WRITE_HEATER_6(v) WRITE(HEATER_6_PIN, (v) ^ HEATER_6_INVERTING)
+            #if HOTENDS > 7
+              #define WRITE_HEATER_7(v) WRITE(HEATER_7_PIN, (v) ^ HEATER_7_INVERTING)
+            #endif // HOTENDS > 7
+          #endif // HOTENDS > 6
         #endif // HOTENDS > 5
       #endif // HOTENDS > 4
     #endif // HOTENDS > 3
@@ -1365,7 +1434,17 @@
   #define FAN_INVERTING false
 #endif
 
-#if HAS_FAN2
+#if HAS_FAN7
+  #define FAN_COUNT 8
+#elif HAS_FAN6
+  #define FAN_COUNT 7
+#elif HAS_FAN5
+  #define FAN_COUNT 6
+#elif HAS_FAN4
+  #define FAN_COUNT 5
+#elif HAS_FAN3
+  #define FAN_COUNT 4
+#elif HAS_FAN2
   #define FAN_COUNT 3
 #elif HAS_FAN1
   #define FAN_COUNT 2
@@ -1640,7 +1719,6 @@
   #define HAS_FIXED_3POINT
 #endif
 
-
 /**
  * Buzzer/Speaker
  */
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 1cb946f99dc88c6c1fe59dbf01328f77c6e20acc..58c284746baf6698bff6f62f93a338be40e7d101 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -294,19 +294,19 @@
 #elif defined(HAVE_L6470DRIVER)
   #error "HAVE_L6470DRIVER is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
 #elif defined(X_IS_TMC) || defined(X2_IS_TMC) || defined(Y_IS_TMC) || defined(Y2_IS_TMC) || defined(Z_IS_TMC) || defined(Z2_IS_TMC) || defined(Z3_IS_TMC) \
-   || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC)
+   || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC) || defined(E6_IS_TMC) || defined(E7_IS_TMC)
   #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
 #elif defined(X_IS_TMC26X) || defined(X2_IS_TMC26X) || defined(Y_IS_TMC26X) || defined(Y2_IS_TMC26X) || defined(Z_IS_TMC26X) || defined(Z2_IS_TMC26X) || defined(Z3_IS_TMC26X) \
-   || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X)
+   || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X) || defined(E6_IS_TMC26X) || defined(E7_IS_TMC26X)
   #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
 #elif defined(X_IS_TMC2130) || defined(X2_IS_TMC2130) || defined(Y_IS_TMC2130) || defined(Y2_IS_TMC2130) || defined(Z_IS_TMC2130) || defined(Z2_IS_TMC2130) || defined(Z3_IS_TMC2130) \
-   || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130)
+   || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130) || defined(E6_IS_TMC2130) || defined(E7_IS_TMC2130)
   #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130. Please update your Configuration.h."
 #elif defined(X_IS_TMC2208) || defined(X2_IS_TMC2208) || defined(Y_IS_TMC2208) || defined(Y2_IS_TMC2208) || defined(Z_IS_TMC2208) || defined(Z2_IS_TMC2208) || defined(Z3_IS_TMC2208) \
-   || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208)
+   || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208) || defined(E6_IS_TMC2208) || defined(E7_IS_TMC2208)
   #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208. Please update your Configuration.h."
 #elif defined(X_IS_L6470) || defined(X2_IS_L6470) || defined(Y_IS_L6470) || defined(Y2_IS_L6470) || defined(Z_IS_L6470) || defined(Z2_IS_L6470) || defined(Z3_IS_L6470) \
-   || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470)
+   || defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470) || defined(E6_IS_L6470) || defined(E7_IS_L6470)
   #error "[AXIS]_IS_L6470 is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
 #elif defined(AUTOMATIC_CURRENT_CONTROL)
   #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS. Please update your configuration."
@@ -752,8 +752,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
  */
 #if EXTRUDERS > 1
 
-  #if EXTRUDERS > 6
-    #error "Marlin supports a maximum of 6 EXTRUDERS."
+  #if EXTRUDERS > 8
+    #error "Marlin supports a maximum of 8 EXTRUDERS."
   #endif
 
   #if ENABLED(HEATERS_PARALLEL)
@@ -1494,6 +1494,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
   #error "TEMP_SENSOR_4 1000 requires HOTEND4_PULLUP_RESISTOR_OHMS, HOTEND4_RESISTANCE_25C_OHMS and HOTEND4_BETA in Configuration_adv.h."
 #elif ENABLED(HEATER_5_USER_THERMISTOR) && !(defined(HOTEND5_PULLUP_RESISTOR_OHMS) && defined(HOTEND5_RESISTANCE_25C_OHMS) && defined(HOTEND5_BETA))
   #error "TEMP_SENSOR_5 1000 requires HOTEND5_PULLUP_RESISTOR_OHMS, HOTEND5_RESISTANCE_25C_OHMS and HOTEND5_BETA in Configuration_adv.h."
+#elif ENABLED(HEATER_6_USER_THERMISTOR) && !(defined(HOTEND6_PULLUP_RESISTOR_OHMS) && defined(HOTEND6_RESISTANCE_25C_OHMS) && defined(HOTEND6_BETA))
+  #error "TEMP_SENSOR_6 1000 requires HOTEND6_PULLUP_RESISTOR_OHMS, HOTEND6_RESISTANCE_25C_OHMS and HOTEND6_BETA in Configuration_adv.h."
+#elif ENABLED(HEATER_7_USER_THERMISTOR) && !(defined(HOTEND7_PULLUP_RESISTOR_OHMS) && defined(HOTEND7_RESISTANCE_25C_OHMS) && defined(HOTEND7_BETA))
+  #error "TEMP_SENSOR_7 1000 requires HOTEND7_PULLUP_RESISTOR_OHMS, HOTEND7_RESISTANCE_25C_OHMS and HOTEND7_BETA in Configuration_adv.h."
 #elif ENABLED(HEATER_BED_USER_THERMISTOR) && !(defined(BED_PULLUP_RESISTOR_OHMS) && defined(BED_RESISTANCE_25C_OHMS) && defined(BED_BETA))
   #error "TEMP_SENSOR_BED 1000 requires BED_PULLUP_RESISTOR_OHMS, BED_RESISTANCE_25C_OHMS and BED_BETA in Configuration_adv.h."
 #elif ENABLED(HEATER_CHAMBER_USER_THERMISTOR) && !(defined(CHAMBER_PULLUP_RESISTOR_OHMS) && defined(CHAMBER_RESISTANCE_25C_OHMS) && defined(CHAMBER_BETA))
@@ -1564,13 +1568,45 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
           #elif !PIN_EXISTS(TEMP_5)
             #error "TEMP_5_PIN not defined for this board."
           #endif
+          #if HOTENDS > 6
+            #if TEMP_SENSOR_6 == 0
+              #error "TEMP_SENSOR_6 is required with 6 HOTENDS."
+            #elif !HAS_HEATER_6
+              #error "HEATER_6_PIN not defined for this board."
+            #elif !PIN_EXISTS(TEMP_6)
+              #error "TEMP_6_PIN not defined for this board."
+            #endif
+            #if HOTENDS > 7
+              #if TEMP_SENSOR_7 == 0
+                #error "TEMP_SENSOR_7 is required with 7 HOTENDS."
+              #elif !HAS_HEATER_7
+                #error "HEATER_7_PIN not defined for this board."
+              #elif !PIN_EXISTS(TEMP_7)
+                #error "TEMP_7_PIN not defined for this board."
+              #endif
+            #elif TEMP_SENSOR_7 != 0
+              #error "TEMP_SENSOR_7 shouldn't be set with only 7 HOTENDS."
+            #endif
+          #elif TEMP_SENSOR_6 != 0
+            #error "TEMP_SENSOR_6 shouldn't be set with only 6 HOTENDS."
+          #elif TEMP_SENSOR_7 != 0
+            #error "TEMP_SENSOR_7 shouldn't be set with only 6 HOTENDS."
+          #endif
         #elif TEMP_SENSOR_5 != 0
           #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS."
+        #elif TEMP_SENSOR_6 != 0
+          #error "TEMP_SENSOR_6 shouldn't be set with only 5 HOTENDS."
+        #elif TEMP_SENSOR_7 != 0
+          #error "TEMP_SENSOR_7 shouldn't be set with only 5 HOTENDS."
         #endif
       #elif TEMP_SENSOR_4 != 0
         #error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS."
       #elif TEMP_SENSOR_5 != 0
         #error "TEMP_SENSOR_5 shouldn't be set with only 4 HOTENDS."
+      #elif TEMP_SENSOR_6 != 0
+        #error "TEMP_SENSOR_6 shouldn't be set with only 4 HOTENDS."
+      #elif TEMP_SENSOR_7 != 0
+        #error "TEMP_SENSOR_7 shouldn't be set with only 4 HOTENDS."
       #endif
     #elif TEMP_SENSOR_3 != 0
       #error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS."
@@ -1578,6 +1614,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
       #error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS."
     #elif TEMP_SENSOR_5 != 0
       #error "TEMP_SENSOR_5 shouldn't be set with only 3 HOTENDS."
+    #elif TEMP_SENSOR_6 != 0
+      #error "TEMP_SENSOR_6 shouldn't be set with only 3 HOTENDS."
+    #elif TEMP_SENSOR_7 != 0
+      #error "TEMP_SENSOR_7 shouldn't be set with only 3 HOTENDS."
     #endif
   #elif TEMP_SENSOR_2 != 0
     #error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS."
@@ -1587,6 +1627,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
     #error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS."
   #elif TEMP_SENSOR_5 != 0
     #error "TEMP_SENSOR_5 shouldn't be set with only 2 HOTENDS."
+  #elif TEMP_SENSOR_6 != 0
+    #error "TEMP_SENSOR_6 shouldn't be set with only 2 HOTENDS."
+  #elif TEMP_SENSOR_7 != 0
+    #error "TEMP_SENSOR_7 shouldn't be set with only 2 HOTENDS."
   #endif
 #elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT)
   #error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND."
@@ -1598,6 +1642,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
   #error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND."
 #elif TEMP_SENSOR_5 != 0
   #error "TEMP_SENSOR_5 shouldn't be set with only 1 HOTEND."
+#elif TEMP_SENSOR_6 != 0
+  #error "TEMP_SENSOR_6 shouldn't be set with only 1 HOTEND."
+#elif TEMP_SENSOR_7 != 0
+  #error "TEMP_SENSOR_7 shouldn't be set with only 1 HOTEND."
 #endif
 
 #if TEMP_SENSOR_PROBE
@@ -1680,6 +1728,16 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
               #if !(PIN_EXISTS(E5_STEP, E5_DIR) && HAS_E5_ENABLE)
                 #error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
               #endif
+              #if E_STEPPERS > 6
+                #if !(PIN_EXISTS(E6_STEP, E6_DIR) && HAS_E6_ENABLE)
+                  #error "E6_STEP_PIN, E6_DIR_PIN, or E6_ENABLE_PIN not defined for this board."
+                #endif
+                #if E_STEPPERS > 7
+                  #if !(PIN_EXISTS(E7_STEP, E7_DIR) && HAS_E7_ENABLE)
+                    #error "E7_STEP_PIN, E7_DIR_PIN, or E7_ENABLE_PIN not defined for this board."
+                  #endif
+                #endif // E_STEPPERS > 7
+              #endif // E_STEPPERS > 6
             #endif // E_STEPPERS > 5
           #endif // E_STEPPERS > 4
         #endif // E_STEPPERS > 3
@@ -2008,6 +2066,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
   #error "An SPI driven TMC driver on E4 requires E4_CS_PIN."
 #elif INVALID_TMC_SPI(E5)
   #error "An SPI driven TMC driver on E5 requires E5_CS_PIN."
+#elif INVALID_TMC_SPI(E6)
+  #error "An SPI driven TMC driver on E6 requires E6_CS_PIN."
+#elif INVALID_TMC_SPI(E7)
+  #error "An SPI driven TMC driver on E7 requires E7_CS_PIN."
 #endif
 #undef INVALID_TMC_SPI
 
@@ -2041,6 +2103,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
   #error "TMC2208 or TMC2209 on E4 requires E4_HARDWARE_SERIAL or E4_SERIAL_(RX|TX)_PIN."
 #elif INVALID_TMC_UART(E5)
   #error "TMC2208 or TMC2209 on E5 requires E5_HARDWARE_SERIAL or E5_SERIAL_(RX|TX)_PIN."
+#elif INVALID_TMC_UART(E6)
+  #error "TMC2208 or TMC2209 on E6 requires E6_HARDWARE_SERIAL or E6_SERIAL_(RX|TX)_PIN."
+#elif INVALID_TMC_UART(E7)
+  #error "TMC2208 or TMC2209 on E7 requires E7_HARDWARE_SERIAL or E7_SERIAL_(RX|TX)_PIN."
 #endif
 #undef INVALID_TMC_UART
 
@@ -2192,7 +2258,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
     || (IN_CHAIN(Z3) && !PIN_EXISTS(Z3_CS)) || (IN_CHAIN(E0) && !PIN_EXISTS(E0_CS)) \
     || (IN_CHAIN(E1) && !PIN_EXISTS(E1_CS)) || (IN_CHAIN(E2) && !PIN_EXISTS(E2_CS)) \
     || (IN_CHAIN(E3) && !PIN_EXISTS(E3_CS)) || (IN_CHAIN(E4) && !PIN_EXISTS(E4_CS)) \
-    || (IN_CHAIN(E5) && !PIN_EXISTS(E5_CS))
+    || (IN_CHAIN(E5) && !PIN_EXISTS(E5_CS)) || (IN_CHAIN(E6) && !PIN_EXISTS(E6_CS)) \
+    || (IN_CHAIN(E7) && !PIN_EXISTS(E7_CS))
     #error "All chained TMC drivers need a CS pin."
   #else
     #if IN_CHAIN(X)
@@ -2221,6 +2288,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
       #define CS_COMPARE E4_CS_PIN
     #elif IN_CHAIN(E5)
       #define CS_COMPARE E5_CS_PIN
+    #elif IN_CHAIN(E6)
+      #define CS_COMPARE E6_CS_PIN
+    #elif IN_CHAIN(E7)
+      #define CS_COMPARE E7_CS_PIN
     #endif
     #if  (IN_CHAIN(X)  && X_CS_PIN  != CS_COMPARE) || (IN_CHAIN(Y)  && Y_CS_PIN  != CS_COMPARE) \
       || (IN_CHAIN(Z)  && Z_CS_PIN  != CS_COMPARE) || (IN_CHAIN(X2) && X2_CS_PIN != CS_COMPARE) \
@@ -2228,7 +2299,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
       || (IN_CHAIN(Z3) && Z3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E0) && E0_CS_PIN != CS_COMPARE) \
       || (IN_CHAIN(E1) && E1_CS_PIN != CS_COMPARE) || (IN_CHAIN(E2) && E2_CS_PIN != CS_COMPARE) \
       || (IN_CHAIN(E3) && E3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E4) && E4_CS_PIN != CS_COMPARE) \
-      || (IN_CHAIN(E5) && E5_CS_PIN != CS_COMPARE)
+      || (IN_CHAIN(E5) && E5_CS_PIN != CS_COMPARE) || (IN_CHAIN(E6) && E6_CS_PIN != CS_COMPARE) \
+      || (IN_CHAIN(E7) && E7_CS_PIN != CS_COMPARE)
       #error "All chained TMC drivers must use the same CS pin."
     #endif
   #endif
@@ -2521,12 +2593,26 @@ static_assert(   _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
       #error "SPINDLE_LASER_PWM_PIN conflicts with E4_AUTO_FAN_PIN."
     #elif _PIN_CONFLICT(E5_AUTO_FAN)
       #error "SPINDLE_LASER_PWM_PIN conflicts with E5_AUTO_FAN_PIN."
+    #elif _PIN_CONFLICT(E6_AUTO_FAN)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with E6_AUTO_FAN_PIN."
+    #elif _PIN_CONFLICT(E7_AUTO_FAN)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with E7_AUTO_FAN_PIN."
     #elif _PIN_CONFLICT(FAN)
       #error "SPINDLE_LASER_PWM_PIN conflicts with FAN_PIN."
     #elif _PIN_CONFLICT(FAN1)
       #error "SPINDLE_LASER_PWM_PIN conflicts with FAN1_PIN."
     #elif _PIN_CONFLICT(FAN2)
       #error "SPINDLE_LASER_PWM_PIN conflicts with FAN2_PIN."
+    #elif _PIN_CONFLICT(FAN3)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with FAN3_PIN."
+    #elif _PIN_CONFLICT(FAN4)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with FAN4_PIN."
+    #elif _PIN_CONFLICT(FAN5)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with FAN5_PIN."
+    #elif _PIN_CONFLICT(FAN6)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with FAN6_PIN."
+    #elif _PIN_CONFLICT(FAN7)
+      #error "SPINDLE_LASER_PWM_PIN conflicts with FAN7_PIN."
     #elif _PIN_CONFLICT(CONTROLLERFAN)
       #error "SPINDLE_LASER_PWM_PIN conflicts with CONTROLLERFAN_PIN."
     #elif _PIN_CONFLICT(MOTOR_CURRENT_PWM_XY)
diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
index d6ce8bfdd637c8db60ad53809e680f252bb5e70d..bf57f1dfc2597fc28b4b0b44bf542dc05536b287 100644
--- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
+++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
@@ -1092,6 +1092,21 @@ void MarlinUI::draw_status_screen() {
           #if HAS_FAN2
             || thermalManager.fan_speed[2]
           #endif
+          #if HAS_FAN3
+            || thermalManager.fan_speed[3]
+          #endif
+          #if HAS_FAN4
+            || thermalManager.fan_speed[4]
+          #endif
+          #if HAS_FAN5
+            || thermalManager.fan_speed[5]
+          #endif
+          #if HAS_FAN6
+            || thermalManager.fan_speed[6]
+          #endif
+          #if HAS_FAN7
+            || thermalManager.fan_speed[7]
+          #endif
         ) leds |= LED_C;
       #endif // FAN_COUNT > 0
 
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp
index 253017493f2848aa99896004ba13d08d771dfc8e..8c8133f22b52e64e38a9d4956167473f7eb31274 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.cpp
+++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp
@@ -912,7 +912,7 @@ namespace ExtUI {
     #endif
       {
         #if HOTENDS
-          static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
+          static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
           const int16_t e = heater - H0;
           thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
         #endif
@@ -924,7 +924,7 @@ namespace ExtUI {
       value *= TOUCH_UI_LCD_TEMP_SCALING;
     #endif
     #if HOTENDS
-      constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
+      constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
       const int16_t e = extruder - E0;
       enableHeater(extruder);
       thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h
index 2180587a1e185e11b488e50d7f0b742546b7c647..536da132c05a32907389d627e75969ef1c36a786 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.h
+++ b/Marlin/src/lcd/extensible_ui/ui_api.h
@@ -55,7 +55,7 @@ namespace ExtUI {
   enum axis_t     : uint8_t { X, Y, Z };
   enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5 };
   enum heater_t   : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER };
-  enum fan_t      : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5 };
+  enum fan_t      : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 };
   enum result_t   : uint8_t { PID_BAD_EXTRUDER_NUM, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE };
 
   constexpr uint8_t extruderCount = EXTRUDERS;
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index 4957dc102ea16e610d619c8883f0f0ea6b33b845..c4fbbe1be65d0daf5dac2b215208c52183b49cd3 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -93,7 +93,7 @@ namespace Language_an {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Boquilla ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Base");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ixoriador");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ixoriador =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ixoriador ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxo");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Fluxo ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index 93027da7fefb3a6971343c96ecce6625c45c08ae..19e0b90e52fea3e3a3d1893a98efe4b069094f44 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -83,7 +83,7 @@ namespace Language_bg {
   PROGMEM Language_Str MSG_NOZZLE_N                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
   PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" Легло");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Вентилатор");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Вентилатор =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Вентилатор ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Поток");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Поток ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Управление");
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index a1e134622f482053266e674a4c5bdf2f8e1ac268..d1cc0cf7bc0764d412fa52a827e6b2a8c3ce51c9 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -94,7 +94,7 @@ namespace Language_ca {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Nozzle ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Llit");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. Ventilador");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. Ventilador =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. Ventilador ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flux");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flux ~");
   PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VViatge min");
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index 1be6289657805eb0a608ba1e032acd546b4f561b..6703d300dee92e03c80ddef945cd7b2d020e959e 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -251,10 +251,10 @@ namespace Language_cz {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Podložka");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Komora");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Rychlost vent.");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Rychlost vent. =");
-  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Ulož. vent. =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Rychlost vent. ~");
+  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Ulož. vent. ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Rychlost ex. vent.");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Rychlost ex. vent. =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Rychlost ex. vent. ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Průtok");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Průtok ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ovládaní");
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index 8e25498f48c3994faddd476ef6d5cd74b72e49c0..67baf9d2178cd7c9bbe9e1ddd5bf332dea511523 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -84,7 +84,7 @@ namespace Language_da {
 
   PROGMEM Language_Str MSG_BED                             = _UxGT("Plade");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Blæser hastighed");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Blæser hastighed =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Blæser hastighed ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrol");
   PROGMEM Language_Str MSG_MIN                             = _UxGT(" \002 Min");
   PROGMEM Language_Str MSG_MAX                             = _UxGT(" \002 Max");
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 1ec9599dbd8975e191fabc98d6d3fb976d22b48e..6ebae11576ffcc90007c118587bec14b8e4713a1 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -91,7 +91,7 @@ namespace Language_el {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Ακροφύσιο ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Κλίνη");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ταχύτητα ανεμιστήρα");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ταχύτητα ανεμιστήρα =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ταχύτητα ανεμιστήρα ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Ροή");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Ροή ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Έλεγχος");
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
index c5be7087a96865d56aacec23df6c34d147248f2d..3e6e07f0bbbf5d491e823b2c878bc79e95fea7f5 100644
--- a/Marlin/src/lcd/language/language_el_gr.h
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -92,7 +92,7 @@ namespace Language_el_gr {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Ακροφύσιο ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Κλίνη");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ταχύτητα ανεμιστήρα");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ταχύτητα ανεμιστήρα =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ταχύτητα ανεμιστήρα ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Ροή");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Ροή ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Έλεγχος");
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 188098e5977843d70e87805aba4b1bb931271e79..363aff4820da7d5f46ec502924991b6f98b2af1d 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -242,10 +242,10 @@ namespace Language_en {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Bed");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Enclosure");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan Speed");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan Speed =");
-  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Stored Fan =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan Speed ~");
+  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Stored Fan ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra Fan Speed");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra Fan Speed =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra Fan Speed ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flow");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flow ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index ff9a8d2be7d34127844ef32a22eac2e981dbd2ea..83ec5e43315ed204c4009af96193ea41fed2e5b7 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -240,9 +240,9 @@ namespace Language_es {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Cama");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Recinto");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ventilador");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ventilador =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Ventilador ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Vel. Ext. ventilador");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Vel. Ext. ventilador =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Vel. Ext. ventilador ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flujo");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flujo ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index fe88823f4589826d59ed35b059e676e0404ba396..1ef40626d6f31af782bad554891cd98d4210b26e 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -147,9 +147,9 @@ namespace Language_eu {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Pita ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Ohea");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Haizagailu abiadura");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Haizagailu abiadura =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Haizagailu abiadura ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Haiz.gehig. abiadura");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Haiz.gehig. abiadura =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Haiz.gehig. abiadura ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxua");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Fluxua ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrola");
diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h
index 93b9f0dff2d3a5fcfd92d04c01d5ed5e0d864a9e..a9a65709a845a04af4ddf0eb0f90565d1ec75236 100644
--- a/Marlin/src/lcd/language/language_fi.h
+++ b/Marlin/src/lcd/language/language_fi.h
@@ -79,7 +79,7 @@ namespace Language_fi {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Suutin ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Alusta");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Tuul. nopeus");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Tuul. nopeus =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Tuul. nopeus ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Virtaus");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Virtaus ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrolli");
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index 2506fd89dc1cbc9397516681d619c6e68075257b..2d47744e49defac739867dfc650e6cc5ea98fd3f 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -235,10 +235,10 @@ namespace Language_fr {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Lit");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Caisson");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vit.  ventil.  "); // 15 car. max
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vit.  ventil. =");
-  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Vit.  enreg.  =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vit.  ventil. ~");
+  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Vit.  enreg.  ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra ventil.  ");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra ventil. =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra ventil. ~");
 
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flux");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flux ~");
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 7af854ea7563818af9609d2b6ae76155e31f907d..ea17a076b6a9ce7260cb36d3cc223235fd155e6d 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -240,10 +240,10 @@ namespace Language_it {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Piatto");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Camera");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. ventola");     // Max 15 characters
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. ventola =");   // Max 15 characters
-  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Ventola mem. =");   // Max 15 characters
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. ventola ~");   // Max 15 characters
+  PROGMEM Language_Str MSG_STORED_FAN_N                    = _UxGT("Ventola mem. ~");   // Max 15 characters
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra vel.vent.");  // Max 15 characters
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra v.vent. =");  // Max 15 characters
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Extra v.vent. ~");  // Max 15 characters
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flusso");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flusso ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controllo");
diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h
index d736d415f984481b7ba7b9657abefa1347a7335e..7d33ccc5086e9dfb9d502fd63dfab82ff87a096f 100644
--- a/Marlin/src/lcd/language/language_ko_KR.h
+++ b/Marlin/src/lcd/language/language_ko_KR.h
@@ -77,9 +77,9 @@ namespace Language_ko_KR {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("노즐 ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("베드");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("펜 속도");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("펜 속도 =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("펜 속도 ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("엑스트라 펜 속도");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("엑스트라 펜 속도 =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("엑스트라 펜 속도 ~");
   PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("온도");
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("동작");
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("설정 저장하기");
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index 7a26e1f24f6bcc965017247cbb99ccf36292b904..1d9955c811f44a2130026443e747c6da5cd41213 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -99,7 +99,7 @@ namespace Language_nl {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Nozzle ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Bed");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan snelheid");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan snelheid =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan snelheid ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flow");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Flow ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index 41559b9d845fa31700e22dc605ef8729233048a1..b9bb9541e788a40ba46fa4a0bd0067f807347f76 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -240,9 +240,9 @@ namespace Language_pl {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Stół");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Obudowa");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Obroty wiatraka");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Obroty wiatraka =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Obroty wiatraka ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Obroty dodatkowego wiatraka");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Obroty dodatkowego wiatraka =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Obroty dodatkowego wiatraka ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Przepływ");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Przepływ ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ustawienia");
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index ce2fbd944e90cb37c3edbf7207192fc1b7465a31..b96839e1f644639a9baf54935e7da28360e1155c 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -89,7 +89,7 @@ namespace Language_pt {
   PROGMEM Language_Str MSG_NOZZLE_N                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
   PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" Base");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. ventoinha");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. ventoinha =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. ventoinha ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxo");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Fluxo ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controlo");
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
index 108af5a5add4e4467626ecf76aa5057bd2ecbdb6..93451bc9712e9a12bc5d9ed9f7202d3c8fd570c6 100644
--- a/Marlin/src/lcd/language/language_pt_br.h
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -207,9 +207,9 @@ namespace Language_pt_br {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Bocal ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Mesa");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. Ventoinha");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. Ventoinha =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Vel. Ventoinha ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("+Vel. Ventoinha");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("+Vel. Ventoinha =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("+Vel. Ventoinha ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Vazão");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Vazão ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controle");
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index e701408875b365c099537eae36b9eee925c6d67d..348751949835cd79dc025fced69cf87a1e8b4aec 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -243,9 +243,9 @@ namespace Language_sk {
   PROGMEM Language_Str MSG_BED                             = _UxGT("Podložka");
   PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Komora");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Rýchlosť vent.");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Rýchlosť vent. =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Rýchlosť vent. ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Rýchlosť ex. vent.");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Rýchlosť ex. vent. =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Rýchlosť ex. vent. ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Prietok");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Prietok ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ovládanie");
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index e683e224ab980daf15cbcde48fb3cc40097232b7..e68b62228d243c0b1ae629b5ad0f18aeac3b6b52 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -210,9 +210,9 @@ namespace Language_tr {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Nozul ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Tabla");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan Hızı");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan Hızı =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Fan Hızı ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Ekstra Fan Hızı");
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Ekstra Fan Hızı =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Ekstra Fan Hızı ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Akış");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Akış ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrol");
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index 3afe4e96eee6c271e0611630818e234a5f42c4c0..78e0cf7cfb210793b3b058e13bae56bd14eb096d 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -92,7 +92,7 @@ namespace Language_uk {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Сопло ~");
   PROGMEM Language_Str MSG_BED                             = _UxGT("Стіл");
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Охолодж.");
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Охолодж. =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Охолодж. ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Потік");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Потік ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Налаштування");
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index c12e0e2f6bd4e82a0cdb3b72a85a6c590bb7c03e..6a42933c19318d524704f3f12f599f85fc5b8341 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -210,9 +210,9 @@ namespace Language_vi {
   PROGMEM Language_Str MSG_NOZZLE_N                        = _UxGT("Đầu phun ~");                           // Nozzle
   PROGMEM Language_Str MSG_BED                             = _UxGT("Bàn");                                  // bed
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Tốc độ quạt");                          // fan speed
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Tốc độ quạt =");                        // fan speed
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("Tốc độ quạt ~");                        // fan speed
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Tốc độ quạt phụ");                      // Extra fan speed
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Tốc độ quạt phụ =");                    // Extra fan speed
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("Tốc độ quạt phụ ~");                    // Extra fan speed
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("Lưu Lượng");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("Lưu Lượng ~");
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Điều khiển");                           // Control
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index e15b0188430f58bfe337a607a33a827ab2b4ff8a..9a52ac2f8299f009909ef7f2abf45d8fb7393684 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -187,9 +187,9 @@ namespace Language_zh_CN {
   PROGMEM Language_Str MSG_NOZZLE_N                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ~");     //"Nozzle" 噴嘴
   PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" 热床");     //"Bed"
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("风扇速率");     //"Fan speed"
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("风扇速率 =");     //"Fan speed"
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("风扇速率 ~");     //"Fan speed"
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("额外风扇速率");     // "Extra fan speed"
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("额外风扇速率 =");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("额外风扇速率 ~");     // "Extra fan speed"
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("挤出速率");     //"Flow"
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("挤出速率 ~");     //"Flow"
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("控制");     //"Control"
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 7d386949114fb8d5bf57f2f977d741dac09ddda0..92343b3efaf8d5e53744aca25f9e45c670dbda4b 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -187,9 +187,9 @@ namespace Language_zh_TW {
   PROGMEM Language_Str MSG_NOZZLE_N                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
   PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" 熱床");     //"Bed"
   PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("風扇速率");     //"Fan speed"
-  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("風扇速率 =");
+  PROGMEM Language_Str MSG_FAN_SPEED_N                     = _UxGT("風扇速率 ~");
   PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("額外風扇速率");     // "Extra fan speed"
-  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("額外風扇速率 =");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N               = _UxGT("額外風扇速率 ~");
   PROGMEM Language_Str MSG_FLOW                            = _UxGT("擠出速率");
   PROGMEM Language_Str MSG_FLOW_N                          = _UxGT("擠出速率 ~");     //"Flow"
   PROGMEM Language_Str MSG_CONTROL                         = _UxGT("控制");     //"Control"
diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h
index de8d24e1fdda1b2987b68433fd83a4586b862284..5c7fc773062dac17d86dbd86a9d60040d264feae 100644
--- a/Marlin/src/lcd/menu/menu.h
+++ b/Marlin/src/lcd/menu/menu.h
@@ -30,7 +30,7 @@
 extern int8_t encoderLine, encoderTopLine, screen_items;
 
 #if HOTENDS
-  constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
+  constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
 #endif
 
 void scroll_screen(const uint8_t limit, const bool is_menu);
diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index 9b59952b49f1f6326048ca1e6337ced2448e1a95..e24b415155a2217b3bd985a7e69167d413b27009 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -245,6 +245,12 @@ void menu_cancelobject();
           DEFINE_PIDTEMP_FUNCS(4);
           #if HOTENDS > 5
             DEFINE_PIDTEMP_FUNCS(5);
+            #if HOTENDS > 6
+              DEFINE_PIDTEMP_FUNCS(6);
+              #if HOTENDS > 7
+                DEFINE_PIDTEMP_FUNCS(7);
+              #endif // HOTENDS > 7
+            #endif // HOTENDS > 6
           #endif // HOTENDS > 5
         #endif // HOTENDS > 4
       #endif // HOTENDS > 3
@@ -330,6 +336,12 @@ void menu_cancelobject();
             PID_EDIT_MENU_ITEMS(4);
             #if HOTENDS > 5
               PID_EDIT_MENU_ITEMS(5);
+              #if HOTENDS > 6
+                PID_EDIT_MENU_ITEMS(6);
+                #if HOTENDS > 7
+                  PID_EDIT_MENU_ITEMS(7);
+                #endif // HOTENDS > 7
+              #endif // HOTENDS > 6
             #endif // HOTENDS > 5
           #endif // HOTENDS > 4
         #endif // HOTENDS > 3
diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp
index 71467093ecde5d16b42da351f7cd08b3da096a07..5bbc8ce7dc930b8a24176681fa7922e0e695ffd3 100644
--- a/Marlin/src/lcd/menu/menu_info.cpp
+++ b/Marlin/src/lcd/menu/menu_info.cpp
@@ -152,6 +152,24 @@ void menu_info_thermistors() {
     VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
   #endif
 
+  #if TEMP_SENSOR_6 != 0
+    #undef THERMISTOR_ID
+    #define THERMISTOR_ID TEMP_SENSOR_6
+    #include "../thermistornames.h"
+    STATIC_ITEM_P(PSTR(LCD_STR_E6 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_6_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_6_MAXTEMP), SS_LEFT);
+  #endif
+
+  #if TEMP_SENSOR_7 != 0
+    #undef THERMISTOR_ID
+    #define THERMISTOR_ID TEMP_SENSOR_7
+    #include "../thermistornames.h"
+    STATIC_ITEM_P(PSTR(LCD_STR_E7 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_7_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_7_MAXTEMP), SS_LEFT);
+  #endif
+
   #if EXTRUDERS
   {
     STATIC_ITEM(
diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp
index 2713f9fe786677cc96ea7b03322eb659ca98270a..d2483b9d3f4ff24565287d9890255c2560a2ae83 100644
--- a/Marlin/src/lcd/menu/menu_temperature.cpp
+++ b/Marlin/src/lcd/menu/menu_temperature.cpp
@@ -198,33 +198,72 @@ void menu_temperature() {
   // Fan Speed:
   //
   #if FAN_COUNT > 0
+
+    auto on_fan_update = []{
+      thermalManager.set_fan_speed(MenuItemBase::itemIndex, editable.uint8);
+    };
+
+    #if HAS_FAN1 || HAS_FAN2 || HAS_FAN3 || HAS_FAN4 || HAS_FAN5 || HAS_FAN6 || HAS_FAN7
+      auto fan_edit_items = [&](const uint8_t f) {
+        editable.uint8 = thermalManager.fan_speed[f];
+        EDIT_ITEM_FAST_N(percent, f, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, on_fan_update);
+        #if ENABLED(EXTRA_FAN_SPEED)
+          EDIT_ITEM_FAST_N(percent, f, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[f], 3, 255);
+        #endif
+      };
+    #endif
+
+    #define SNFAN(N) (ENABLED(SINGLENOZZLE) && !HAS_FAN##N && EXTRUDERS > N)
+    #if SNFAN(1) || SNFAN(2) || SNFAN(3) || SNFAN(4) || SNFAN(5) || SNFAN(6) || SNFAN(7)
+      auto singlenozzle_item = [&](const uint8_t f) {
+        editable.uint8 = thermalManager.fan_speed[f];
+        EDIT_ITEM_FAST_N(percent, f, MSG_STORED_FAN_N, &editable.uint8, 0, 255, on_fan_update);
+      };
+    #endif
+
     #if HAS_FAN0
       editable.uint8 = thermalManager.fan_speed[0];
-      EDIT_ITEM_FAST_N(percent, 1, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(0, editable.uint8); });
+      EDIT_ITEM_FAST_N(percent, 0, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, on_fan_update);
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 1, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
+        EDIT_ITEM_FAST_N(percent, 0, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
       #endif
     #endif
     #if HAS_FAN1
-      editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST_N(percent, 2, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(1, editable.uint8); });
-      #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 2, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[1], 3, 255);
-      #endif
-    #elif ENABLED(SINGLENOZZLE) && EXTRUDERS > 1
-      editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST_N(percent, 2, MSG_STORED_FAN_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(1, editable.uint8); });
+      fan_edit_items(1);
+    #elif SNFAN(1)
+      singlenozzle_item(1);
     #endif
     #if HAS_FAN2
-      editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST_N(percent, 3, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(2, editable.uint8); });
-      #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 3, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[2], 3, 255);
-      #endif
-    #elif ENABLED(SINGLENOZZLE) && EXTRUDERS > 2
-      editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST_N(percent, 3, MSG_STORED_FAN_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(2, editable.uint8); });
+      fan_edit_items(2);
+    #elif SNFAN(2)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN3
+      fan_edit_items(3);
+    #elif SNFAN(3)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN4
+      fan_edit_items(4);
+    #elif SNFAN(4)
+      singlenozzle_item(1);
     #endif
+    #if HAS_FAN5
+      fan_edit_items(5);
+    #elif SNFAN(5)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN6
+      fan_edit_items(6);
+    #elif SNFAN(6)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN7
+      fan_edit_items(7);
+    #elif SNFAN(7)
+      singlenozzle_item(1);
+    #endif
+
   #endif // FAN_COUNT > 0
 
   #if HAS_TEMP_HOTEND
@@ -232,7 +271,7 @@ void menu_temperature() {
     //
     // Preheat for Material 1 and 2
     //
-    #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_5 != 0 || HAS_HEATED_BED
+    #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_5 != 0 || TEMP_SENSOR_6 != 0 || TEMP_SENSOR_7 != 0 || HAS_HEATED_BED
       SUBMENU(MSG_PREHEAT_1, menu_preheat_m1);
       SUBMENU(MSG_PREHEAT_2, menu_preheat_m2);
     #else
diff --git a/Marlin/src/lcd/menu/menu_tmc.cpp b/Marlin/src/lcd/menu/menu_tmc.cpp
index 054b4e61f3053a199d1f6d250284cd48e276bbed..ff6a50ccfc5cf4db5faee3e8f13d5bb6f7716293 100644
--- a/Marlin/src/lcd/menu/menu_tmc.cpp
+++ b/Marlin/src/lcd/menu/menu_tmc.cpp
@@ -79,6 +79,12 @@ void menu_tmc_current() {
   #if AXIS_IS_TMC(E5)
     TMC_EDIT_STORED_I_RMS(E5, LCD_STR_E5);
   #endif
+  #if AXIS_IS_TMC(E6)
+    TMC_EDIT_STORED_I_RMS(E6, LCD_STR_E6);
+  #endif
+  #if AXIS_IS_TMC(E7)
+    TMC_EDIT_STORED_I_RMS(E7, LCD_STR_E7);
+  #endif
   END_MENU();
 }
 
@@ -131,6 +137,12 @@ void menu_tmc_current() {
     #if AXIS_HAS_STEALTHCHOP(E5)
       TMC_EDIT_STORED_HYBRID_THRS(E5, LCD_STR_E5);
     #endif
+    #if AXIS_HAS_STEALTHCHOP(E6)
+      TMC_EDIT_STORED_HYBRID_THRS(E6, LCD_STR_E6);
+    #endif
+    #if AXIS_HAS_STEALTHCHOP(E7)
+      TMC_EDIT_STORED_HYBRID_THRS(E7, LCD_STR_E7);
+    #endif
     END_MENU();
   }
 
@@ -210,6 +222,12 @@ void menu_tmc_current() {
     #if AXIS_HAS_STEALTHCHOP(E5)
       TMC_EDIT_STEP_MODE(E5, LCD_STR_E5);
     #endif
+    #if AXIS_HAS_STEALTHCHOP(E6)
+      TMC_EDIT_STEP_MODE(E6, LCD_STR_E6);
+    #endif
+    #if AXIS_HAS_STEALTHCHOP(E7)
+      TMC_EDIT_STEP_MODE(E7, LCD_STR_E7);
+    #endif
     END_MENU();
   }
 
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index 1ece7f6ce52b14bd593c0615b07d463304828ef6..1610c2d5eb2c0b17a62430abba524218183fb9f7 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -147,33 +147,72 @@ void menu_tune() {
   // Fan Speed:
   //
   #if FAN_COUNT > 0
+
+    auto on_fan_update = []{
+      thermalManager.set_fan_speed(MenuItemBase::itemIndex, editable.uint8);
+    };
+
+    #if HAS_FAN1 || HAS_FAN2 || HAS_FAN3 || HAS_FAN4 || HAS_FAN5 || HAS_FAN6 || HAS_FAN7
+      auto fan_edit_items = [&](const uint8_t f) {
+        editable.uint8 = thermalManager.fan_speed[f];
+        EDIT_ITEM_FAST_N(percent, f, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, on_fan_update);
+        #if ENABLED(EXTRA_FAN_SPEED)
+          EDIT_ITEM_FAST_N(percent, f, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[f], 3, 255);
+        #endif
+      };
+    #endif
+
+    #define SNFAN(N) (ENABLED(SINGLENOZZLE) && !HAS_FAN##N && EXTRUDERS > N)
+    #if SNFAN(1) || SNFAN(2) || SNFAN(3) || SNFAN(4) || SNFAN(5) || SNFAN(6) || SNFAN(7)
+      auto singlenozzle_item = [&](const uint8_t f) {
+        editable.uint8 = thermalManager.fan_speed[f];
+        EDIT_ITEM_FAST_N(percent, f, MSG_STORED_FAN_N, &editable.uint8, 0, 255, on_fan_update);
+      };
+    #endif
+
     #if HAS_FAN0
       editable.uint8 = thermalManager.fan_speed[0];
-      EDIT_ITEM_FAST_N(percent, 1, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(0, editable.uint8); });
+      EDIT_ITEM_FAST_N(percent, 0, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, on_fan_update);
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 1, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
+        EDIT_ITEM_FAST_N(percent, 0, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
       #endif
     #endif
     #if HAS_FAN1
-      editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST_N(percent, 2, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(1, editable.uint8); });
-      #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 2, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[1], 3, 255);
-      #endif
-    #elif ENABLED(SINGLENOZZLE) && EXTRUDERS > 1
-      editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST_N(percent, 2, MSG_STORED_FAN_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(1, editable.uint8); });
+      fan_edit_items(1);
+    #elif SNFAN(1)
+      singlenozzle_item(1);
     #endif
     #if HAS_FAN2
-      editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST_N(percent, 3, MSG_FAN_SPEED_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(2, editable.uint8); });
-      #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST_N(percent, 3, MSG_EXTRA_FAN_SPEED_N, &thermalManager.new_fan_speed[2], 3, 255);
-      #endif
-    #elif ENABLED(SINGLENOZZLE) && EXTRUDERS > 2
-      editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST_N(percent, 3, MSG_STORED_FAN_N, &editable.uint8, 0, 255, []{ thermalManager.set_fan_speed(2, editable.uint8); });
+      fan_edit_items(2);
+    #elif SNFAN(2)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN3
+      fan_edit_items(3);
+    #elif SNFAN(3)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN4
+      fan_edit_items(4);
+    #elif SNFAN(4)
+      singlenozzle_item(1);
     #endif
+    #if HAS_FAN5
+      fan_edit_items(5);
+    #elif SNFAN(5)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN6
+      fan_edit_items(6);
+    #elif SNFAN(6)
+      singlenozzle_item(1);
+    #endif
+    #if HAS_FAN7
+      fan_edit_items(7);
+    #elif SNFAN(7)
+      singlenozzle_item(1);
+    #endif
+
   #endif // FAN_COUNT > 0
 
   //
diff --git a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp
index ebd648f2085d6da22cf569669fc71d7fa5b27188..cfa28586b61db63b682b0196035b00fd1db29654 100644
--- a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp
+++ b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp
@@ -39,7 +39,7 @@ L64XX_Marlin L64xxManager;
 
 void echo_yes_no(const bool yes) { serialprintPGM(yes ? PSTR(" YES") : PSTR(" NO ")); }
 
-char L64XX_Marlin::index_to_axis[MAX_L64XX][3] = { "X ", "Y ", "Z ", "X2", "Y2", "Z2", "Z3", "Z4", "E0", "E1", "E2", "E3", "E4", "E5" };
+char L64XX_Marlin::index_to_axis[MAX_L64XX][3] = { "X ", "Y ", "Z ", "X2", "Y2", "Z2", "Z3", "Z4", "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7" };
 
 #define DEBUG_OUT ENABLED(L6470_CHITCHAT)
 #include "../../core/debug_out.h"
@@ -69,6 +69,8 @@ uint8_t L64XX_Marlin::index_to_dir[MAX_L64XX] = { (INVERT_X_DIR),
                                                   (INVERT_E3_DIR),                        // 11 E3
                                                   (INVERT_E4_DIR),                        // 12 E4
                                                   (INVERT_E5_DIR),                        // 13 E5
+                                                  (INVERT_E6_DIR),                        // 14 E6
+                                                  (INVERT_E7_DIR)                         // 15 E7
                                                 };
 
 volatile uint8_t L64XX_Marlin::spi_abort = false;
diff --git a/Marlin/src/libs/L64XX/L64XX_Marlin.h b/Marlin/src/libs/L64XX/L64XX_Marlin.h
index 325f60d5fa595ee1dceccc3e93ab054dbd2cc497..9c233fdf03201c5263f409c6492c7b4a867a23b4 100644
--- a/Marlin/src/libs/L64XX/L64XX_Marlin.h
+++ b/Marlin/src/libs/L64XX/L64XX_Marlin.h
@@ -35,7 +35,7 @@
 #define dSPIN_STEP_CLOCK_REV dSPIN_STEP_CLOCK+1
 #define HAS_L64XX_EXTRUDER (AXIS_IS_L64XX(E0) || AXIS_IS_L64XX(E1) || AXIS_IS_L64XX(E2) || AXIS_IS_L64XX(E3) || AXIS_IS_L64XX(E4) || AXIS_IS_L64XX(E5))
 
-enum L64XX_axis_t : uint8_t { X, Y, Z, X2, Y2, Z2, Z3, Z4, E0, E1, E2, E3, E4, E5, MAX_L64XX };
+enum L64XX_axis_t : uint8_t { X, Y, Z, X2, Y2, Z2, Z3, Z4, E0, E1, E2, E3, E4, E5, E6, E7, MAX_L64XX };
 
 class L64XX_Marlin : public L64XXHelper {
 public:
diff --git a/Marlin/src/libs/softspi.h b/Marlin/src/libs/softspi.h
index 39d56b26f78b0cce54129d3d5b6cdca7d0f4eec6..5623496d9d53b8e94235e3cff0566e49fcbec923 100644
--- a/Marlin/src/libs/softspi.h
+++ b/Marlin/src/libs/softspi.h
@@ -66,7 +66,7 @@
      * @return value read
      */
     FORCE_INLINE static bool fastDigitalRead(uint8_t pin) {
-      return g_APinDescription[pin].pPort->PIO_PDSR & g_APinDescription[pin].ulPin;
+      return digitalRead(pin);
     }
 
     /**
@@ -75,10 +75,7 @@
      * @param[in] level value to write
      */
     FORCE_INLINE static void fastDigitalWrite(uint8_t pin, bool value) {
-      if (value)
-        g_APinDescription[pin].pPort->PIO_SODR = g_APinDescription[pin].ulPin;
-      else
-        g_APinDescription[pin].pPort->PIO_CODR = g_APinDescription[pin].ulPin;
+      digitalWrite(pin, value);
     }
 
   #endif // !CORE_TEENSY
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index f87ff8a5daf3649d48f5793172aba587535112d1..85b0b850b0f26e9dd176d82866b27d4fd3b5c193 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -1008,6 +1008,16 @@ void MarlinSettings::postprocess() {
                     #if AXIS_IS_TMC(E5)
                       tmc_stepper_current.E5 = stepperE5.getMilliamps();
                     #endif
+                    #if MAX_EXTRUDERS > 6
+                      #if AXIS_IS_TMC(E6)
+                        tmc_stepper_current.E6 = stepperE6.getMilliamps();
+                      #endif
+                      #if MAX_EXTRUDERS > 7
+                        #if AXIS_IS_TMC(E7)
+                          tmc_stepper_current.E7 = stepperE7.getMilliamps();
+                        #endif
+                      #endif // MAX_EXTRUDERS > 7
+                    #endif // MAX_EXTRUDERS > 6
                   #endif // MAX_EXTRUDERS > 5
                 #endif // MAX_EXTRUDERS > 4
               #endif // MAX_EXTRUDERS > 3
@@ -1074,6 +1084,16 @@ void MarlinSettings::postprocess() {
                     #if AXIS_HAS_STEALTHCHOP(E5)
                       tmc_hybrid_threshold.E5 = stepperE5.get_pwm_thrs();
                     #endif
+                    #if MAX_EXTRUDERS > 6
+                      #if AXIS_HAS_STEALTHCHOP(E6)
+                        tmc_hybrid_threshold.E6 = stepperE6.get_pwm_thrs();
+                      #endif
+                      #if MAX_EXTRUDERS > 7
+                        #if AXIS_HAS_STEALTHCHOP(E7)
+                          tmc_hybrid_threshold.E7 = stepperE7.get_pwm_thrs();
+                        #endif
+                      #endif // MAX_EXTRUDERS > 7
+                    #endif // MAX_EXTRUDERS > 6
                   #endif // MAX_EXTRUDERS > 5
                 #endif // MAX_EXTRUDERS > 4
               #endif // MAX_EXTRUDERS > 3
@@ -1170,6 +1190,16 @@ void MarlinSettings::postprocess() {
                     #if AXIS_HAS_STEALTHCHOP(E5)
                       tmc_stealth_enabled.E5 = stepperE5.get_stealthChop_status();
                     #endif
+                    #if MAX_EXTRUDERS > 6
+                      #if AXIS_HAS_STEALTHCHOP(E6)
+                        tmc_stealth_enabled.E6 = stepperE6.get_stealthChop_status();
+                      #endif
+                      #if MAX_EXTRUDERS > 7
+                        #if AXIS_HAS_STEALTHCHOP(E7)
+                          tmc_stealth_enabled.E7 = stepperE7.get_stealthChop_status();
+                        #endif
+                      #endif // MAX_EXTRUDERS > 7
+                    #endif // MAX_EXTRUDERS > 6
                   #endif // MAX_EXTRUDERS > 5
                 #endif // MAX_EXTRUDERS > 4
               #endif // MAX_EXTRUDERS > 3
@@ -2788,6 +2818,14 @@ void MarlinSettings::reset() {
               #if EXTRUDERS > 5
                 CONFIG_ECHO_START();
                 SERIAL_ECHOLNPAIR("  M200 T5 D", LINEAR_UNIT(planner.filament_size[5]));
+                #if EXTRUDERS > 6
+                  CONFIG_ECHO_START();
+                  SERIAL_ECHOLNPAIR("  M200 T6 D", LINEAR_UNIT(planner.filament_size[6]));
+                  #if EXTRUDERS > 7
+                    CONFIG_ECHO_START();
+                    SERIAL_ECHOLNPAIR("  M200 T7 D", LINEAR_UNIT(planner.filament_size[7]));
+                  #endif // EXTRUDERS > 7
+                #endif // EXTRUDERS > 6
               #endif // EXTRUDERS > 5
             #endif // EXTRUDERS > 4
           #endif // EXTRUDERS > 3
@@ -3528,6 +3566,12 @@ void MarlinSettings::reset() {
               _ECHO_603(4);
               #if EXTRUDERS > 5
                 _ECHO_603(5);
+                #if EXTRUDERS > 6
+                  _ECHO_603(6);
+                  #if EXTRUDERS > 7
+                    _ECHO_603(7);
+                  #endif // EXTRUDERS > 7
+                #endif // EXTRUDERS > 6
               #endif // EXTRUDERS > 5
             #endif // EXTRUDERS > 4
           #endif // EXTRUDERS > 3
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index 27d5fb6fc72dbb352b6a9d8769f46565ff811392..7d8e270fed0b5836bff983a4a737d4c6144a0de2 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -486,14 +486,20 @@ void _O2 Endstops::report_states() {
           default: continue;
           case 1: pin = FIL_RUNOUT_PIN; break;
           case 2: pin = FIL_RUNOUT2_PIN; break;
-          #if NUM_RUNOUT_SENSORS > 2
+          #if NUM_RUNOUT_SENSORS >= 3
             case 3: pin = FIL_RUNOUT3_PIN; break;
-            #if NUM_RUNOUT_SENSORS > 3
+            #if NUM_RUNOUT_SENSORS >= 4
               case 4: pin = FIL_RUNOUT4_PIN; break;
-              #if NUM_RUNOUT_SENSORS > 4
+              #if NUM_RUNOUT_SENSORS >= 5
                 case 5: pin = FIL_RUNOUT5_PIN; break;
-                #if NUM_RUNOUT_SENSORS > 5
+                #if NUM_RUNOUT_SENSORS >= 6
                   case 6: pin = FIL_RUNOUT6_PIN; break;
+                  #if NUM_RUNOUT_SENSORS >= 7
+                    case 7: pin = FIL_RUNOUT7_PIN; break;
+                    #if NUM_RUNOUT_SENSORS >= 8
+                      case 8: pin = FIL_RUNOUT8_PIN; break;
+                    #endif
+                  #endif
                 #endif
               #endif
             #endif
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 4c3513c20a8116db8482834edebd1db9c49af83c..05522063153c04f6bb524e6ffa24dda9da9da268 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -1308,7 +1308,21 @@ void Planner::check_axes_activity() {
     #if HAS_FAN2
       FAN_SET(2);
     #endif
-
+    #if HAS_FAN3
+      FAN_SET(3);
+    #endif
+    #if HAS_FAN4
+      FAN_SET(4);
+    #endif
+    #if HAS_FAN5
+      FAN_SET(5);
+    #endif
+    #if HAS_FAN6
+      FAN_SET(6);
+    #endif
+    #if HAS_FAN7
+      FAN_SET(7);
+    #endif
   #endif // FAN_COUNT > 0
 
   #if ENABLED(AUTOTEMP)
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index dec11245f5fd2c744872968ae06a6ce72c43e7c9..6e4977984f4c1da9794c29fc0a666401c528fb20 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -2140,6 +2140,12 @@ void Stepper::init() {
   #if HAS_E5_DIR
     E5_DIR_INIT();
   #endif
+  #if HAS_E6_DIR
+    E6_DIR_INIT();
+  #endif
+  #if HAS_E7_DIR
+    E7_DIR_INIT();
+  #endif
 
   // Init Enable Pins - steppers default to disabled.
   #if HAS_X_ENABLE
@@ -2198,6 +2204,14 @@ void Stepper::init() {
     E5_ENABLE_INIT();
     if (!E_ENABLE_ON) E5_ENABLE_WRITE(HIGH);
   #endif
+  #if HAS_E6_ENABLE
+    E6_ENABLE_INIT();
+    if (!E_ENABLE_ON) E6_ENABLE_WRITE(HIGH);
+  #endif
+  #if HAS_E7_ENABLE
+    E7_ENABLE_INIT();
+    if (!E_ENABLE_ON) E7_ENABLE_WRITE(HIGH);
+  #endif
 
   #define _STEP_INIT(AXIS) AXIS ##_STEP_INIT()
   #define _WRITE_STEP(AXIS, HIGHLOW) AXIS ##_STEP_WRITE(HIGHLOW)
@@ -2261,6 +2275,12 @@ void Stepper::init() {
   #if E_STEPPERS > 5 && HAS_E5_STEP
     E_AXIS_INIT(5);
   #endif
+  #if E_STEPPERS > 6 && HAS_E6_STEP
+    E_AXIS_INIT(6);
+  #endif
+  #if E_STEPPERS > 7 && HAS_E7_STEP
+    E_AXIS_INIT(7);
+  #endif
 
   #if DISABLED(I2S_STEPPER_STREAM)
     HAL_timer_start(STEP_TIMER_NUM, 122); // Init Stepper ISR to 122 Hz for quick starting
@@ -2802,6 +2822,20 @@ void Stepper::report_positions() {
         SET_OUTPUT(E5_MS3_PIN);
       #endif
     #endif
+    #if HAS_E6_MICROSTEPS
+      SET_OUTPUT(E6_MS1_PIN);
+      SET_OUTPUT(E6_MS2_PIN);
+      #if PIN_EXISTS(E6_MS3)
+        SET_OUTPUT(E6_MS3_PIN);
+      #endif
+    #endif
+    #if HAS_E7_MICROSTEPS
+      SET_OUTPUT(E7_MS1_PIN);
+      SET_OUTPUT(E7_MS2_PIN);
+      #if PIN_EXISTS(E7_MS3)
+        SET_OUTPUT(E7_MS3_PIN);
+      #endif
+    #endif
 
     static const uint8_t microstep_modes[] = MICROSTEP_MODES;
     for (uint16_t i = 0; i < COUNT(microstep_modes); i++)
@@ -2847,22 +2881,28 @@ void Stepper::report_positions() {
           break;
       #endif
       #if HAS_E0_MICROSTEPS
-        case 3: WRITE(E0_MS1_PIN, ms1); break;
+        case  3: WRITE(E0_MS1_PIN, ms1); break;
       #endif
       #if HAS_E1_MICROSTEPS
-        case 4: WRITE(E1_MS1_PIN, ms1); break;
+        case  4: WRITE(E1_MS1_PIN, ms1); break;
       #endif
       #if HAS_E2_MICROSTEPS
-        case 5: WRITE(E2_MS1_PIN, ms1); break;
+        case  5: WRITE(E2_MS1_PIN, ms1); break;
       #endif
       #if HAS_E3_MICROSTEPS
-        case 6: WRITE(E3_MS1_PIN, ms1); break;
+        case  6: WRITE(E3_MS1_PIN, ms1); break;
       #endif
       #if HAS_E4_MICROSTEPS
-        case 7: WRITE(E4_MS1_PIN, ms1); break;
+        case  7: WRITE(E4_MS1_PIN, ms1); break;
       #endif
       #if HAS_E5_MICROSTEPS
-        case 8: WRITE(E5_MS1_PIN, ms1); break;
+        case  8: WRITE(E5_MS1_PIN, ms1); break;
+      #endif
+      #if HAS_E6_MICROSTEPS
+        case  9: WRITE(E6_MS1_PIN, ms1); break;
+      #endif
+      #if HAS_E7_MICROSTEPS
+        case 10: WRITE(E7_MS1_PIN, ms1); break;
       #endif
     }
     if (ms2 >= 0) switch (driver) {
@@ -2903,22 +2943,28 @@ void Stepper::report_positions() {
           break;
       #endif
       #if HAS_E0_MICROSTEPS
-        case 3: WRITE(E0_MS2_PIN, ms2); break;
+        case  3: WRITE(E0_MS2_PIN, ms2); break;
       #endif
       #if HAS_E1_MICROSTEPS
-        case 4: WRITE(E1_MS2_PIN, ms2); break;
+        case  4: WRITE(E1_MS2_PIN, ms2); break;
       #endif
       #if HAS_E2_MICROSTEPS
-        case 5: WRITE(E2_MS2_PIN, ms2); break;
+        case  5: WRITE(E2_MS2_PIN, ms2); break;
       #endif
       #if HAS_E3_MICROSTEPS
-        case 6: WRITE(E3_MS2_PIN, ms2); break;
+        case  6: WRITE(E3_MS2_PIN, ms2); break;
       #endif
       #if HAS_E4_MICROSTEPS
-        case 7: WRITE(E4_MS2_PIN, ms2); break;
+        case  7: WRITE(E4_MS2_PIN, ms2); break;
       #endif
       #if HAS_E5_MICROSTEPS
-        case 8: WRITE(E5_MS2_PIN, ms2); break;
+        case  8: WRITE(E5_MS2_PIN, ms2); break;
+      #endif
+      #if HAS_E6_MICROSTEPS
+        case  9: WRITE(E6_MS2_PIN, ms2); break;
+      #endif
+      #if HAS_E7_MICROSTEPS
+        case 10: WRITE(E7_MS2_PIN, ms2); break;
       #endif
     }
     if (ms3 >= 0) switch (driver) {
@@ -2959,22 +3005,28 @@ void Stepper::report_positions() {
           break;
       #endif
       #if HAS_E0_MICROSTEPS && PIN_EXISTS(E0_MS3)
-        case 3: WRITE(E0_MS3_PIN, ms3); break;
+        case  3: WRITE(E0_MS3_PIN, ms3); break;
       #endif
       #if HAS_E1_MICROSTEPS && PIN_EXISTS(E1_MS3)
-        case 4: WRITE(E1_MS3_PIN, ms3); break;
+        case  4: WRITE(E1_MS3_PIN, ms3); break;
       #endif
       #if HAS_E2_MICROSTEPS && PIN_EXISTS(E2_MS3)
-        case 5: WRITE(E2_MS3_PIN, ms3); break;
+        case  5: WRITE(E2_MS3_PIN, ms3); break;
       #endif
       #if HAS_E3_MICROSTEPS && PIN_EXISTS(E3_MS3)
-        case 6: WRITE(E3_MS3_PIN, ms3); break;
+        case  6: WRITE(E3_MS3_PIN, ms3); break;
       #endif
       #if HAS_E4_MICROSTEPS && PIN_EXISTS(E4_MS3)
-        case 7: WRITE(E4_MS3_PIN, ms3); break;
+        case  7: WRITE(E4_MS3_PIN, ms3); break;
       #endif
       #if HAS_E5_MICROSTEPS && PIN_EXISTS(E5_MS3)
-        case 8: WRITE(E5_MS3_PIN, ms3); break;
+        case  8: WRITE(E5_MS3_PIN, ms3); break;
+      #endif
+      #if HAS_E6_MICROSTEPS && PIN_EXISTS(E6_MS3)
+        case  9: WRITE(E6_MS3_PIN, ms3); break;
+      #endif
+      #if HAS_E7_MICROSTEPS && PIN_EXISTS(E7_MS3)
+        case 10: WRITE(E7_MS3_PIN, ms3); break;
       #endif
     }
   }
@@ -3084,6 +3136,22 @@ void Stepper::report_positions() {
         #endif
       );
     #endif
+    #if HAS_E6_MICROSTEPS
+      SERIAL_ECHOPGM("E6: ");
+      SERIAL_CHAR('0' + READ(E6_MS1_PIN), '0' + READ(E6_MS2_PIN)
+        #if PIN_EXISTS(E6_MS3)
+          , '0' + READ(E6_MS3_PIN)
+        #endif
+      );
+    #endif
+    #if HAS_E7_MICROSTEPS
+      SERIAL_ECHOPGM("E7: ");
+      SERIAL_CHAR('0' + READ(E7_MS1_PIN), '0' + READ(E7_MS2_PIN)
+        #if PIN_EXISTS(E7_MS3)
+          , '0' + READ(E7_MS3_PIN)
+        #endif
+      );
+    #endif
   }
 
 #endif // HAS_MICROSTEPS
diff --git a/Marlin/src/module/stepper/L64xx.h b/Marlin/src/module/stepper/L64xx.h
index c7b2d1e20c827a80d43b19ae0f73bbd97a581783..35b3d723debd40d213c8848776af8e1df8c048de 100644
--- a/Marlin/src/module/stepper/L64xx.h
+++ b/Marlin/src/module/stepper/L64xx.h
@@ -278,3 +278,37 @@
     #define E5_DIR_READ()        (stepper##E5.getStatus() & STATUS_DIR);
   #endif
 #endif
+
+// E6 Stepper
+#if AXIS_IS_L64XX(E6)
+  extern L64XX_CLASS(E6)         stepperE6;
+  #define E6_ENABLE_INIT()       NOOP
+  #define E6_ENABLE_WRITE(STATE) (STATE ? NOOP : stepperE6.free())
+  #define E6_ENABLE_READ()       (stepperE6.getStatus() & STATUS_HIZ)
+  #if AXIS_DRIVER_TYPE_E6(L6474)
+    #define E6_DIR_INIT()        SET_OUTPUT(E6_DIR_PIN)
+    #define E6_DIR_WRITE(STATE)  L6474_DIR_WRITE(E6, STATE)
+    #define E6_DIR_READ()        READ(E6_DIR_PIN)
+  #else
+    #define E6_DIR_INIT()        NOOP
+    #define E6_DIR_WRITE(STATE)  L64XX_DIR_WRITE(E6, STATE)
+    #define E6_DIR_READ()        (stepper##E6.getStatus() & STATUS_DIR);
+  #endif
+#endif
+
+// E7 Stepper
+#if AXIS_IS_L64XX(E7)
+  extern L64XX_CLASS(E7)         stepperE7;
+  #define E7_ENABLE_INIT()       NOOP
+  #define E7_ENABLE_WRITE(STATE) (STATE ? NOOP : stepperE7.free())
+  #define E7_ENABLE_READ()       (stepperE7.getStatus() & STATUS_HIZ)
+  #if AXIS_DRIVER_TYPE_E7(L6474)
+    #define E7_DIR_INIT()        SET_OUTPUT(E7_DIR_PIN)
+    #define E7_DIR_WRITE(STATE)  L6474_DIR_WRITE(E7, STATE)
+    #define E7_DIR_READ()        READ(E7_DIR_PIN)
+  #else
+    #define E7_DIR_INIT()        NOOP
+    #define E7_DIR_WRITE(STATE)  L64XX_DIR_WRITE(E7, STATE)
+    #define E7_DIR_READ()        (stepper##E7.getStatus() & STATUS_DIR);
+  #endif
+#endif
diff --git a/Marlin/src/module/stepper/TMC26X.h b/Marlin/src/module/stepper/TMC26X.h
index f3914332cce5aaf6e7dc1ae96abab6e25709791e..73cba317064e65462104559c9a4281ddfe4186ad 100644
--- a/Marlin/src/module/stepper/TMC26X.h
+++ b/Marlin/src/module/stepper/TMC26X.h
@@ -150,3 +150,19 @@ void tmc26x_init_to_defaults();
   #define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE)
   #define E5_ENABLE_READ() stepperE5.isEnabled()
 #endif
+
+// E6 Stepper
+#if AXIS_DRIVER_TYPE_E6(TMC26X)
+  extern TMC26XStepper stepperE6;
+  #define E6_ENABLE_INIT() NOOP
+  #define E6_ENABLE_WRITE(STATE) stepperE6.setEnabled(STATE)
+  #define E6_ENABLE_READ() stepperE6.isEnabled()
+#endif
+
+// E7 Stepper
+#if AXIS_DRIVER_TYPE_E7(TMC26X)
+  extern TMC26XStepper stepperE7;
+  #define E7_ENABLE_INIT() NOOP
+  #define E7_ENABLE_WRITE(STATE) stepperE7.setEnabled(STATE)
+  #define E7_ENABLE_READ() stepperE7.isEnabled()
+#endif
diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h
index e88c5267449ad87430e9ffac5e4856697ed22c7a..d05c7e3db395f627e721f3c61ac100dc57f2926d 100644
--- a/Marlin/src/module/stepper/indirection.h
+++ b/Marlin/src/module/stepper/indirection.h
@@ -303,26 +303,115 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
 #endif
 #define E5_STEP_READ() bool(READ(E5_STEP_PIN))
 
+// E6 Stepper
+#ifndef E6_ENABLE_INIT
+  #define E6_ENABLE_INIT() SET_OUTPUT(E6_ENABLE_PIN)
+  #define E6_ENABLE_WRITE(STATE) WRITE(E6_ENABLE_PIN,STATE)
+  #define E6_ENABLE_READ() bool(READ(E6_ENABLE_PIN))
+#endif
+#ifndef E6_DIR_INIT
+  #define E6_DIR_INIT() SET_OUTPUT(E6_DIR_PIN)
+  #define E6_DIR_WRITE(STATE) WRITE(E6_DIR_PIN,STATE)
+  #define E6_DIR_READ() bool(READ(E6_DIR_PIN))
+#endif
+#define E6_STEP_INIT() SET_OUTPUT(E6_STEP_PIN)
+#ifndef E6_STEP_WRITE
+  #define E6_STEP_WRITE(STATE) WRITE(E6_STEP_PIN,STATE)
+#endif
+#define E6_STEP_READ() bool(READ(E6_STEP_PIN))
+
+// E7 Stepper
+#ifndef E7_ENABLE_INIT
+  #define E7_ENABLE_INIT() SET_OUTPUT(E7_ENABLE_PIN)
+  #define E7_ENABLE_WRITE(STATE) WRITE(E7_ENABLE_PIN,STATE)
+  #define E7_ENABLE_READ() bool(READ(E7_ENABLE_PIN))
+#endif
+#ifndef E7_DIR_INIT
+  #define E7_DIR_INIT() SET_OUTPUT(E7_DIR_PIN)
+  #define E7_DIR_WRITE(STATE) WRITE(E7_DIR_PIN,STATE)
+  #define E7_DIR_READ() bool(READ(E7_DIR_PIN))
+#endif
+#define E7_STEP_INIT() SET_OUTPUT(E7_STEP_PIN)
+#ifndef E7_STEP_WRITE
+  #define E7_STEP_WRITE(STATE) WRITE(E7_STEP_PIN,STATE)
+#endif
+#define E7_STEP_READ() bool(READ(E7_STEP_PIN))
+
 /**
  * Extruder indirection for the single E axis
  */
 #if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
-  #if EXTRUDERS > 5
+  #if EXTRUDERS > 7
+    #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
+        case 6: E3_DIR_WRITE( INVERT_E3_DIR); break; case 7: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
+        case 6: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 7: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+      } }while(0)
+  #elif EXTRUDERS > 6
+    #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
+        case 6: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
+        case 6: E3_DIR_WRITE(!INVERT_E3_DIR); } }while(0)
+  #elif EXTRUDERS > 5
     #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
-    #define   NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); case 5: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
-    #define    REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); case 5: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 5: E2_DIR_WRITE( INVERT_E2_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; case 5: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
+      } }while(0)
   #elif EXTRUDERS > 4
     #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
-    #define   NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
-    #define    REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE(!INVERT_E2_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 4: E2_DIR_WRITE( INVERT_E2_DIR); break; \
+      } }while(0)
   #elif EXTRUDERS > 3
     #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
-    #define   NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
-    #define    REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+      } }while(0)
   #elif EXTRUDERS > 2
     #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
-    #define   NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
-    #define    REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
+    #define   NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+      } }while(0)
+    #define    REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; \
+        case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+      } }while(0)
   #else
     #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
     #define   NORM_E_DIR(E)   do{ E0_DIR_WRITE(E ?  INVERT_E0_DIR : !INVERT_E0_DIR); }while(0)
@@ -340,23 +429,100 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
 
 #elif E_STEPPERS > 1
 
-  #if E_STEPPERS > 5
-    #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); case 5: E5_STEP_WRITE(V); } }while(0)
-    #define   _NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); case 5: E5_DIR_WRITE(!INVERT_E5_DIR); } }while(0)
-    #define    _REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); case 5: E5_DIR_WRITE( INVERT_E5_DIR); } }while(0)
+  #if E_STEPPERS > 7
+
+    #define _E_STEP_WRITE(E,V) do{ switch (E) { \
+        case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
+        case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; case 6: E6_STEP_WRITE(V); break; case 7: E7_STEP_WRITE(V); break; \
+      } }while(0)
+    #define   _NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
+        case 6: E6_DIR_WRITE(!INVERT_E6_DIR); break; case 7: E7_DIR_WRITE(!INVERT_E7_DIR); break; \
+      } }while(0)
+    #define    _REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
+        case 6: E6_DIR_WRITE( INVERT_E6_DIR); break; case 7: E7_DIR_WRITE( INVERT_E7_DIR); break; \
+      } }while(0)
+
+  #elif E_STEPPERS > 6
+
+    #define _E_STEP_WRITE(E,V) do{ switch (E) { \
+        case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
+        case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; case 6: E6_STEP_WRITE(V); break; \
+      } }while(0)
+    #define   _NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
+        case 6: E6_DIR_WRITE(!INVERT_E6_DIR); break; \
+      } }while(0)
+    #define    _REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
+        case 6: E6_DIR_WRITE( INVERT_E6_DIR); break; \
+      } }while(0)
+
+  #elif E_STEPPERS > 5
+
+    #define _E_STEP_WRITE(E,V) do{ switch (E) { \
+        case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
+        case 4: E4_STEP_WRITE(V); break; case 5: E5_STEP_WRITE(V); break; \
+      } }while(0)
+    #define   _NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; case 5: E5_DIR_WRITE(!INVERT_E5_DIR); break; \
+      } }while(0)
+    #define    _REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; case 5: E5_DIR_WRITE( INVERT_E5_DIR); break; \
+      } }while(0)
+
   #elif E_STEPPERS > 4
-    #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); } }while(0)
-    #define   _NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); } }while(0)
-    #define    _REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); } }while(0)
+
+    #define _E_STEP_WRITE(E,V) do{ switch (E) { \
+        case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
+        case 4: E4_STEP_WRITE(V); break; \
+      } }while(0)
+    #define   _NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE(!INVERT_E4_DIR); break; \
+      } }while(0)
+    #define    _REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+        case 4: E4_DIR_WRITE( INVERT_E4_DIR); break; \
+      } }while(0)
+
   #elif E_STEPPERS > 3
-    #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); } }while(0)
-    #define   _NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); } }while(0)
-    #define    _REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); } }while(0)
+
+    #define _E_STEP_WRITE(E,V) do{ switch (E) { \
+        case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; \
+      } }while(0)
+    #define   _NORM_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; \
+      } }while(0)
+    #define    _REV_E_DIR(E)   do{ switch (E) { \
+        case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; \
+        case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; \
+      } }while(0)
+
   #elif E_STEPPERS > 2
+
     #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); } }while(0)
     #define   _NORM_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
     #define    _REV_E_DIR(E)   do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
+
   #else
+
     #define _E_STEP_WRITE(E,V) do{ if (E == 0) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
     #define   _NORM_E_DIR(E)   do{ if (E == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
     #define    _REV_E_DIR(E)   do{ if (E == 0) { E0_DIR_WRITE( INVERT_E0_DIR); } else { E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
@@ -376,7 +542,15 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
     #define E_STEP_WRITE(E,V) do{ if (extruder_duplication_enabled) { DUPE(STEP,V); } else _E_STEP_WRITE(E,V); }while(0)
 
     #if E_STEPPERS > 2
-      #if E_STEPPERS > 5
+      #if E_STEPPERS > 7
+        #define DUPE(T,V)     do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); _DUPE(6,T,V); _DUPE(7,T,V); }while(0)
+        #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); NDIR(6); NDIR(7); } else _NORM_E_DIR(E); }while(0)
+        #define REV_E_DIR(E)  do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); RDIR(6); RDIR(7); } else  _REV_E_DIR(E); }while(0)
+      #elif E_STEPPERS > 6
+        #define DUPE(T,V)     do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); _DUPE(6,T,V); }while(0)
+        #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); NDIR(6); } else _NORM_E_DIR(E); }while(0)
+        #define REV_E_DIR(E)  do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); RDIR(6); } else  _REV_E_DIR(E); }while(0)
+      #elif E_STEPPERS > 5
         #define DUPE(T,V)     do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); }while(0)
         #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); } else _NORM_E_DIR(E); }while(0)
         #define REV_E_DIR(E)  do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); } else  _REV_E_DIR(E); }while(0)
@@ -604,12 +778,42 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
   #define E5_disable() NOOP
 #endif
 
+#if AXIS_DRIVER_TYPE_E6(L6470)
+  extern L6470 stepperE6;
+  #define  E6_enable() NOOP
+  #define E6_disable() do{ stepperE6.free(); CBI(axis_known_position, E_AXIS); }while(0)
+#elif E_STEPPERS > 6 && HAS_E6_ENABLE
+  #define  E6_enable() E6_ENABLE_WRITE( E_ENABLE_ON)
+  #define E6_disable() E6_ENABLE_WRITE(!E_ENABLE_ON)
+#else
+  #define  E6_enable() NOOP
+  #define E6_disable() NOOP
+#endif
+
+#if AXIS_DRIVER_TYPE_E7(L6470)
+  extern L6470 stepperE7;
+  #define  E7_enable() NOOP
+  #define E7_disable() do{ stepperE7.free(); CBI(axis_known_position, E_AXIS); }while(0)
+#elif E_STEPPERS > 7 && HAS_E7_ENABLE
+  #define  E7_enable() E7_ENABLE_WRITE( E_ENABLE_ON)
+  #define E7_disable() E7_ENABLE_WRITE(!E_ENABLE_ON)
+#else
+  #define  E7_enable() NOOP
+  #define E7_disable() NOOP
+#endif
+
 #if ENABLED(MIXING_EXTRUDER)
 
   /**
    * Mixing steppers synchronize their enable (and direction) together
    */
-  #if MIXING_STEPPERS > 5
+  #if MIXING_STEPPERS > 7
+    #define  enable_E0() { E0_enable();  E1_enable();  E2_enable();  E3_enable();  E4_enable();  E5_enable();  E6_enable();  E7_enable(); }
+    #define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); E6_disable(); E7_disable(); }
+  #elif MIXING_STEPPERS > 6
+    #define  enable_E0() { E0_enable();  E1_enable();  E2_enable();  E3_enable();  E4_enable();  E5_enable();  E6_enable(); }
+    #define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); E6_disable(); }
+  #elif MIXING_STEPPERS > 5
     #define  enable_E0() { E0_enable();  E1_enable();  E2_enable();  E3_enable();  E4_enable();  E5_enable(); }
     #define disable_E0() { E0_disable(); E1_disable(); E2_disable(); E3_disable(); E4_disable(); E5_disable(); }
   #elif MIXING_STEPPERS > 4
@@ -635,6 +839,10 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
   #define disable_E4() NOOP
   #define  enable_E5() NOOP
   #define disable_E5() NOOP
+  #define  enable_E6() NOOP
+  #define disable_E6() NOOP
+  #define  enable_E7() NOOP
+  #define disable_E7() NOOP
 
 #else // !MIXING_EXTRUDER
 
@@ -686,4 +894,20 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
     #define disable_E5() NOOP
   #endif
 
+  #if E_STEPPERS > 6 && HAS_E6_ENABLE
+    #define  enable_E6() E6_enable()
+    #define disable_E6() E6_disable()
+  #else
+    #define  enable_E6() NOOP
+    #define disable_E6() NOOP
+  #endif
+
+  #if E_STEPPERS > 7 && HAS_E7_ENABLE
+    #define  enable_E7() E7_enable()
+    #define disable_E7() E7_disable()
+  #else
+    #define  enable_E7() NOOP
+    #define disable_E7() NOOP
+  #endif
+
 #endif // !MIXING_EXTRUDER
diff --git a/Marlin/src/module/stepper/trinamic.cpp b/Marlin/src/module/stepper/trinamic.cpp
index bdb6f2037786dc7ba3f1d19565351f401635e39d..ba65c32eb6831c2c6a3d0cbd63b96a6ce3917a92 100644
--- a/Marlin/src/module/stepper/trinamic.cpp
+++ b/Marlin/src/module/stepper/trinamic.cpp
@@ -301,6 +301,20 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
       TMC_UART_DEFINE_E(SW, 5);
     #endif
   #endif
+  #if AXIS_HAS_UART(E6)
+    #ifdef E6_HARDWARE_SERIAL
+      TMC_UART_DEFINE_E(HW, 6);
+    #else
+      TMC_UART_DEFINE_E(SW, 6);
+    #endif
+  #endif
+  #if AXIS_HAS_UART(E7)
+    #ifdef E7_HARDWARE_SERIAL
+      TMC_UART_DEFINE_E(HW, 7);
+    #else
+      TMC_UART_DEFINE_E(SW, 7);
+    #endif
+  #endif
 
   void tmc_serial_begin() {
     #if AXIS_HAS_UART(X)
@@ -401,6 +415,20 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
         stepperE5.beginSerial(TMC_BAUD_RATE);
       #endif
     #endif
+    #if AXIS_HAS_UART(E6)
+      #ifdef E6_HARDWARE_SERIAL
+        E6_HARDWARE_SERIAL.begin(TMC_BAUD_RATE);
+      #else
+        stepperE6.beginSerial(TMC_BAUD_RATE);
+      #endif
+    #endif
+    #if AXIS_HAS_UART(E7)
+      #ifdef E7_HARDWARE_SERIAL
+        E7_HARDWARE_SERIAL.begin(TMC_BAUD_RATE);
+      #else
+        stepperE7.beginSerial(TMC_BAUD_RATE);
+      #endif
+    #endif
   }
 #endif
 
@@ -654,6 +682,12 @@ void restore_trinamic_drivers() {
   #if AXIS_IS_TMC(E5)
     stepperE5.push();
   #endif
+  #if AXIS_IS_TMC(E6)
+    stepperE6.push();
+  #endif
+  #if AXIS_IS_TMC(E7)
+    stepperE7.push();
+  #endif
 }
 
 void reset_trinamic_drivers() {
@@ -719,6 +753,12 @@ void reset_trinamic_drivers() {
   #if AXIS_IS_TMC(E5)
     _TMC_INIT(E5, STEALTH_AXIS_E);
   #endif
+  #if AXIS_IS_TMC(E6)
+    _TMC_INIT(E6, STEALTH_AXIS_E);
+  #endif
+  #if AXIS_IS_TMC(E7)
+    _TMC_INIT(E7, STEALTH_AXIS_E);
+  #endif
 
   #if USE_SENSORLESS
     #if X_SENSORLESS
diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h
index df4675d81767af9be3b7bef43e274dd943bb1b6b..afa8847108e6ab227ebda3b543d4f54d6f28ea66 100644
--- a/Marlin/src/module/stepper/trinamic.h
+++ b/Marlin/src/module/stepper/trinamic.h
@@ -58,6 +58,8 @@
 #define TMC_E3_LABEL 'E', '3'
 #define TMC_E4_LABEL 'E', '4'
 #define TMC_E5_LABEL 'E', '5'
+#define TMC_E6_LABEL 'E', '6'
+#define TMC_E7_LABEL 'E', '7'
 
 #define __TMC_CLASS(TYPE, L, I, A) TMCMarlin<CLASS_##TYPE, L, I, A>
 #define _TMC_CLASS(TYPE, LandI, A) __TMC_CLASS(TYPE, LandI, A)
@@ -266,3 +268,29 @@ void reset_trinamic_drivers();
     #define E5_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E5_STEP_PIN); }while(0)
   #endif
 #endif
+
+// E6 Stepper
+#if AXIS_IS_TMC(E6)
+  extern TMC_CLASS_E(6) stepperE6;
+  #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)
+    #define E6_ENABLE_INIT() NOOP
+    #define E6_ENABLE_WRITE(STATE) stepperE6.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
+    #define E6_ENABLE_READ() stepperE6.isEnabled()
+  #endif
+  #if AXIS_HAS_SQUARE_WAVE(E6)
+    #define E6_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E6_STEP_PIN); }while(0)
+  #endif
+#endif
+
+// E7 Stepper
+#if AXIS_IS_TMC(E7)
+  extern TMC_CLASS_E(7) stepperE7;
+  #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)
+    #define E7_ENABLE_INIT() NOOP
+    #define E7_ENABLE_WRITE(STATE) stepperE7.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
+    #define E7_ENABLE_READ() stepperE7.isEnabled()
+  #endif
+  #if AXIS_HAS_SQUARE_WAVE(E7)
+    #define E7_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E7_STEP_PIN); }while(0)
+  #endif
+#endif
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index b0b57873ce6e83eab4cd04e46ac575070e68c81c..eba7afd81a94df30f1d7175f561549d4485865ce 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -303,9 +303,11 @@ volatile bool Temperature::temp_meas_ready = false;
                          sensor_heater_2 { HEATER_2_RAW_LO_TEMP, HEATER_2_RAW_HI_TEMP, 0, 16383 },
                          sensor_heater_3 { HEATER_3_RAW_LO_TEMP, HEATER_3_RAW_HI_TEMP, 0, 16383 },
                          sensor_heater_4 { HEATER_4_RAW_LO_TEMP, HEATER_4_RAW_HI_TEMP, 0, 16383 },
-                         sensor_heater_5 { HEATER_5_RAW_LO_TEMP, HEATER_5_RAW_HI_TEMP, 0, 16383 };
+                         sensor_heater_5 { HEATER_5_RAW_LO_TEMP, HEATER_5_RAW_HI_TEMP, 0, 16383 },
+                         sensor_heater_6 { HEATER_6_RAW_LO_TEMP, HEATER_6_RAW_HI_TEMP, 0, 16383 },
+                         sensor_heater_7 { HEATER_7_RAW_LO_TEMP, HEATER_7_RAW_HI_TEMP, 0, 16383 };
 
-  temp_range_t Temperature::temp_range[HOTENDS] = ARRAY_BY_HOTENDS(sensor_heater_0, sensor_heater_1, sensor_heater_2, sensor_heater_3, sensor_heater_4, sensor_heater_5);
+  temp_range_t Temperature::temp_range[HOTENDS] = ARRAY_BY_HOTENDS(sensor_heater_0, sensor_heater_1, sensor_heater_2, sensor_heater_3, sensor_heater_4, sensor_heater_5, sensor_heater_6, sensor_heater_7);
 #endif
 
 #ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED
@@ -686,6 +688,12 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
               , REPEAT2(4,_EFAN,4) 4
               #if HOTENDS > 5
                 , REPEAT2(5,_EFAN,5) 5
+                #if HOTENDS > 6
+                  , REPEAT2(6,_EFAN,6) 6
+                  #if HOTENDS > 7
+                    , REPEAT2(7,_EFAN,7) 7
+                  #endif
+                #endif
               #endif
             #endif
           #endif
@@ -751,6 +759,12 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
         #if HAS_AUTO_FAN_5
           case 5: _UPDATE_AUTO_FAN(E5, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
         #endif
+        #if HAS_AUTO_FAN_6
+          case 6: _UPDATE_AUTO_FAN(E6, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
+        #endif
+        #if HAS_AUTO_FAN_7
+          case 7: _UPDATE_AUTO_FAN(E7, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
+        #endif
         #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
           case CHAMBER_FAN_INDEX: _UPDATE_AUTO_FAN(CHAMBER, fan_on, CHAMBER_AUTO_FAN_SPEED); break;
         #endif
@@ -893,7 +907,6 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
               pid_output += work_pid[ee].Kc;
             }
           #endif // PID_EXTRUSION_SCALING
-
           #if ENABLED(PID_FAN_SCALING)
             if (thermalManager.fan_speed[active_extruder] > PID_FAN_SCALING_MIN_SPEED) {
               work_pid[ee].Kf = PID_PARAM(Kf, ee) + (PID_FAN_SCALING_LIN_FACTOR) * thermalManager.fan_speed[active_extruder];
@@ -902,7 +915,6 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
             //pid_output -= work_pid[ee].Ki;
             //pid_output += work_pid[ee].Ki * work_pid[ee].Kf
           #endif // PID_FAN_SCALING
-
           LIMIT(pid_output, 0, PID_MAX);
         }
         temp_dState[ee] = temp_hotend[ee].celsius;
@@ -1286,6 +1298,12 @@ void Temperature::manage_heater() {
       #if ENABLED(HEATER_5_USER_THERMISTOR)
         { true, 0, 0, HOTEND5_PULLUP_RESISTOR_OHMS, HOTEND5_RESISTANCE_25C_OHMS, 0, 0, HOTEND5_BETA, 0 },
       #endif
+      #if ENABLED(HEATER_6_USER_THERMISTOR)
+        { true, 0, 0, HOTEND6_PULLUP_RESISTOR_OHMS, HOTEND6_RESISTANCE_25C_OHMS, 0, 0, HOTEND6_BETA, 0 },
+      #endif
+      #if ENABLED(HEATER_7_USER_THERMISTOR)
+        { true, 0, 0, HOTEND7_PULLUP_RESISTOR_OHMS, HOTEND7_RESISTANCE_25C_OHMS, 0, 0, HOTEND7_BETA, 0 },
+      #endif
       #if ENABLED(HEATER_BED_USER_THERMISTOR)
         { true, 0, 0, BED_PULLUP_RESISTOR_OHMS, BED_RESISTANCE_25C_OHMS, 0, 0, BED_BETA, 0 },
       #endif
@@ -1331,6 +1349,12 @@ void Temperature::manage_heater() {
       #if ENABLED(HEATER_5_USER_THERMISTOR)
         t_index == CTI_HOTEND_5 ? PSTR("HOTEND 5") :
       #endif
+      #if ENABLED(HEATER_6_USER_THERMISTOR)
+        t_index == CTI_HOTEND_6 ? PSTR("HOTEND 6") :
+      #endif
+      #if ENABLED(HEATER_7_USER_THERMISTOR)
+        t_index == CTI_HOTEND_7 ? PSTR("HOTEND 7") :
+      #endif
       #if ENABLED(HEATER_BED_USER_THERMISTOR)
         t_index == CTI_BED ? PSTR("BED") :
       #endif
@@ -1476,6 +1500,26 @@ void Temperature::manage_heater() {
         #else
           break;
         #endif
+      case 6:
+        #if ENABLED(HEATER_6_USER_THERMISTOR)
+          return user_thermistor_to_deg_c(CTI_HOTEND_6, raw);
+        #elif ENABLED(HEATER_6_USES_AD595)
+          return TEMP_AD595(raw);
+        #elif ENABLED(HEATER_6_USES_AD8495)
+          return TEMP_AD8495(raw);
+        #else
+          break;
+        #endif
+      case 7:
+        #if ENABLED(HEATER_7_USER_THERMISTOR)
+          return user_thermistor_to_deg_c(CTI_HOTEND_7, raw);
+        #elif ENABLED(HEATER_7_USES_AD595)
+          return TEMP_AD595(raw);
+        #elif ENABLED(HEATER_7_USES_AD8495)
+          return TEMP_AD8495(raw);
+        #else
+          break;
+        #endif
       default: break;
     }
 
@@ -1633,8 +1677,9 @@ void Temperature::init() {
   #endif
 
   #if MB(RUMBA)
-    #define _AD(N) (ANY(HEATER_##N##_USES_AD595, HEATER_##N##_USES_AD8495))
-    #if _AD(0) || _AD(1) || _AD(2) || _AD(3) || _AD(4) || _AD(5) || _AD(BED) || _AD(CHAMBER)
+    #define _AD(N) ANY(HEATER_##N##_USES_AD595, HEATER_##N##_USES_AD8495)
+    #if  _AD(0) || _AD(1) || _AD(2) /* RUMBA has 3 E plugs // || _AD(3) || _AD(4) || _AD(5) || _AD(6) || _AD(7) */ \
+      || _AD(BED) || _AD(CHAMBER)
       // Disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector
       MCUCR = _BV(JTD);
       MCUCR = _BV(JTD);
@@ -1668,6 +1713,12 @@ void Temperature::init() {
   #if HAS_HEATER_5
     OUT_WRITE(HEATER_5_PIN, HEATER_5_INVERTING);
   #endif
+  #if HAS_HEATER_6
+    OUT_WRITE(HEATER_6_PIN, HEATER_6_INVERTING);
+  #endif
+  #if HAS_HEATER_7
+    OUT_WRITE(HEATER_7_PIN, HEATER_7_INVERTING);
+  #endif
 
   #if HAS_HEATED_BED
     #ifdef ALFAWISE_UX0
@@ -1690,6 +1741,21 @@ void Temperature::init() {
   #if HAS_FAN2
     INIT_FAN_PIN(FAN2_PIN);
   #endif
+  #if HAS_FAN3
+    INIT_FAN_PIN(FAN3_PIN);
+  #endif
+  #if HAS_FAN4
+    INIT_FAN_PIN(FAN4_PIN);
+  #endif
+  #if HAS_FAN5
+    INIT_FAN_PIN(FAN5_PIN);
+  #endif
+  #if HAS_FAN6
+    INIT_FAN_PIN(FAN6_PIN);
+  #endif
+  #if HAS_FAN7
+    INIT_FAN_PIN(FAN7_PIN);
+  #endif
   #if ENABLED(USE_CONTROLLER_FAN)
     INIT_FAN_PIN(CONTROLLER_FAN_PIN);
   #endif
@@ -1731,6 +1797,12 @@ void Temperature::init() {
   #if HAS_TEMP_ADC_5
     HAL_ANALOG_SELECT(TEMP_5_PIN);
   #endif
+  #if HAS_TEMP_ADC_6
+    HAL_ANALOG_SELECT(TEMP_6_PIN);
+  #endif
+  #if HAS_TEMP_ADC_7
+    HAL_ANALOG_SELECT(TEMP_7_PIN);
+  #endif
   #if HAS_JOY_ADC_X
     HAL_ANALOG_SELECT(JOY_X_PIN);
   #endif
@@ -1780,6 +1852,12 @@ void Temperature::init() {
   #if HAS_AUTO_FAN_5 && !(_EFANOVERLAP(5,0) || _EFANOVERLAP(5,1) || _EFANOVERLAP(5,2) || _EFANOVERLAP(5,3) || _EFANOVERLAP(5,4))
     INIT_E_AUTO_FAN_PIN(E5_AUTO_FAN_PIN);
   #endif
+  #if HAS_AUTO_FAN_6 && !(_EFANOVERLAP(6,0) || _EFANOVERLAP(6,1) || _EFANOVERLAP(6,2) || _EFANOVERLAP(6,3) || _EFANOVERLAP(6,4) || _EFANOVERLAP(6,5))
+    INIT_E_AUTO_FAN_PIN(E6_AUTO_FAN_PIN);
+  #endif
+  #if HAS_AUTO_FAN_7 && !(_EFANOVERLAP(7,0) || _EFANOVERLAP(7,1) || _EFANOVERLAP(7,2) || _EFANOVERLAP(7,3) || _EFANOVERLAP(7,4) || _EFANOVERLAP(7,5) || _EFANOVERLAP(7,6))
+    INIT_E_AUTO_FAN_PIN(E7_AUTO_FAN_PIN);
+  #endif
   #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
     INIT_CHAMBER_AUTO_FAN_PIN(CHAMBER_AUTO_FAN_PIN);
   #endif
@@ -1841,6 +1919,22 @@ void Temperature::init() {
               #ifdef HEATER_5_MAXTEMP
                 _TEMP_MAX_E(5);
               #endif
+              #if HOTENDS > 6
+                #ifdef HEATER_6_MINTEMP
+                  _TEMP_MIN_E(6);
+                #endif
+                #ifdef HEATER_6_MAXTEMP
+                  _TEMP_MAX_E(6);
+                #endif
+                #if HOTENDS > 7
+                  #ifdef HEATER_7_MINTEMP
+                    _TEMP_MIN_E(7);
+                  #endif
+                  #ifdef HEATER_7_MAXTEMP
+                    _TEMP_MAX_E(7);
+                  #endif
+                #endif // HOTENDS > 7
+              #endif // HOTENDS > 6
             #endif // HOTENDS > 5
           #endif // HOTENDS > 4
         #endif // HOTENDS > 3
@@ -2232,6 +2326,12 @@ void Temperature::set_current_temp_raw() {
           temp_hotend[4].update();
           #if HAS_TEMP_ADC_5
             temp_hotend[5].update();
+            #if HAS_TEMP_ADC_6
+              temp_hotend[6].update();
+              #if HAS_TEMP_ADC_7
+                temp_hotend[7].update();
+              #endif // HAS_TEMP_ADC_7
+            #endif // HAS_TEMP_ADC_6
           #endif // HAS_TEMP_ADC_5
         #endif // HAS_TEMP_ADC_4
       #endif // HAS_TEMP_ADC_3
@@ -2508,6 +2608,21 @@ void Temperature::tick() {
         #if HAS_FAN2
           _FAN_PWM(2);
         #endif
+        #if HAS_FAN3
+          _FAN_PWM(3);
+        #endif
+        #if HAS_FAN4
+          _FAN_PWM(4);
+        #endif
+        #if HAS_FAN5
+          _FAN_PWM(5);
+        #endif
+        #if HAS_FAN6
+          _FAN_PWM(6);
+        #endif
+        #if HAS_FAN7
+          _FAN_PWM(7);
+        #endif
       #endif
     }
     else {
@@ -2535,6 +2650,21 @@ void Temperature::tick() {
         #if HAS_FAN2
           if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
         #endif
+        #if HAS_FAN3
+          if (soft_pwm_count_fan[3] <= pwm_count_tmp) WRITE_FAN(3, LOW);
+        #endif
+        #if HAS_FAN4
+          if (soft_pwm_count_fan[4] <= pwm_count_tmp) WRITE_FAN(4, LOW);
+        #endif
+        #if HAS_FAN5
+          if (soft_pwm_count_fan[5] <= pwm_count_tmp) WRITE_FAN(5, LOW);
+        #endif
+        #if HAS_FAN6
+          if (soft_pwm_count_fan[6] <= pwm_count_tmp) WRITE_FAN(6, LOW);
+        #endif
+        #if HAS_FAN7
+          if (soft_pwm_count_fan[7] <= pwm_count_tmp) WRITE_FAN(7, LOW);
+        #endif
       #endif
     }
 
@@ -2599,6 +2729,21 @@ void Temperature::tick() {
         #if HAS_FAN2
           _PWM_FAN(2);
         #endif
+        #if HAS_FAN3
+          _FAN_PWM(3);
+        #endif
+        #if HAS_FAN4
+          _FAN_PWM(4);
+        #endif
+        #if HAS_FAN5
+          _FAN_PWM(5);
+        #endif
+        #if HAS_FAN6
+          _FAN_PWM(6);
+        #endif
+        #if HAS_FAN7
+          _FAN_PWM(7);
+        #endif
       }
       #if HAS_FAN0
         if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0, LOW);
@@ -2609,6 +2754,21 @@ void Temperature::tick() {
       #if HAS_FAN2
         if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
       #endif
+      #if HAS_FAN3
+        if (soft_pwm_count_fan[3] <= pwm_count_tmp) WRITE_FAN(3, LOW);
+      #endif
+      #if HAS_FAN4
+        if (soft_pwm_count_fan[4] <= pwm_count_tmp) WRITE_FAN(4, LOW);
+      #endif
+      #if HAS_FAN5
+        if (soft_pwm_count_fan[5] <= pwm_count_tmp) WRITE_FAN(5, LOW);
+      #endif
+      #if HAS_FAN6
+        if (soft_pwm_count_fan[6] <= pwm_count_tmp) WRITE_FAN(6, LOW);
+      #endif
+      #if HAS_FAN7
+        if (soft_pwm_count_fan[7] <= pwm_count_tmp) WRITE_FAN(7, LOW);
+      #endif
     #endif // FAN_SOFT_PWM
 
     // SOFT_PWM_SCALE to frequency:
@@ -2730,6 +2890,16 @@ void Temperature::tick() {
       case MeasureTemp_5: ACCUMULATE_ADC(temp_hotend[5]); break;
     #endif
 
+    #if HAS_TEMP_ADC_6
+      case PrepareTemp_6: HAL_START_ADC(TEMP_6_PIN); break;
+      case MeasureTemp_6: ACCUMULATE_ADC(temp_hotend[6]); break;
+    #endif
+
+    #if HAS_TEMP_ADC_7
+      case PrepareTemp_7: HAL_START_ADC(TEMP_7_PIN); break;
+      case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break;
+    #endif
+
     #if ENABLED(FILAMENT_WIDTH_SENSOR)
       case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); break;
       case Measure_FILWIDTH:
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index 9c1860798c534b292b61d68348fa459ba71c49a4..5273104503eef2fa061bf440bd514e82065474a2 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -132,6 +132,12 @@ enum ADCSensorState : char {
   #if HAS_TEMP_ADC_5
     PrepareTemp_5, MeasureTemp_5,
   #endif
+  #if HAS_TEMP_ADC_6
+    PrepareTemp_6, MeasureTemp_6,
+  #endif
+  #if HAS_TEMP_ADC_7
+    PrepareTemp_7, MeasureTemp_7,
+  #endif
   #if HAS_JOY_ADC_X
     PrepareJoy_X, MeasureJoy_X,
   #endif
diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h
index 1e7b76d15323dba2390ef3367f45f6a0aa3aa13a..875f742ccb28d06c47a3b7be832bd08ba31d7354 100644
--- a/Marlin/src/module/thermistor/thermistors.h
+++ b/Marlin/src/module/thermistor/thermistors.h
@@ -39,7 +39,7 @@
 
 #define OV(N) int16_t((N) * (OVERSAMPLENR) * (THERMISTOR_TABLE_SCALE))
 
-#define ANY_THERMISTOR_IS(n) (THERMISTOR_HEATER_0 == n || THERMISTOR_HEATER_1 == n || THERMISTOR_HEATER_2 == n || THERMISTOR_HEATER_3 == n || THERMISTOR_HEATER_4 == n || THERMISTOR_HEATER_5 == n || THERMISTORBED == n || THERMISTORCHAMBER == n || THERMISTORPROBE == n)
+#define ANY_THERMISTOR_IS(n) (THERMISTOR_HEATER_0 == n || THERMISTOR_HEATER_1 == n || THERMISTOR_HEATER_2 == n || THERMISTOR_HEATER_3 == n || THERMISTOR_HEATER_4 == n || THERMISTOR_HEATER_5 == n || THERMISTOR_HEATER_6 == n || THERMISTOR_HEATER_7 == n || THERMISTORBED == n || THERMISTORCHAMBER == n || THERMISTORPROBE == n)
 
 // Pt1000 and Pt100 handling
 //
@@ -235,6 +235,26 @@
   #define HEATER_5_TEMPTABLE_LEN 0
 #endif
 
+#if THERMISTOR_HEATER_6
+  #define HEATER_6_TEMPTABLE TT_NAME(THERMISTOR_HEATER_6)
+  #define HEATER_6_TEMPTABLE_LEN COUNT(HEATER_6_TEMPTABLE)
+#elif defined(HEATER_6_USES_THERMISTOR)
+  #error "No heater 6 thermistor table specified"
+#else
+  #define HEATER_6_TEMPTABLE nullptr
+  #define HEATER_6_TEMPTABLE_LEN 0
+#endif
+
+#if THERMISTOR_HEATER_7
+  #define HEATER_7_TEMPTABLE TT_NAME(THERMISTOR_HEATER_7)
+  #define HEATER_7_TEMPTABLE_LEN COUNT(HEATER_7_TEMPTABLE)
+#elif defined(HEATER_7_USES_THERMISTOR)
+  #error "No heater 7 thermistor table specified"
+#else
+  #define HEATER_7_TEMPTABLE nullptr
+  #define HEATER_7_TEMPTABLE_LEN 0
+#endif
+
 #ifdef THERMISTORBED
   #define BED_TEMPTABLE TT_NAME(THERMISTORBED)
   #define BED_TEMPTABLE_LEN COUNT(BED_TEMPTABLE)
@@ -264,6 +284,7 @@ static_assert(
      HEATER_0_TEMPTABLE_LEN < 256 && HEATER_1_TEMPTABLE_LEN < 256
   && HEATER_2_TEMPTABLE_LEN < 256 && HEATER_3_TEMPTABLE_LEN < 256
   && HEATER_4_TEMPTABLE_LEN < 256 && HEATER_5_TEMPTABLE_LEN < 256
+  && HEATER_6_TEMPTABLE_LEN < 258 && HEATER_7_TEMPTABLE_LEN < 258
   &&      BED_TEMPTABLE_LEN < 256 &&  CHAMBER_TEMPTABLE_LEN < 256
   &&    PROBE_TEMPTABLE_LEN < 256,
   "Temperature conversion tables over 255 entries need special consideration."
@@ -326,6 +347,24 @@ static_assert(
     #define HEATER_5_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
   #endif
 #endif
+#ifndef HEATER_6_RAW_HI_TEMP
+  #if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_6_USES_THERMISTOR)
+    #define HEATER_6_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
+    #define HEATER_6_RAW_LO_TEMP 0
+  #else
+    #define HEATER_6_RAW_HI_TEMP 0
+    #define HEATER_6_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
+  #endif
+#endif
+#ifndef HEATER_7_RAW_HI_TEMP
+  #if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_7_USES_THERMISTOR)
+    #define HEATER_7_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
+    #define HEATER_7_RAW_LO_TEMP 0
+  #else
+    #define HEATER_7_RAW_HI_TEMP 0
+    #define HEATER_7_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE
+  #endif
+#endif
 #ifndef HEATER_BED_RAW_HI_TEMP
   #if defined(REVERSE_TEMP_SENSOR_RANGE) || !defined(HEATER_BED_USES_THERMISTOR)
     #define HEATER_BED_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index c29f0c363d698bf760e23956ac50f6371ffc2974..bd799e5e91f7cd0caf76fe505dd46e4c56e6a485 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -534,6 +534,8 @@
   #include "stm32/pins_STEVAL_3DP001V1.h"       // STM32F4                                env:STM32F401VE_STEVAL
 #elif MB(BIGTREE_SKR_PRO_V1_1)
   #include "stm32/pins_BTT_SKR_PRO_V1_1.h"      // STM32F4                                env:BIGTREE_SKR_PRO
+#elif MB(BIGTREE_GTR_V1_0)
+  #include "stm32/pins_BTT_GTR_V1_0.h"          // STM32F4                                env:BIGTREE_GTR
 #elif MB(BIGTREE_BTT002_V1_0)
   #include "stm32/pins_BTT_BTT002_V1_0.h"       // STM32F4                                env:BIGTREE_BTT002
 #elif MB(LERDGE_K)
@@ -713,6 +715,24 @@
 #ifndef E5_MS3_PIN
   #define E5_MS3_PIN -1
 #endif
+#ifndef E6_MS1_PIN
+  #define E6_MS1_PIN -1
+#endif
+#ifndef E6_MS2_PIN
+  #define E6_MS2_PIN -1
+#endif
+#ifndef E6_MS3_PIN
+  #define E6_MS3_PIN -1
+#endif
+#ifndef E7_MS1_PIN
+  #define E7_MS1_PIN -1
+#endif
+#ifndef E7_MS2_PIN
+  #define E7_MS2_PIN -1
+#endif
+#ifndef E7_MS3_PIN
+  #define E7_MS3_PIN -1
+#endif
 
 #ifndef E0_STEP_PIN
   #define E0_STEP_PIN -1
@@ -768,6 +788,24 @@
 #ifndef E5_ENABLE_PIN
   #define E5_ENABLE_PIN -1
 #endif
+#ifndef E6_STEP_PIN
+  #define E6_STEP_PIN -1
+#endif
+#ifndef E6_DIR_PIN
+  #define E6_DIR_PIN -1
+#endif
+#ifndef E6_ENABLE_PIN
+  #define E6_ENABLE_PIN -1
+#endif
+#ifndef E7_STEP_PIN
+  #define E7_STEP_PIN -1
+#endif
+#ifndef E7_DIR_PIN
+  #define E7_DIR_PIN -1
+#endif
+#ifndef E7_ENABLE_PIN
+  #define E7_ENABLE_PIN -1
+#endif
 
 #ifndef X_CS_PIN
   #define X_CS_PIN -1
@@ -796,6 +834,12 @@
 #ifndef E5_CS_PIN
   #define E5_CS_PIN -1
 #endif
+#ifndef E6_CS_PIN
+  #define E6_CS_PIN -1
+#endif
+#ifndef E7_CS_PIN
+  #define E7_CS_PIN -1
+#endif
 
 #ifndef FAN_PIN
   #define FAN_PIN -1
@@ -839,6 +883,12 @@
 #ifndef HEATER_5_PIN
   #define HEATER_5_PIN -1
 #endif
+#ifndef HEATER_6_PIN
+  #define HEATER_6_PIN -1
+#endif
+#ifndef HEATER_7_PIN
+  #define HEATER_7_PIN -1
+#endif
 #ifndef HEATER_BED_PIN
   #define HEATER_BED_PIN -1
 #endif
@@ -861,6 +911,12 @@
 #ifndef TEMP_5_PIN
   #define TEMP_5_PIN -1
 #endif
+#ifndef TEMP_6_PIN
+  #define TEMP_6_PIN -1
+#endif
+#ifndef TEMP_7_PIN
+  #define TEMP_7_PIN -1
+#endif
 #ifndef TEMP_BED_PIN
   #define TEMP_BED_PIN -1
 #endif
@@ -940,6 +996,20 @@
     #define E5_AUTO_FAN_PIN -1
   #endif
 #endif
+#ifndef E6_AUTO_FAN_PIN
+  #ifdef ORIG_E6_AUTO_FAN_PIN
+    #define E6_AUTO_FAN_PIN ORIG_E6_AUTO_FAN_PIN
+  #else
+    #define E6_AUTO_FAN_PIN -1
+  #endif
+#endif
+#ifndef E7_AUTO_FAN_PIN
+  #ifdef ORIG_E7_AUTO_FAN_PIN
+    #define E7_AUTO_FAN_PIN ORIG_E7_AUTO_FAN_PIN
+  #else
+    #define E7_AUTO_FAN_PIN -1
+  #endif
+#endif
 #ifndef CHAMBER_AUTO_FAN_PIN
   #ifdef ORIG_CHAMBER_AUTO_FAN_PIN
     #define CHAMBER_AUTO_FAN_PIN ORIG_CHAMBER_AUTO_FAN_PIN
diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h
index 771ca3da093635fcf322a996cfed9abc9a9c6759..ca8c3f9a99f7b2fda734dff2733f967cd416bf40 100644
--- a/Marlin/src/pins/pinsDebug_list.h
+++ b/Marlin/src/pins/pinsDebug_list.h
@@ -153,6 +153,24 @@
 #if !PIN_EXISTS(E5_MS3)
   #undef E5_MS3_PIN
 #endif
+#if !PIN_EXISTS(E6_MS1)
+  #undef E6_MS1_PIN
+#endif
+#if !PIN_EXISTS(E6_MS2)
+  #undef E6_MS2_PIN
+#endif
+#if !PIN_EXISTS(E6_MS3)
+  #undef E6_MS3_PIN
+#endif
+#if !PIN_EXISTS(E7_MS1)
+  #undef E7_MS1_PIN
+#endif
+#if !PIN_EXISTS(E7_MS2)
+  #undef E7_MS2_PIN
+#endif
+#if !PIN_EXISTS(E7_MS3)
+  #undef E7_MS3_PIN
+#endif
 
 #if !PIN_EXISTS(E0_STEP)
   #undef E0_STEP_PIN
@@ -208,6 +226,24 @@
 #if !PIN_EXISTS(E5_ENABLE)
   #undef E5_ENABLE_PIN
 #endif
+#if !PIN_EXISTS(E6_STEP)
+  #undef E6_STEP_PIN
+#endif
+#if !PIN_EXISTS(E6_DIR)
+  #undef E6_DIR_PIN
+#endif
+#if !PIN_EXISTS(E6_ENABLE)
+  #undef E6_ENABLE_PIN
+#endif
+#if !PIN_EXISTS(E7_STEP)
+  #undef E7_STEP_PIN
+#endif
+#if !PIN_EXISTS(E7_DIR)
+  #undef E7_DIR_PIN
+#endif
+#if !PIN_EXISTS(E7_ENABLE)
+  #undef E7_ENABLE_PIN
+#endif
 
 #if !PIN_EXISTS(X_CS)
   #undef X_CS_PIN
@@ -236,6 +272,12 @@
 #if !PIN_EXISTS(E5_CS)
   #undef E5_CS_PIN
 #endif
+#if !PIN_EXISTS(E6_CS)
+  #undef E6_CS_PIN
+#endif
+#if !PIN_EXISTS(E7_CS)
+  #undef E7_CS_PIN
+#endif
 
 #if !PIN_EXISTS(FAN)
   #undef FAN_PIN
@@ -247,6 +289,21 @@
 #if !PIN_EXISTS(FAN2)
   #undef FAN2_PIN
 #endif
+#if !PIN_EXISTS(FAN3)
+  #undef FAN3_PIN
+#endif
+#if !PIN_EXISTS(FAN4)
+  #undef FAN4_PIN
+#endif
+#if !PIN_EXISTS(FAN5)
+  #undef FAN5_PIN
+#endif
+#if !PIN_EXISTS(FAN6)
+  #undef FAN6_PIN
+#endif
+#if !PIN_EXISTS(FAN7)
+  #undef FAN7_PIN
+#endif
 #if !PIN_EXISTS(CONTROLLER_FAN)
   #undef CONTROLLER_FAN_PIN
 #endif
@@ -279,6 +336,12 @@
 #if !PIN_EXISTS(HEATER_5)
   #undef HEATER_5_PIN
 #endif
+#if !PIN_EXISTS(HEATER_6)
+  #undef HEATER_6_PIN
+#endif
+#if !PIN_EXISTS(HEATER_7)
+  #undef HEATER_7_PIN
+#endif
 #if !PIN_EXISTS(HEATER_BED)
   #undef HEATER_BED_PIN
 #endif
@@ -301,6 +364,12 @@
 #if !PIN_EXISTS(TEMP_5)
   #undef TEMP_5_PIN
 #endif
+#if !PIN_EXISTS(TEMP_6)
+  #undef TEMP_6_PIN
+#endif
+#if !PIN_EXISTS(TEMP_7)
+  #undef TEMP_7_PIN
+#endif
 #if !PIN_EXISTS(TEMP_BED)
   #undef TEMP_BED_PIN
 #endif
@@ -363,6 +432,12 @@
 #if PIN_EXISTS(TEMP_5) && TEMP_5_PIN < NUM_ANALOG_INPUTS
   REPORT_NAME_ANALOG(__LINE__, TEMP_5_PIN)
 #endif
+#if PIN_EXISTS(TEMP_6) && TEMP_6_PIN < NUM_ANALOG_INPUTS
+  REPORT_NAME_ANALOG(__LINE__, TEMP_6_PIN)
+#endif
+#if PIN_EXISTS(TEMP_7) && TEMP_7_PIN < NUM_ANALOG_INPUTS
+  REPORT_NAME_ANALOG(__LINE__, TEMP_7_PIN)
+#endif
 #if PIN_EXISTS(TEMP_BED) && TEMP_BED_PIN < NUM_ANALOG_INPUTS
   REPORT_NAME_ANALOG(__LINE__, TEMP_BED_PIN)
 #endif
@@ -686,6 +761,54 @@
 #if PIN_EXISTS(E5_STEP)
   REPORT_NAME_DIGITAL(__LINE__, E5_STEP_PIN)
 #endif
+#if PIN_EXISTS(E6_AUTO_FAN)
+  REPORT_NAME_DIGITAL(__LINE__, E6_AUTO_FAN_PIN)
+#endif
+#if PIN_EXISTS(E6_CS)
+  REPORT_NAME_DIGITAL(__LINE__, E6_CS_PIN)
+#endif
+#if PIN_EXISTS(E6_DIR)
+  REPORT_NAME_DIGITAL(__LINE__, E6_DIR_PIN)
+#endif
+#if PIN_EXISTS(E6_ENABLE)
+  REPORT_NAME_DIGITAL(__LINE__, E6_ENABLE_PIN)
+#endif
+#if PIN_EXISTS(E6_MS1)
+  REPORT_NAME_DIGITAL(__LINE__, E6_MS1_PIN)
+#endif
+#if PIN_EXISTS(E6_MS2)
+  REPORT_NAME_DIGITAL(__LINE__, E6_MS2_PIN)
+#endif
+#if PIN_EXISTS(E6_MS3)
+  REPORT_NAME_DIGITAL(__LINE__, E6_MS3_PIN)
+#endif
+#if PIN_EXISTS(E6_STEP)
+  REPORT_NAME_DIGITAL(__LINE__, E6_STEP_PIN)
+#endif
+#if PIN_EXISTS(E7_AUTO_FAN)
+  REPORT_NAME_DIGITAL(__LINE__, E7_AUTO_FAN_PIN)
+#endif
+#if PIN_EXISTS(E7_CS)
+  REPORT_NAME_DIGITAL(__LINE__, E7_CS_PIN)
+#endif
+#if PIN_EXISTS(E7_DIR)
+  REPORT_NAME_DIGITAL(__LINE__, E7_DIR_PIN)
+#endif
+#if PIN_EXISTS(E7_ENABLE)
+  REPORT_NAME_DIGITAL(__LINE__, E7_ENABLE_PIN)
+#endif
+#if PIN_EXISTS(E7_MS1)
+  REPORT_NAME_DIGITAL(__LINE__, E7_MS1_PIN)
+#endif
+#if PIN_EXISTS(E7_MS2)
+  REPORT_NAME_DIGITAL(__LINE__, E7_MS2_PIN)
+#endif
+#if PIN_EXISTS(E7_MS3)
+  REPORT_NAME_DIGITAL(__LINE__, E7_MS3_PIN)
+#endif
+#if PIN_EXISTS(E7_STEP)
+  REPORT_NAME_DIGITAL(__LINE__, E7_STEP_PIN)
+#endif
 #if defined(ENET_CRS) && ENET_CRS >= 0
   REPORT_NAME_DIGITAL(__LINE__, ENET_CRS)
 #endif
@@ -765,6 +888,18 @@
 #if PIN_EXISTS(FAN3)
   REPORT_NAME_DIGITAL(__LINE__, FAN3_PIN)
 #endif
+#if PIN_EXISTS(FAN4)
+  REPORT_NAME_DIGITAL(__LINE__, FAN4_PIN)
+#endif
+#if PIN_EXISTS(FAN5)
+  REPORT_NAME_DIGITAL(__LINE__, FAN5_PIN)
+#endif
+#if PIN_EXISTS(FAN6)
+  REPORT_NAME_DIGITAL(__LINE__, FAN6_PIN)
+#endif
+#if PIN_EXISTS(FAN7)
+  REPORT_NAME_DIGITAL(__LINE__, FAN7_PIN)
+#endif
 #if PIN_EXISTS(FIL_RUNOUT)
   REPORT_NAME_DIGITAL(__LINE__, FIL_RUNOUT_PIN)
 #endif
@@ -936,6 +1071,12 @@
 #if PIN_EXISTS(ORIG_E5_AUTO_FAN)
   REPORT_NAME_DIGITAL(__LINE__, ORIG_E5_AUTO_FAN_PIN)
 #endif
+#if PIN_EXISTS(ORIG_E6_AUTO_FAN)
+  REPORT_NAME_DIGITAL(__LINE__, ORIG_E6_AUTO_FAN_PIN)
+#endif
+#if PIN_EXISTS(ORIG_E7_AUTO_FAN)
+  REPORT_NAME_DIGITAL(__LINE__, ORIG_E7_AUTO_FAN_PIN)
+#endif
 #if PIN_EXISTS(PHOTOGRAPH)
   REPORT_NAME_DIGITAL(__LINE__, PHOTOGRAPH_PIN)
 #endif
@@ -1455,6 +1596,18 @@
 #if PIN_EXISTS(E5_SERIAL_RX)
   REPORT_NAME_DIGITAL(__LINE__, E5_SERIAL_RX_PIN)
 #endif
+#if PIN_EXISTS(E6_SERIAL_TX)
+  REPORT_NAME_DIGITAL(__LINE__, E6_SERIAL_TX_PIN)
+#endif
+#if PIN_EXISTS(E6_SERIAL_RX)
+  REPORT_NAME_DIGITAL(__LINE__, E6_SERIAL_RX_PIN)
+#endif
+#if PIN_EXISTS(E7_SERIAL_TX)
+  REPORT_NAME_DIGITAL(__LINE__, E7_SERIAL_TX_PIN)
+#endif
+#if PIN_EXISTS(E7_SERIAL_RX)
+  REPORT_NAME_DIGITAL(__LINE__, E7_SERIAL_RX_PIN)
+#endif
 #if PIN_EXISTS(L6470_CHAIN_SCK)
   REPORT_NAME_DIGITAL(__LINE__, L6470_CHAIN_SCK_PIN)
 #endif
diff --git a/Marlin/src/pins/sensitive_pins.h b/Marlin/src/pins/sensitive_pins.h
index 24daf354bfbe424c1c444c61772bdec08823437a..2492f318167e54ab39f115f4c067cc2d83a3d02b 100644
--- a/Marlin/src/pins/sensitive_pins.h
+++ b/Marlin/src/pins/sensitive_pins.h
@@ -277,6 +277,54 @@
   #endif
 #endif
 
+#define _E6_CS
+#define _E6_MS2
+#define _E6_MS3
+#define _E6_MS4
+
+#if E_NEEDED(6)
+  #if PIN_EXISTS(E6_CS) && AXIS_HAS_SPI(E6)
+    #undef _E6_CS
+    #define _E6_CS E6_CS_PIN,
+  #endif
+  #if PIN_EXISTS(E6_MS2)
+    #undef _E6_MS2
+    #define _E6_MS2 E6_MS2_PIN,
+  #endif
+  #if PIN_EXISTS(E6_MS3)
+    #undef _E6_MS3
+    #define _E6_MS3 E6_MS3_PIN,
+  #endif
+  #if PIN_EXISTS(E6_MS4)
+    #undef _E6_MS4
+    #define _E6_MS4 E6_MS4_PIN,
+  #endif
+#endif
+
+#define _E7_CS
+#define _E7_MS3
+#define _E7_MS4
+#define _E7_MS5
+
+#if E_NEEDED(7)
+  #if PIN_EXISTS(E7_CS) && AXIS_HAS_SPI(E7)
+    #undef _E7_CS
+    #define _E7_CS E7_CS_PIN,
+  #endif
+  #if PIN_EXISTS(E7_MS3)
+    #undef _E7_MS3
+    #define _E7_MS3 E7_MS3_PIN,
+  #endif
+  #if PIN_EXISTS(E7_MS4)
+    #undef _E7_MS4
+    #define _E7_MS4 E7_MS4_PIN,
+  #endif
+  #if PIN_EXISTS(E7_MS5)
+    #undef _E7_MS5
+    #define _E7_MS5 E7_MS5_PIN,
+  #endif
+#endif
+
 //
 // E Steppers
 //
@@ -287,6 +335,8 @@
 #define _E3_PINS
 #define _E4_PINS
 #define _E5_PINS
+#define _E6_PINS
+#define _E7_PINS
 
 #if EXTRUDERS
   #undef _E0_PINS
@@ -303,7 +353,9 @@
       #define _E2_PINS E2_STEP_PIN, E2_DIR_PIN, E2_ENABLE_PIN, _E2_CS _E2_MS1 _E2_MS2 _E2_MS3
     #endif
   #endif
+
 #elif EXTRUDERS > 1 || ENABLED(MIXING_EXTRUDER)
+
   #undef _E1_PINS
   #define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN, _E1_CS _E1_MS1 _E1_MS2 _E1_MS3
   #if EXTRUDERS > 2 || (ENABLED(MIXING_EXTRUDER) && MIXING_STEPPERS > 2)
@@ -318,10 +370,19 @@
         #if EXTRUDERS > 5 || (ENABLED(MIXING_EXTRUDER) && MIXING_STEPPERS > 5)
           #undef _E5_PINS
           #define _E5_PINS E5_STEP_PIN, E5_DIR_PIN, E5_ENABLE_PIN, _E5_CS _E5_MS1 _E5_MS2 _E5_MS3
+          #if EXTRUDERS > 6 || (ENABLED(MIXING_EXTRUDER) && MIXING_STEPPERS > 6)
+            #undef _E6_PINS
+            #define _E6_PINS E6_STEP_PIN, E6_DIR_PIN, E6_ENABLE_PIN, _E6_CS _E6_MS1 _E6_MS2 _E6_MS3
+            #if EXTRUDERS > 7 || (ENABLED(MIXING_EXTRUDER) && MIXING_STEPPERS > 7)
+              #undef _E7_PINS
+              #define _E7_PINS E7_STEP_PIN, E7_DIR_PIN, E7_ENABLE_PIN, _E7_CS _E7_MS1 _E7_MS2 _E7_MS3
+            #endif // EXTRUDERS > 7 || MIXING_EXTRUDER > 7
+          #endif // EXTRUDERS > 6 || MIXING_EXTRUDER > 6
         #endif // EXTRUDERS > 5 || MIXING_EXTRUDER > 5
       #endif // EXTRUDERS > 4 || MIXING_EXTRUDER > 4
     #endif // EXTRUDERS > 3 || MIXING_EXTRUDER > 3
   #endif // EXTRUDERS > 2 || MIXING_EXTRUDER > 2
+
 #endif // EXTRUDERS > 1 || MIXING_EXTRUDER
 
 //
@@ -334,6 +395,8 @@
 #define _H3_PINS
 #define _H4_PINS
 #define _H5_PINS
+#define _H6_PINS
+#define _H7_PINS
 
 #if HOTENDS
   #undef _H0_PINS
@@ -353,6 +416,14 @@
           #if HOTENDS > 5
             #undef _H5_PINS
             #define _H5_PINS HEATER_5_PIN, E5_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_5_PIN),
+            #if HOTENDS > 6
+              #undef _H6_PINS
+              #define _H6_PINS HEATER_6_PIN, E6_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_6_PIN),
+              #if HOTENDS > 7
+                #undef _H7_PINS
+                #define _H7_PINS HEATER_7_PIN, E7_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_7_PIN),
+              #endif // HOTENDS > 7
+            #endif // HOTENDS > 6
           #endif // HOTENDS > 5
         #endif // HOTENDS > 4
       #endif // HOTENDS > 3
@@ -539,6 +610,31 @@
 #else
   #define _FAN2
 #endif
+#if PIN_EXISTS(FAN3)
+  #define _FAN3 FAN3_PIN,
+#else
+  #define _FAN3
+#endif
+#if PIN_EXISTS(FAN4)
+  #define _FAN4 FAN4_PIN,
+#else
+  #define _FAN4
+#endif
+#if PIN_EXISTS(FAN5)
+  #define _FAN5 FAN5_PIN,
+#else
+  #define _FAN5
+#endif
+#if PIN_EXISTS(FAN6)
+  #define _FAN6 FAN6_PIN,
+#else
+  #define _FAN6
+#endif
+#if PIN_EXISTS(FAN7)
+  #define _FAN7 FAN7_PIN,
+#else
+  #define _FAN7
+#endif
 #if PIN_EXISTS(CONTROLLER_FAN)
   #define _FANC CONTROLLER_FAN_PIN,
 #else
@@ -550,9 +646,9 @@
 #endif
 
 #define SENSITIVE_PINS { \
-  _X_PINS _Y_PINS _Z_PINS _X2_PINS _Y2_PINS _Z2_PINS _Z3_PINS _Z4_PINS \
-  _Z_PROBE _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS _E5_PINS \
-  _BED_PINS _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS _H5_PINS \
-  _PS_ON _HEATER_BED _FAN0 _FAN1 _FAN2 _FANC \
+  _X_PINS _Y_PINS _Z_PINS _X2_PINS _Y2_PINS _Z2_PINS _Z3_PINS _Z4_PINS _Z_PROBE \
+  _E0_PINS _E1_PINS _E2_PINS _E3_PINS _E4_PINS _E5_PINS _E6_PINS _E7_PINS _BED_PINS \
+  _H0_PINS _H1_PINS _H2_PINS _H3_PINS _H4_PINS _H5_PINS _H6_PINS _H7_PINS \
+  _PS_ON _HEATER_BED _FAN0 _FAN1 _FAN2 _FAN3 _FAN4 _FAN5 _FAN6 _FAN7 _FANC \
   HAL_SENSITIVE_PINS \
 }
diff --git a/Marlin/src/pins/stm32/pins_BTT_GTR_V1_0.h b/Marlin/src/pins/stm32/pins_BTT_GTR_V1_0.h
new file mode 100644
index 0000000000000000000000000000000000000000..8ed2e50d253e2205afaf3f94c8e528dbdee962f1
--- /dev/null
+++ b/Marlin/src/pins/stm32/pins_BTT_GTR_V1_0.h
@@ -0,0 +1,391 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#pragma once
+
+#ifndef TARGET_STM32F4
+  #error "Oops! Select an STM32F4 board in 'Tools > Board.'"
+#elif HOTENDS > 8 || E_STEPPERS > 8
+  #error "BIGTREE GTR V1.0 supports up to 8 hotends / E-steppers."
+#elif HOTENDS > MAX_EXTRUDERS || E_STEPPERS > MAX_EXTRUDERS
+  #error "Marlin extruder/hotends limit! Increase MAX_EXTRUDERS to continue."
+#endif
+
+#define BOARD_INFO_NAME "BIGTREE GTR 1.0"
+
+// Use one of these or SDCard-based Emulation will be used
+//#define I2C_EEPROM
+//#define SRAM_EEPROM_EMULATION   // Use BackSRAM-based EEPROM emulation
+//#define FLASH_EEPROM_EMULATION  // Use Flash-based EEPROM emulation
+
+#define TP   // Enable to define servo and probe pins
+
+//
+// Servos
+//
+#if ENABLED(TP)
+  #define SERVO0_PIN       PB11
+#endif
+
+#define PS_ON_PIN          PH6
+
+//
+// Limit Switches
+//
+#define X_MIN_PIN          PF2
+#define X_MAX_PIN          PG14
+#define Y_MIN_PIN          PC13
+#define Y_MAX_PIN          PG9
+#define Z_MIN_PIN          PE0
+#define Z_MAX_PIN          PD3
+
+//
+// Pins on the extender
+//
+//#define X_MIN_PIN        PI4
+//#define X2_MIN_PIN       PF12
+//#define Y_MIN_PIN        PF4
+//#define Y2_MIN_PIN       PI7
+//#define Z_MIN_PIN        PF6
+
+#if ENABLED(TP) && !defined(Z_MIN_PROBE_PIN)
+  #define Z_MIN_PROBE_PIN PH11   // Z Probe must be PH11
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN         PC15
+#define X_DIR_PIN          PF0
+#define X_ENABLE_PIN       PF1
+#ifndef X_CS_PIN
+  #define X_CS_PIN         PC14
+#endif
+
+#define Y_STEP_PIN         PE3
+#define Y_DIR_PIN          PE2
+#define Y_ENABLE_PIN       PE4
+#ifndef Y_CS_PIN
+  #define Y_CS_PIN         PE1
+#endif
+
+#define Z_STEP_PIN         PB8
+#define Z_DIR_PIN          PB7   // PB7
+#define Z_ENABLE_PIN       PB9
+#ifndef Z_CS_PIN
+  #define Z_CS_PIN         PB5
+#endif
+
+#define E0_STEP_PIN        PG12
+#define E0_DIR_PIN         PG11
+#define E0_ENABLE_PIN      PG13
+#ifndef E0_CS_PIN
+  #define E0_CS_PIN        PG10
+#endif
+
+#define E1_STEP_PIN        PD6
+#define E1_DIR_PIN         PD5
+#define E1_ENABLE_PIN      PD7
+#ifndef E1_CS_PIN
+  #define E1_CS_PIN        PD4
+#endif
+
+#define E2_STEP_PIN        PD1
+#define E2_DIR_PIN         PD0
+#define E2_ENABLE_PIN      PD2
+#ifndef E2_CS_PIN
+  #define E2_CS_PIN        PC12
+#endif
+
+#define E3_STEP_PIN        PF3
+#define E3_DIR_PIN         PG3
+#define E3_ENABLE_PIN      PF8
+#ifndef E3_CS_PIN
+  #define E3_CS_PIN        PG4
+#endif
+
+#define E4_STEP_PIN        PD14
+#define E4_DIR_PIN         PD11
+#define E4_ENABLE_PIN      PG2
+#ifndef E4_CS_PIN
+  #define E4_CS_PIN        PE15
+#endif
+
+#define E5_STEP_PIN        PE12
+#define E5_DIR_PIN         PE10
+#define E5_ENABLE_PIN      PF14
+#ifndef E5_CS_PIN
+  #define E5_CS_PIN        PE7
+#endif
+
+#define E6_STEP_PIN        PG0
+#define E6_DIR_PIN         PG1
+#define E6_ENABLE_PIN      PE8
+#ifndef E6_CS_PIN
+  #define E6_CS_PIN        PF15
+#endif
+
+#define E7_STEP_PIN        PH12
+#define E7_DIR_PIN         PH15
+#define E7_ENABLE_PIN      PI0
+#ifndef E7_CS_PIN
+  #define E7_CS_PIN        PH14
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+  #ifndef TMC_SW_MOSI
+    #define TMC_SW_MOSI    PG15
+  #endif
+  #ifndef TMC_SW_MISO
+    #define TMC_SW_MISO    PB6
+  #endif
+  #ifndef TMC_SW_SCK
+    #define TMC_SW_SCK     PB3
+  #endif
+#endif
+
+#if HAS_TMC220x
+  /**
+   * TMC2208/TMC2209 stepper drivers
+   *
+   * Hardware serial communication ports.
+   * If undefined software serial is used according to the pins below
+   */
+  //#define X_HARDWARE_SERIAL  Serial
+  //#define X2_HARDWARE_SERIAL Serial1
+  //#define Y_HARDWARE_SERIAL  Serial1
+  //#define Y2_HARDWARE_SERIAL Serial1
+  //#define Z_HARDWARE_SERIAL  Serial1
+  //#define Z2_HARDWARE_SERIAL Serial1
+  //#define E0_HARDWARE_SERIAL Serial1
+  //#define E1_HARDWARE_SERIAL Serial1
+  //#define E2_HARDWARE_SERIAL Serial1
+  //#define E3_HARDWARE_SERIAL Serial1
+  //#define E4_HARDWARE_SERIAL Serial1
+  //#define E5_HARDWARE_SERIAL Serial1
+  //#define E6_HARDWARE_SERIAL Serial1
+  //#define E7_HARDWARE_SERIAL Serial1
+
+  //
+  // Software serial
+  //
+  #define X_SERIAL_TX_PIN  PC14
+  #define X_SERIAL_RX_PIN  PC14
+
+  #define Y_SERIAL_TX_PIN  PE1
+  #define Y_SERIAL_RX_PIN  PE1
+
+  #define Z_SERIAL_TX_PIN  PB5
+  #define Z_SERIAL_RX_PIN  PB5
+
+  #define E0_SERIAL_TX_PIN PG10
+  #define E0_SERIAL_RX_PIN PG10
+
+  #define E1_SERIAL_TX_PIN PD4
+  #define E1_SERIAL_RX_PIN PD4
+
+  #define E2_SERIAL_TX_PIN PC12
+  #define E2_SERIAL_RX_PIN PC12
+
+  #define E3_SERIAL_TX_PIN PG4
+  #define E3_SERIAL_RX_PIN PG4
+
+  #define E4_SERIAL_TX_PIN PE15
+  #define E4_SERIAL_RX_PIN PE15
+
+  #define E5_SERIAL_TX_PIN PE7
+  #define E5_SERIAL_RX_PIN PE7
+
+  #define E6_SERIAL_TX_PIN PF15
+  #define E6_SERIAL_RX_PIN PF15
+
+  #define E7_SERIAL_TX_PIN PH14
+  #define E7_SERIAL_RX_PIN PH14
+
+  // Reduce baud rate to improve software serial reliability
+  #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN         PC1   // T1 <-> E0
+#define TEMP_1_PIN         PC2   // T2 <-> E1
+#define TEMP_2_PIN         PC3   // T3 <-> E2
+
+#define TEMP_3_PIN         PA3   // T4 <-> E3
+#define TEMP_4_PIN         PF9   // T5 <-> E4
+#define TEMP_5_PIN         PF10  // T6 <-> E5
+//#define TEMP_6_PIN         PF7   // T7 <-> E6
+//#define TEMP_7_PIN         PF5   // T8 <-> E7
+
+#define TEMP_BED_PIN       PC0   // T0 <-> Bed
+
+// SPI for Max6675 or Max31855 Thermocouple
+// Uses a separate SPI bus
+// If you have a two-way thermocouple, you can customize two THERMO_CSx_PIN pins (x:1~2)
+
+#define THERMO_SCK_PIN     PI1   // SCK
+#define THERMO_DO_PIN      PI2   // MISO
+#define THERMO_CS1_PIN     PH9   // CS1
+#define THERMO_CS2_PIN     PH2   // CS2
+
+#define MAX6675_SS_PIN     THERMO_CS1_PIN
+#define MAX6675_SS2_PIN    THERMO_CS2_PIN
+#define MAX6675_SCK_PIN    THERMO_SCK_PIN
+#define MAX6675_DO_PIN     THERMO_DO_PIN
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN       PB1   // Heater0
+#define HEATER_1_PIN       PA1   // Heater1
+#define HEATER_2_PIN       PB0   // Heater2
+
+#define HEATER_3_PIN       PD15  // Heater3
+#define HEATER_4_PIN       PD13  // Heater4
+#define HEATER_5_PIN       PD12  // Heater5
+//#define HEATER_6_PIN       PE13 // Heater6
+//#define HEATER_7_PIN       PI6  // Heater7
+
+#define HEATER_BED_PIN     PA2   // Hotbed
+
+#define FAN_PIN            PE5   // Fan0
+#define FAN1_PIN           PE6   // Fan1
+#define FAN2_PIN           PC8   // Fan2
+
+#define FAN3_PIN           PI5   // Fan3
+#define FAN4_PIN           PE9   // Fan4
+#define FAN5_PIN           PE11  // Fan5
+//#define FAN6_PIN           PC9   // Fan6
+//#define FAN7_PIN           PE14  // Fan7
+
+//
+// By default the onboard SD (SPI1) is enabled
+//
+#define CUSTOM_SPI_PINS
+#if DISABLED(CUSTOM_SPI_PINS)
+  #define SDSS             PB12
+#endif
+
+// HAL SPI1 pins group
+#if ENABLED(CUSTOM_SPI_PINS)
+  #define SDSS             PA4
+  #define SD_DETECT_PIN    PC4
+  #define LCD_SDSS         PA4
+
+  #define SCK_PIN          PA5
+  #define MISO_PIN         PA6
+  #define MOSI_PIN         PA7
+  #define SS_PIN           PA4   // Chip select for SD card used by Marlin
+#endif
+
+/**
+ *               _____                                             _____
+ *           NC | · · | GND                                    5V | · · | GND
+ *        RESET | · · | PB10(SD_DETECT)             (LCD_D7)  PG5 | · · | PG6  (LCD_D6)
+ *   (MOSI)PB15 | · · | PH10(BTN_EN2)               (LCD_D5)  PG7 | · · | PG8  (LCD_D4)
+ *  (SD_SS)PB12 | · · | PD10(BTN_EN1)               (LCD_RS)  PA8 | · · | PC10 (LCD_EN)
+ *    (SCK)PB13 | · · | PB14(MISO)                 (BTN_ENC) PA15 | · · | PC11  (BEEPER)
+ *                ̄ ̄                                                ̄ ̄
+ *               EXP2                                              EXP1
+ */
+
+//
+// LCDs and Controllers
+//
+#if HAS_SPI_LCD
+  #define BEEPER_PIN       PC11
+  #define BTN_ENC          PA15
+
+  #if ENABLED(CR10_STOCKDISPLAY)
+
+    #define LCD_PINS_RS    PA8
+
+    #define BTN_EN1        PD10
+    #define BTN_EN2        PH10
+
+    #define LCD_PINS_ENABLE PG7
+    #define LCD_PINS_D4    PG8
+
+    //#undef ST7920_DELAY_1
+    //#undef ST7920_DELAY_2
+    //#undef ST7920_DELAY_3
+
+  #else
+
+    #define LCD_PINS_RS    PA8
+
+    #define BTN_EN1        PD10
+    #define BTN_EN2        PH10
+
+    #if DISABLED(CUSTOM_SPI_PINS)
+      #define SD_DETECT_PIN PB10
+      #define LCD_SDSS     PB12
+    #endif
+
+    #define LCD_PINS_ENABLE PC10
+    #define LCD_PINS_D4    PG8
+
+    #if ENABLED(FYSETC_MINI_12864)
+      #define DOGLCD_CS    PC10
+      #define DOGLCD_A0    PA8
+      //#define LCD_BACKLIGHT_PIN -1
+      #define LCD_RESET_PIN PG8   // Must be high or open for LCD to operate normally.
+      #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0)
+        #ifndef RGB_LED_R_PIN
+          #define RGB_LED_R_PIN PG7
+        #endif
+        #ifndef RGB_LED_G_PIN
+          #define RGB_LED_G_PIN PG6
+        #endif
+        #ifndef RGB_LED_B_PIN
+          #define RGB_LED_B_PIN PG5
+        #endif
+      #elif ENABLED(FYSETC_MINI_12864_2_1)
+        #define NEOPIXEL_PIN    PF13
+      #endif
+    #endif // !FYSETC_MINI_12864
+
+    #if ENABLED(ULTIPANEL)
+      #define LCD_PINS_D5  PG7
+      #define LCD_PINS_D6  PG6
+      #define LCD_PINS_D7  PG5
+    #endif
+
+  #endif
+
+  // Alter timing for graphical display
+  #if HAS_GRAPHICAL_LCD
+    #define BOARD_ST7920_DELAY_1 DELAY_NS(96)
+    #define BOARD_ST7920_DELAY_2 DELAY_NS(48)
+    #define BOARD_ST7920_DELAY_3 DELAY_NS(600)
+  #endif
+
+  //#define DOGLCD_CS      PB12
+  //#define DOGLCD_A0      PA8
+  //#define LCD_PINS_DC    PB14
+  //#define DOGLCD_MOSI    PB15
+
+#endif // HAS_SPI_LCD
diff --git a/buildroot/share/PlatformIO/variants/BIGTREE_SKR_PRO_1v1/PeripheralPins.c b/buildroot/share/PlatformIO/variants/BIGTREE_SKR_PRO_1v1/PeripheralPins.c
index cb2d99578525ffd6412dad94c90509c9db365d5b..fd1f296459575d66ef5d7693a47cf4742c1fdb0f 100644
--- a/buildroot/share/PlatformIO/variants/BIGTREE_SKR_PRO_1v1/PeripheralPins.c
+++ b/buildroot/share/PlatformIO/variants/BIGTREE_SKR_PRO_1v1/PeripheralPins.c
@@ -90,8 +90,13 @@ const PinMap PinMap_I2C_SDA[] = {
   {PB_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
   {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
   {PC_9,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
-  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
-    {PF_0,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
+    #if STM32F4X_PIN_NUM >= 176
+      {PH_5,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+      {PH_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
+  	#else
+      {PF_0,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+    #endif
   #endif
   {NC,    NP,    0}
 };
@@ -103,8 +108,14 @@ const PinMap PinMap_I2C_SCL[] = {
   {PB_6,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
   {PB_8,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
   {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
-  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
-    {PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
+    #if STM32F4X_PIN_NUM >= 176
+      //{PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+      {PH_4,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+      {PH_7,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
+  	#else
+      {PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
+    #endif
   #endif
   {NC,    NP,    0}
 };
@@ -141,8 +152,10 @@ const PinMap PinMap_PWM[] = {
    */
   //{PA_0,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
   //{PA_0,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
-  //{PA_1,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
-  //{PA_2,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
+  {PA_1,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 is bltouch analog?
+  {PA_2,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 is bltouch analog?
+  //{PA_1,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
+  //{PA_2,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
   //{PA_2,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
   //{PA_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
   //{PA_3,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
@@ -173,7 +186,7 @@ const PinMap PinMap_PWM[] = {
   //{PB_9,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
   //{PB_9,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
   //{PB_10, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
-  //{PB_11, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
+  {PB_11, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
   //{PB_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
   //{PB_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
   //{PB_14, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
@@ -186,21 +199,28 @@ const PinMap PinMap_PWM[] = {
   //{PC_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
   //{PC_8,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
   //{PC_9,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
-  //{PD_13, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
-  //{PD_15, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
+  {PD_13, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
+  {PD_15, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
   //{PE_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
-  //{PE_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
+  {PE_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
   //{PE_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
-  //{PE_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
+  {PE_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
   //{PE_12, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
-  //{PE_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
-  //{PE_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
+  {PE_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
+  {PE_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
   #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
     //{PF_6,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
     //{PF_7,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
     //{PF_8,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
     //{PF_9,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
   #endif
+  #if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
+    {PH_10,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
+    {PH_6,  TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
+    //{PH_11,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
+    {PI_5,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
+    {PI_6,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
+  #endif
   {NC,    NP,    0}
 };
 #endif
@@ -275,7 +295,8 @@ const PinMap PinMap_UART_CTS[] = {
 
 #ifdef HAL_SPI_MODULE_ENABLED
 const PinMap PinMap_SPI_MOSI[] = {
-  {PB_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
+  //{PB_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
+  {PA_7,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
   {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
   {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
   {NC,    NP,    0}
diff --git a/platformio.ini b/platformio.ini
index 9cf2c918ed71867cb99b0dc2477e5ac624af4344..df3dcb0f667bf44652bd26733bfac70641cfc951 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -586,7 +586,7 @@ lib_ignore    = Adafruit NeoPixel
 
 #
 # STM32F401VE
-# 'STEVAL-3DP001)' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html
+# 'STEVAL-3DP001V1' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html
 #
 [env:STM32F401VE_STEVAL]
 platform          = ststm32
@@ -677,6 +677,37 @@ src_filter        = ${common.default_src_filter} +<src/HAL/HAL_STM32>
 debug_tool        = stlink
 debug_init_break  =
 
+#
+# Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4)
+#
+[env:BIGTREE_GTR_V1_0]
+platform          = ststm32@>=5.7.0
+framework         = arduino
+platform_packages = framework-arduinoststm32@>=3.10700.191028
+board             = BigTree_SKR_Pro
+extra_scripts     = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
+build_flags       = ${common.build_flags}
+  -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407IG\"
+  -DTARGET_STM32F4 -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000
+  -DHAVE_HWSERIAL3
+  -DHAVE_HWSERIAL6
+  -DPIN_SERIAL3_RX=PD_9
+  -DPIN_SERIAL3_TX=PD_8
+  -DPIN_SERIAL6_RX=PC_7
+  -DPIN_SERIAL6_TX=PC_6
+
+  -IMarlin/src/HAL/HAL_STM32
+lib_deps          =
+  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
+  LiquidCrystal
+  TMCStepper@>=0.5.2,<1.0.0
+  Adafruit NeoPixel
+  LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip
+  Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip
+lib_ignore        = SoftwareSerial, SoftwareSerialM
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_STM32>
+monitor_speed     = 250000
+
 #
 # BigTreeTech BTT002 (STM32F407VET6 ARM Cortex-M4)
 #