diff --git a/Marlin/src/HAL/platforms.h b/Marlin/src/HAL/HAL.h
similarity index 98%
rename from Marlin/src/HAL/platforms.h
rename to Marlin/src/HAL/HAL.h
index 48405f49f7..0ae916da9a 100644
--- a/Marlin/src/HAL/platforms.h
+++ b/Marlin/src/HAL/HAL.h
@@ -50,3 +50,5 @@
 #define XSTR_(M) #M
 #define XSTR(M) XSTR_(M)
 #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL_PLATFORM/NAME)
+
+#include HAL_PATH(.,HAL.h)
diff --git a/Marlin/src/HAL/HAL_AVR/HAL.h b/Marlin/src/HAL/HAL_AVR/HAL.h
index 38405e9441..763b360e98 100644
--- a/Marlin/src/HAL/HAL_AVR/HAL.h
+++ b/Marlin/src/HAL/HAL_AVR/HAL.h
@@ -22,8 +22,6 @@
 // Includes
 // --------------------------------------------------------------------------
 
-#include <stdint.h>
-
 #include "../shared/Marduino.h"
 #include "../shared/HAL_SPI.h"
 #include "fastio_AVR.h"
@@ -33,9 +31,11 @@
 #ifdef USBCON
   #include "HardwareSerial.h"
 #else
+  #define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
   #include "MarlinSerial.h"
 #endif
 
+#include <stdint.h>
 #include <util/delay.h>
 #include <avr/eeprom.h>
 #include <avr/pgmspace.h>
diff --git a/Marlin/src/HAL/HAL_AVR/MarlinSerial.h b/Marlin/src/HAL/HAL_AVR/MarlinSerial.h
index 8849212d97..f3e2086b2c 100644
--- a/Marlin/src/HAL/HAL_AVR/MarlinSerial.h
+++ b/Marlin/src/HAL/HAL_AVR/MarlinSerial.h
@@ -275,7 +275,6 @@
 
 #endif // !USBCON
 
