diff --git a/Marlin/fastio.h b/Marlin/fastio.h
index fff057a1c713644d87aed45f77ce9c629ed42a39..6cc2e85a72bb439a8bca9f5bdcd21475887fff3d 100644
--- a/Marlin/fastio.h
+++ b/Marlin/fastio.h
@@ -66,7 +66,7 @@
#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)
/// toggle a pin
-#define _TOGGLE(IO) do {DIO ## IO ## _RPORT = MASK(DIO ## IO ## _PIN); } while (0)
+#define _TOGGLE(IO) do {DIO ## IO ## _RPORT ^= MASK(DIO ## IO ## _PIN); } while (0)
/// set pin as input
#define _SET_INPUT(IO) do {DIO ## IO ## _DDR &= ~MASK(DIO ## IO ## _PIN); } while (0)