From f94ab84dac095ad57c9a465712ce66e625f303ff Mon Sep 17 00:00:00 2001
From: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date: Fri, 17 Apr 2020 09:10:41 -0500
Subject: [PATCH] Malyan M300 support (#17421)

---
 .github/workflows/test-builds.yml          |  1 +
 Marlin/src/core/boards.h                   |  1 +
 Marlin/src/pins/pins.h                     |  6 ++
 Marlin/src/pins/stm32f0/pins_MALYAN_M300.h | 88 ++++++++++++++++++++++
 buildroot/share/tests/malyan_M300-tests    | 14 ++++
 platformio.ini                             | 12 +++
 6 files changed, 122 insertions(+)
 create mode 100644 Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
 create mode 100755 buildroot/share/tests/malyan_M300-tests

diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml
index b92b015287..29105c4ddc 100644
--- a/.github/workflows/test-builds.yml
+++ b/.github/workflows/test-builds.yml
@@ -57,6 +57,7 @@ jobs:
         - mks_robin
         - ARMED
         - FYSETC_S6
+        - malyan_M300
 
         # Put lengthy tests last
 
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 132699b2d4..bbbd404b32 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -300,6 +300,7 @@
 #define BOARD_GTM32_REV_B             4023  // STM32F103VET6 controller
 #define BOARD_MKS_ROBIN_E3D           4024  // MKS Robin E3D(STM32F103RCT6)
 #define BOARD_MKS_ROBIN_E3            4025  // MKS Robin E3(STM32F103RCT6)
+#define BOARD_MALYAN_M300             4026  // STM32F070-based delta
 
 //
 // ARM Cortex-M4F
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index 42b3c4e4e2..98415e02aa 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -464,6 +464,12 @@
 #elif MB(CNCONTROLS_15D)
   #include "sam/pins_CNCONTROLS_15D.h"          // SAM3X8E                                env:DUE env:DUE_USB
 
+//
+// STM32 ARM Cortex-M0
+//
+#elif MB(MALYAN_M300)
+  #include "stm32f0/pins_MALYAN_M300.h"         // STM32F070                              env:malyan_M300
+
 //
 // STM32 ARM Cortex-M3
 //
diff --git a/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
new file mode 100644
index 0000000000..c9c87d49b9
--- /dev/null
+++ b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
@@ -0,0 +1,88 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 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
+
+#if NONE(__STM32F1__, STM32F1xx, STM32F0xx)
+  #error "Oops! Select a 'Malyan M300' board in 'Tools > Board.'"
+#endif
+
+#define BOARD_INFO_NAME "Malyan M300"
+
+//
+// EEPROM Emulation
+//
+#define FLASH_EEPROM_EMULATION
+
+//
+// SD CARD SPI
+//
+#define SDSS                              SS_PIN
+
+//
+// Timers
+//
+#undef STEP_TIMER
+#undef TEMP_TIMER
+#define STEP_TIMER 6
+#define TEMP_TIMER 7
+
+//
+// Limit Switches
+//
+#define X_MAX_PIN                           PC13
+#define Y_MAX_PIN                           PC14
+#define Z_MAX_PIN                           PC15
+#define Z_MIN_PIN                           PB7
+
+//
+// Steppers
+//
+#define X_STEP_PIN                          PB14
+#define X_DIR_PIN                           PB13
+#define X_ENABLE_PIN                        PB10
+
+#define Y_STEP_PIN                          PB12
+#define Y_DIR_PIN                           PB11
+#define Y_ENABLE_PIN                        PB10
+
+#define Z_STEP_PIN                          PB2
+#define Z_DIR_PIN                           PB1
+#define Z_ENABLE_PIN                        PB10
+
+#define E0_STEP_PIN                         PA7
+#define E0_DIR_PIN                          PA6
+#define E0_ENABLE_PIN                       PB0
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN                          PA0   // Analog Input (HOTEND0 thermistor)
+#define TEMP_BED_PIN                        PA4   // Analog Input (BED thermistor)
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN                        PA1   // HOTEND0 MOSFET
+#define HEATER_BED_PIN                      PA5   // BED MOSFET
+
+#define AUTO_FAN_PIN                        PA8
diff --git a/buildroot/share/tests/malyan_M300-tests b/buildroot/share/tests/malyan_M300-tests
new file mode 100755
index 0000000000..31cbabd754
--- /dev/null
+++ b/buildroot/share/tests/malyan_M300-tests
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+#
+# Build tests for STM32F070CB Malyan M300
+#
+
+# exit on first failure
+set -e
+
+use_example_configs "delta/Malyan M300"
+opt_disable AUTO_BED_LEVELING_3POINT
+exec_test $1 $2 "Malyan M300 (delta)"
+
+# cleanup
+restore_configs
diff --git a/platformio.ini b/platformio.ini
index 0828170e44..d4c56876fc 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -610,6 +610,18 @@ build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py -DMCU_STM32F103CB -D
 src_filter  = ${common.default_src_filter} +<src/HAL/STM32F1>
 lib_ignore  = Adafruit NeoPixel, LiquidCrystal, LiquidTWI2, TMCStepper, U8glib-HAL, SPI
 
+#
+# Malyan M300 (STM32F070CB)
+#
+[env:malyan_M300]
+platform    = ststm32@>=6.1.0
+board       = malyanm300_f070cb
+build_flags = ${common.build_flags}
+    -DUSBCON -DUSBD_VID=0x0483 "-DUSB_MANUFACTURER=\"Unknown\"" "-DUSB_PRODUCT=\"MALYAN_M300\""
+    -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED
+src_filter  = ${common.default_src_filter} +<src/HAL/STM32>
+lib_ignore  = U8glib, LiquidCrystal_I2C, LiquidCrystal, NewliquidCrystal, LiquidTWI2, Adafruit NeoPixel, TMCStepper, Servo(STM32F1), TMC26XStepper, U8glib-HAL
+
 #
 # Chitu boards like Tronxy X5s (STM32F103ZET6)
 #
-- 
GitLab