-
 #ifdef INTERNAL_SERIAL_PORT
   template <uint8_t serial>
   struct MarlinInternalSerialCfg {
diff --git a/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h b/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
index 4446367d15..c313f95ced 100644
--- a/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
+++ b/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
@@ -36,7 +36,6 @@
  * (Located in Marlin/buildroot/share/pin_interrupt_test/pin_interrupt_test.ino)
  */
 
-#include "../../core/macros.h"
 #include "../../module/endstops.h"
 
 #include <stdint.h>
diff --git a/Marlin/src/HAL/HAL_DUE/fastio_Due.h b/Marlin/src/HAL/HAL_DUE/fastio_Due.h
index e44d1d1ee6..576e8536b4 100644
--- a/Marlin/src/HAL/HAL_DUE/fastio_Due.h
+++ b/Marlin/src/HAL/HAL_DUE/fastio_Due.h
@@ -39,6 +39,8 @@
 
 #include <pins_arduino.h>
 
+#include "../../inc/MarlinConfigPre.h"
+
 /**
  * Utility functions
  */
diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.h b/Marlin/src/HAL/HAL_LPC1768/HAL.h
index 32765bd0ea..d96bf7c909 100644
--- a/Marlin/src/HAL/HAL_LPC1768/HAL.h
+++ b/Marlin/src/HAL/HAL_LPC1768/HAL.h
@@ -34,7 +34,7 @@ void HAL_init(void);
 #include <stdarg.h>
 #include <algorithm>
 
-extern "C" volatile millis_t _millis;
+extern "C" volatile uint32_t _millis;
 
 #include "../shared/Marduino.h"
 #include "../shared/math_32bit.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL_sdio_STM32F1.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL_sdio_STM32F1.cpp
index 4f90b26e68..7dd1767d2c 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL_sdio_STM32F1.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL_sdio_STM32F1.cpp
@@ -124,6 +124,8 @@ bool SDIO_ReadBlock(uint32_t blockAddress, uint8_t *data) {
   return false;
 }
 
+uint32_t millis();
+
 bool SDIO_WriteBlock(uint32_t blockAddress, const uint8_t *data) {
   if (SDIO_GetCardState() != SDIO_CARD_TRANSFER) return false;
   if (blockAddress >= SdCard.LogBlockNbr) return false;
diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp
index d746dc9730..8622c947fc 100644
--- a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp
+++ b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp
@@ -1,10 +1,28 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * 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/>.
+ *
+ */
 #ifdef __MK20DX256__
 
 #include "../../inc/MarlinConfig.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 namespace HAL {
 namespace PersistentStore {
diff --git a/Marlin/src/HAL/shared/I2cEeprom.cpp b/Marlin/src/HAL/shared/I2cEeprom.cpp
index cc98ac183d..d9faa36da0 100644
--- a/Marlin/src/HAL/shared/I2cEeprom.cpp
+++ b/Marlin/src/HAL/shared/I2cEeprom.cpp
@@ -33,7 +33,7 @@
 // Includes
 // --------------------------------------------------------------------------
 
-#include HAL_PATH(.., HAL.h)
+#include "../HAL.h"
 #include <Wire.h>
 
 // --------------------------------------------------------------------------
diff --git a/Marlin/src/HAL/shared/SpiEeprom.cpp b/Marlin/src/HAL/shared/SpiEeprom.cpp
index cbdb4d2985..35e7d9b0a9 100644
--- a/Marlin/src/HAL/shared/SpiEeprom.cpp
+++ b/Marlin/src/HAL/shared/SpiEeprom.cpp
@@ -29,7 +29,7 @@
 
 #if ENABLED(SPI_EEPROM)
 
-#include HAL_PATH(.., HAL.h)
+#include "../HAL.h"
 
 #define CMD_WREN  6   // WREN
 #define CMD_READ  2   // WRITE
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index 918b3c6d1b..a6e546a4a8 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -21,8 +21,6 @@
  */
 #pragma once
 
-#include "minmax.h"
-
 #define NUM_AXIS 4
 #define ABCE 4
 #define XYZE 4
@@ -75,10 +73,16 @@
 #undef _BV
 #define _BV(n) (1<<(n))
 #define TEST(n,b) !!((n)&_BV(b))
-#define SBI(n,b) (n |= _BV(b))
-#define CBI(n,b) (n &= ~_BV(b))
 #define SET_BIT_TO(N,B,TF) do{ if (TF) SBI(N,B); else CBI(N,B); }while(0)
 
+#ifndef SBI
+  #define SBI(A,B) (A |= (1 << (B)))
+#endif
+
+#ifndef CBI
+  #define CBI(A,B) (A &= ~(1 << (B)))
+#endif
+
 #define _BV32(b) (1UL << (b))
 #define TEST32(n,b) !!((n)&_BV32(b))
 #define SBI32(n,b) (n |= _BV32(b))
@@ -269,3 +273,58 @@
 #else
   #define I2C_ADDRESS(A) A
 #endif
+
+// Use NUM_ARGS(__VA_ARGS__) to get the number of variadic arguments
+#define _NUM_ARGS(_0,_24_,_23,_22,_21,_20,_19,_18,_17,_16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,_1,N,...) N
+#define NUM_ARGS(V...) _NUM_ARGS(0,V,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
+
+#ifdef __cplusplus
+
+  #ifndef _MINMAX_H_
+  #define _MINMAX_H_
+
+    extern "C++" {
+
+      // C++11 solution that is standards compliant. Return type is deduced automatically
+      template <class L, class R> static inline constexpr auto _MIN(const L lhs, const R rhs) -> decltype(lhs + rhs) {
+        return lhs < rhs ? lhs : rhs;
+      }
+      template <class L, class R> static inline constexpr auto _MAX(const L lhs, const R rhs) -> decltype(lhs + rhs) {
+        return lhs > rhs ? lhs : rhs;
+      }
+      template<class T, class ... Ts> static inline constexpr const T _MIN(T V, Ts... Vs) { return _MIN(V, _MIN(Vs...)); }
+      template<class T, class ... Ts> static inline constexpr const T _MAX(T V, Ts... Vs) { return _MAX(V, _MAX(Vs...)); }
+
+    }
+
+  #endif
+
+#else
+
+  #define MIN_2(a,b)      ((a)<(b)?(a):(b))
+  #define MIN_3(a,...)    MIN_2(a,MIN_2(__VA_ARGS__))
+  #define MIN_4(a,...)    MIN_2(a,MIN_3(__VA_ARGS__))
+  #define MIN_5(a,...)    MIN_2(a,MIN_4(__VA_ARGS__))
+  #define MIN_6(a,...)    MIN_2(a,MIN_5(__VA_ARGS__))
+  #define MIN_7(a,...)    MIN_2(a,MIN_6(__VA_ARGS__))
+  #define MIN_8(a,...)    MIN_2(a,MIN_7(__VA_ARGS__))
+  #define MIN_9(a,...)    MIN_2(a,MIN_8(__VA_ARGS__))
+  #define MIN_10(a,...)   MIN_2(a,MIN_9(__VA_ARGS__))
+  #define __MIN_N(N, ...) MIN_##N(__VA_ARGS__)
+  #define _MIN_N(N, ...)  __MIN_N(N,__VA_ARGS__)
+  #define _MIN(...)       _MIN_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
+
+  #define MAX_2(a,b)      ((a)>(b)?(a):(b))
+  #define MAX_3(a,...)    MAX_2(a,MAX_2(__VA_ARGS__))
+  #define MAX_4(a,...)    MAX_2(a,MAX_3(__VA_ARGS__))
+  #define MAX_5(a,...)    MAX_2(a,MAX_4(__VA_ARGS__))
+  #define MAX_6(a,...)    MAX_2(a,MAX_5(__VA_ARGS__))
+  #define MAX_7(a,...)    MAX_2(a,MAX_6(__VA_ARGS__))
+  #define MAX_8(a,...)    MAX_2(a,MAX_7(__VA_ARGS__))
+  #define MAX_9(a,...)    MAX_2(a,MAX_8(__VA_ARGS__))
+  #define MAX_10(a,...)   MAX_2(a,MAX_9(__VA_ARGS__))
+  #define __MAX_N(N, ...) MAX_##N(__VA_ARGS__)
+  #define _MAX_N(N, ...)  __MAX_N(N,__VA_ARGS__)
+  #define _MAX(...)       _MAX_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
+
+#endif
diff --git a/Marlin/src/core/minmax.h b/Marlin/src/core/minmax.h
deleted file mode 100644
index 64294711ff..0000000000
--- a/Marlin/src/core/minmax.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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
-
-// Use NUM_ARGS(__VA_ARGS__) to get the number of variadic arguments
-#define _NUM_ARGS(_0,_24_,_23,_22,_21,_20,_19,_18,_17,_16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,_1,N,...) N
-#define NUM_ARGS(V...) _NUM_ARGS(0,V,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
-
-#ifdef __cplusplus
-
-  #ifndef _MINMAX_H_
-  #define _MINMAX_H_
-
-    extern "C++" {
-
-      // C++11 solution that is standards compliant. Return type is deduced automatically
-      template <class L, class R> static inline constexpr auto _MIN(const L lhs, const R rhs) -> decltype(lhs + rhs) {
-        return lhs < rhs ? lhs : rhs;
-      }
-      template <class L, class R> static inline constexpr auto _MAX(const L lhs, const R rhs) -> decltype(lhs + rhs) {
-        return lhs > rhs ? lhs : rhs;
-      }
-      template<class T, class ... Ts> static inline constexpr const T _MIN(T V, Ts... Vs) { return _MIN(V, _MIN(Vs...)); }
-      template<class T, class ... Ts> static inline constexpr const T _MAX(T V, Ts... Vs) { return _MAX(V, _MAX(Vs...)); }
-
-    }
-
-  #endif
-
-#else
-
-  #define MIN_2(a,b)      ((a)<(b)?(a):(b))
-  #define MIN_3(a,...)    MIN_2(a,MIN_2(__VA_ARGS__))
-  #define MIN_4(a,...)    MIN_2(a,MIN_3(__VA_ARGS__))
-  #define MIN_5(a,...)    MIN_2(a,MIN_4(__VA_ARGS__))
-  #define MIN_6(a,...)    MIN_2(a,MIN_5(__VA_ARGS__))
-  #define MIN_7(a,...)    MIN_2(a,MIN_6(__VA_ARGS__))
-  #define MIN_8(a,...)    MIN_2(a,MIN_7(__VA_ARGS__))
-  #define MIN_9(a,...)    MIN_2(a,MIN_8(__VA_ARGS__))
-  #define MIN_10(a,...)   MIN_2(a,MIN_9(__VA_ARGS__))
-  #define __MIN_N(N, ...) MIN_##N(__VA_ARGS__)
-  #define _MIN_N(N, ...)  __MIN_N(N,__VA_ARGS__)
-  #define MIN(...)        _MIN_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
-
-  #define MAX_2(a,b)      ((a)>(b)?(a):(b))
-  #define MAX_3(a,...)    MAX_2(a,MAX_2(__VA_ARGS__))
-  #define MAX_4(a,...)    MAX_2(a,MAX_3(__VA_ARGS__))
-  #define MAX_5(a,...)    MAX_2(a,MAX_4(__VA_ARGS__))
-  #define MAX_6(a,...)    MAX_2(a,MAX_5(__VA_ARGS__))
-  #define MAX_7(a,...)    MAX_2(a,MAX_6(__VA_ARGS__))
-  #define MAX_8(a,...)    MAX_2(a,MAX_7(__VA_ARGS__))
-  #define MAX_9(a,...)    MAX_2(a,MAX_8(__VA_ARGS__))
-  #define MAX_10(a,...)   MAX_2(a,MAX_9(__VA_ARGS__))
-  #define __MAX_N(N, ...) MAX_##N(__VA_ARGS__)
-  #define _MAX_N(N, ...)  __MAX_N(N,__VA_ARGS__)
-  #define MAX(...)        _MAX_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
-
-#endif
diff --git a/Marlin/src/core/serial.h b/Marlin/src/core/serial.h
index e466966698..d6c3291f69 100644
--- a/Marlin/src/core/serial.h
+++ b/Marlin/src/core/serial.h
@@ -21,9 +21,12 @@
  */
 #pragma once
 
-#include "../inc/MarlinConfigPre.h"
-#include "../core/minmax.h"
-#include HAL_PATH(../HAL, HAL.h)
+//#include <stdint.h>
+
+//#include "../inc/MarlinConfigPre.h"
+#include "../HAL/HAL.h"
+
+// #include "../core/macros.h"
 
 /**
  * Define debug bit-masks
diff --git a/Marlin/src/inc/MarlinConfig.h b/Marlin/src/inc/MarlinConfig.h
index 94aa1939ba..8e8bf9682a 100644
--- a/Marlin/src/inc/MarlinConfig.h
+++ b/Marlin/src/inc/MarlinConfig.h
@@ -27,16 +27,12 @@
 
 #include "MarlinConfigPre.h"
 
-#include HAL_PATH(../HAL, HAL.h)
+#include "../HAL/HAL.h"
 
 #include "../pins/pins.h"
 
 #include HAL_PATH(../HAL, spi_pins.h)
 
-#if defined(__AVR__) && !defined(USBCON)
-  #define HardwareSerial_h // trick to disable the standard HWserial
-#endif
-
 #include "Conditionals_post.h"
 #include "SanityCheck.h"
 
@@ -47,4 +43,3 @@
 #include "../core/language.h"
 #include "../core/utility.h"
 #include "../core/serial.h"
-#include "../core/minmax.h"
diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h
index ef998c654a..fa3b93c294 100644
--- a/Marlin/src/inc/MarlinConfigPre.h
+++ b/Marlin/src/inc/MarlinConfigPre.h
@@ -27,7 +27,6 @@
 // Prefix header to acquire configurations
 //
 
-#include "../HAL/platforms.h"
 #include "../core/boards.h"
 #include "../core/macros.h"
 #include "../core/millis_t.h"
diff --git a/Marlin/src/pins/pinsDebug.h b/Marlin/src/pins/pinsDebug.h
index e1f6b15734..61f05c11b8 100644
--- a/Marlin/src/pins/pinsDebug.h
+++ b/Marlin/src/pins/pinsDebug.h
@@ -17,6 +17,8 @@
  *
  */
 
+#include "../inc/MarlinConfig.h"
+
 #define MAX_NAME_LENGTH  39    // one place to specify the format of all the sources of names
                                // "-" left justify, "39" minimum width of name, pad with blanks
 
@@ -40,7 +42,7 @@
 #define REPORT_NAME_ANALOG(COUNTER, NAME) _ADD_PIN(#NAME, COUNTER)
 
 #include "pinsDebug_list.h"
-#line 47
+#line 46
 
 // manually add pins that have names that are macros which don't play well with these macros
 #if SERIAL_PORT == 0 && (AVR_ATmega2560_FAMILY || AVR_ATmega1284_FAMILY || defined(ARDUINO_ARCH_SAM))
@@ -92,11 +94,10 @@ const PinInfo pin_array[] PROGMEM = {
   #endif
 
   #include "pinsDebug_list.h"
-  #line 99
+  #line 98
 
 };
 
-
 #include HAL_PATH(../HAL, pinsDebug.h)  // get the correct support file for this CPU
 
 #ifndef M43_NEVER_TOUCH
diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h
index cf6dcc098f..26968ed007 100644
--- a/Marlin/src/pins/pinsDebug_list.h
+++ b/Marlin/src/pins/pinsDebug_list.h
@@ -24,7 +24,7 @@
 
 // Pin lists 1.1.x and 2.0.x synchronized 2018-02-17
 
-#line 31 // set __LINE__ to a known value for both passes
+#line 28 // set __LINE__ to a known value for both passes
 
 //
 // Analog Pin Assignments
diff --git a/Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h b/Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h
index 0db91a83e4..ef9fe23e7d 100644
--- a/Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h
+++ b/Marlin/src/pins/pins_BIGTREE_SKR_V1.3.h
@@ -115,7 +115,7 @@
 #endif
 
 #if HAS_TMC220x
-    /**
+  /**
    * TMC2208/TMC2209 stepper drivers
    *
    * Hardware serial communication ports.
diff --git a/Marlin/src/sd/SdVolume.h b/Marlin/src/sd/SdVolume.h
index 1c72fd3d27..b5282bdce3 100644
--- a/Marlin/src/sd/SdVolume.h
+++ b/Marlin/src/sd/SdVolume.h
@@ -33,6 +33,10 @@
  * This file is part of the Arduino Sd2Card Library
  */
 
+#include <stdint.h>
+
+#include "../inc/MarlinConfigPre.h"
+
 #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
   #include "usb_flashdrive/Sd2Card_FlashDrive.h"
 #elif ENABLED(SDIO_SUPPORT)
@@ -43,7 +47,6 @@
 
 #include "SdFatConfig.h"
 #include "SdFatStructs.h"
-#include <stdint.h>
 
 //==============================================================================
 // SdVolume class