diff --git a/Marlin/src/HAL/shared/Marduino.h b/Marlin/src/HAL/shared/Marduino.h
index ddc3451fbe..3b5a68a373 100644
--- a/Marlin/src/HAL/shared/Marduino.h
+++ b/Marlin/src/HAL/shared/Marduino.h
@@ -87,3 +87,10 @@
 #endif
 
 #include "progmem.h"
+
+class __FlashStringHelper;
+typedef const __FlashStringHelper* FSTR_P;
+#ifndef FPSTR
+  #define FPSTR(S) (reinterpret_cast<FSTR_P>(S))
+#endif
+#define FTOP(S) (reinterpret_cast<const char*>(S))
diff --git a/Marlin/src/HAL/shared/progmem.h b/Marlin/src/HAL/shared/progmem.h
index 539d02705e..a76b379bb8 100644
--- a/Marlin/src/HAL/shared/progmem.h
+++ b/Marlin/src/HAL/shared/progmem.h
@@ -38,7 +38,8 @@
 #define PSTR(str) (str)
 #endif
 #ifndef F
-#define F(str) (str)
+class __FlashStringHelper;
+#define F(str) (reinterpret_cast<const __FlashStringHelper *>(PSTR(str)))
 #endif
 #ifndef _SFR_BYTE
 #define _SFR_BYTE(n) (n)
diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h
index e11a6cd03e..72099fb408 100644
--- a/Marlin/src/core/types.h
+++ b/Marlin/src/core/types.h
@@ -26,13 +26,6 @@
 
 #include "../inc/MarlinConfigPre.h"
 
-class __FlashStringHelper;
-typedef const __FlashStringHelper* FSTR_P;
-#ifndef FPSTR
-  #define FPSTR(S) (reinterpret_cast<FSTR_P>(S))
-#endif
-#define FTOP(S) (reinterpret_cast<const char*>(S))
-
 //
 // Conditional type assignment magic. For example...
 //