diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index fb52a30690..9125512f40 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -237,6 +237,13 @@ void GcodeSuite::G28() { return; } + #if NUM_AXES >= 2 + if (parser.seen_test('F')) + homing_feedrate_mm_m.x = homing_feedrate_mm_m.y = parser.floatval('F'); + else + homing_feedrate_mm_m = xyz_feedrate_t(HOMING_FEEDRATE_MM_M); + #endif + #if ENABLED(FULL_REPORT_TO_HOST_FEATURE) const M_StateEnum old_grblstate = M_State_grbl; set_and_report_grblstate(M_HOMING); diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index bdf99b0ed5..8d2fe21e57 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -141,6 +141,9 @@ xyze_pos_t destination; // {0} #endif feedRate_t feedrate_mm_s = MMM_TO_MMS(DEFAULT_FEEDRATE_MM_M); int16_t feedrate_percentage = 100; +#if NUM_AXES >= 2 + xyz_feedrate_t homing_feedrate_mm_m = HOMING_FEEDRATE_MM_M; +#endif // Cartesian conversion result goes here: xyz_pos_t cartes; diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 2dcc8202e8..de23aaab06 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -79,7 +79,12 @@ extern xyz_pos_t cartes; * Feed rates are often configured with mm/m * but the planner and stepper like mm/s units. */ -constexpr xyz_feedrate_t homing_feedrate_mm_m = HOMING_FEEDRATE_MM_M; +#if NUM_AXES >= 2 + extern xyz_feedrate_t homing_feedrate_mm_m; +#else + constexpr xyz_feedrate_t homing_feedrate_mm_m = HOMING_FEEDRATE_MM_M; +#endif + FORCE_INLINE feedRate_t homing_feedrate(const AxisEnum a) { float v = TERN0(HAS_Z_AXIS, homing_feedrate_mm_m.z); #if DISABLED(DELTA)