diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index ee2453615ca64085997de95057f8369e66d7c850..837f1b5d81f5c544982a1768234227b141e6bc30 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -254,6 +254,7 @@ inline bool IsStopped() { return !Running; }
bool enqueue_and_echo_command(const char* cmd, bool say_ok=false); //put a single ASCII command at the end of the current buffer or return false when it is full
void enqueue_and_echo_command_now(const char* cmd); // enqueue now, only return when the command has been enqueued
void enqueue_and_echo_commands_P(const char* cmd); //put one or many ASCII commands at the end of the current buffer, read from flash
+void clear_command_queue();
void clamp_to_software_endstops(float target[3]);
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 53053221f23133c5696830cb0c84072ec117310d..1e98877bec78222a25d3b4127b21b9da660d4528 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -613,6 +613,11 @@ void enqueue_and_echo_commands_P(const char* pgcode) {
drain_queued_commands_P(); // first command executed asap (when possible)
}
+void clear_command_queue() {
+ cmd_queue_index_r = cmd_queue_index_w;
+ commands_in_queue = 0;
+}
+
/**
* Once a new command is in the ring buffer, call this to commit it
*/
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 9080f7e1c0fbcf8d7d073f143a5c7a37796d0431..c1526e4a44696b4446d1172dc1205d248c734822 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -483,6 +483,7 @@ inline void line_to_current(AxisEnum axis) {
static void lcd_sdcard_stop() {
stepper.quick_stop();
set_current_position_from_planner();
+ clear_command_queue();
card.sdprinting = false;
card.closefile();
print_job_timer.stop();