Преглед на файлове

Initial Longer3D LK1/2 (Alfawise U20/U20+/U30) support (#14597)

Tanguy Pruvot преди 4 години
родител
ревизия
45bde333d5

+ 1
- 0
.travis.yml Целия файл

@@ -24,6 +24,7 @@ env:
24 24
   - TEST_PLATFORM="teensy35"
25 25
   - TEST_PLATFORM="linux_native"
26 26
   - TEST_PLATFORM="esp32"
27
+  - TEST_PLATFORM="alfawise_U20"
27 28
 
28 29
 addons:
29 30
   apt:

+ 1
- 0
Marlin/src/core/boards.h Целия файл

@@ -264,6 +264,7 @@
264 264
 #define BOARD_JGAURORA_A5S_A1         4010  // JGAurora A5S A1 (STM32F103ZET6)
265 265
 #define BOARD_FYSETC_AIO_II           4011  // FYSETC AIO_II
266 266
 #define BOARD_FYSETC_CHEETAH          4012  // FYSETC CHEETAH
267
+#define BOARD_LONGER3D_LK             4013  // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
267 268
 
268 269
 //
269 270
 // ARM Cortex-M4F

+ 18
- 4
Marlin/src/module/temperature.cpp Целия файл

@@ -1540,7 +1540,11 @@ void Temperature::updateTemperaturesFromRawValues() {
1540 1540
 #endif
1541 1541
 
1542 1542
 // Init fans according to whether they're native PWM or Software PWM
1543
-#define _INIT_SOFT_FAN(P) OUT_WRITE(P, FAN_INVERTING ? LOW : HIGH)
1543
+#ifdef ALFAWISE_UX0
1544
+  #define _INIT_SOFT_FAN(P) OUT_WRITE_OD(P, FAN_INVERTING ? LOW : HIGH)
1545
+#else
1546
+  #define _INIT_SOFT_FAN(P) OUT_WRITE(P, FAN_INVERTING ? LOW : HIGH)
1547
+#endif
1544 1548
 #if ENABLED(FAN_SOFT_PWM)
1545 1549
   #define _INIT_FAN_PIN(P) _INIT_SOFT_FAN(P)
1546 1550
 #else
@@ -1563,7 +1567,6 @@ void Temperature::updateTemperaturesFromRawValues() {
1563 1567
   #define INIT_CHAMBER_AUTO_FAN_PIN(P) SET_OUTPUT(P)
1564 1568
 #endif
1565 1569
 
1566
-
1567 1570
 /**
1568 1571
  * Initialize the temperature manager
1569 1572
  * The manager is implemented by periodic calls to manage_heater()
@@ -1590,8 +1593,13 @@ void Temperature::init() {
1590 1593
   #endif
1591 1594
 
1592 1595
   #if HAS_HEATER_0
1593
-    OUT_WRITE(HEATER_0_PIN, HEATER_0_INVERTING);
1596
+    #ifdef ALFAWISE_UX0
1597
+      OUT_WRITE_OD(HEATER_0_PIN, HEATER_0_INVERTING);
1598
+    #else
1599
+      OUT_WRITE(HEATER_0_PIN, HEATER_0_INVERTING);
1600
+    #endif
1594 1601
   #endif
1602
+
1595 1603
   #if HAS_HEATER_1
1596 1604
     OUT_WRITE(HEATER_1_PIN, HEATER_1_INVERTING);
1597 1605
   #endif
@@ -1607,9 +1615,15 @@ void Temperature::init() {
1607 1615
   #if HAS_HEATER_5
1608 1616
     OUT_WRITE(HEATER_5_PIN, HEATER_5_INVERTING);
1609 1617
   #endif
1618
+
1610 1619
   #if HAS_HEATED_BED
1611
-    OUT_WRITE(HEATER_BED_PIN, HEATER_BED_INVERTING);
1620
+    #ifdef ALFAWISE_UX0
1621
+      OUT_WRITE_OD(HEATER_BED_PIN, HEATER_BED_INVERTING);
1622
+    #else
1623
+      OUT_WRITE(HEATER_BED_PIN, HEATER_BED_INVERTING);
1624
+    #endif
1612 1625
   #endif
1626
+
1613 1627
   #if HAS_HEATED_CHAMBER
1614 1628
     OUT_WRITE(HEATER_CHAMBER_PIN, HEATER_CHAMBER_INVERTING);
1615 1629
   #endif

+ 2
- 0
Marlin/src/pins/pins.h Целия файл

@@ -450,6 +450,8 @@
450 450
   #include "stm32/pins_CHITU3D.h"               // STM32F1                                env:STM32F1
451 451
 #elif MB(GTM32_PRO_VB)
452 452
   #include "stm32/pins_GTM32_PRO_VB.h"          // STM32F1                                env:STM32F1
453
+#elif MB(LONGER3D_LK)
454
+  #include "stm32/pins_LONGER3D_LK.h"           // STM32F1                                env:alfawise_U20
453 455
 #elif MB(MORPHEUS)
454 456
   #include "stm32/pins_MORPHEUS.h"              // STM32F1                                env:STM32F1
455 457
 #elif MB(MKS_ROBIN)

+ 160
- 0
Marlin/src/pins/stm32/pins_LONGER3D_LK.h Целия файл

@@ -0,0 +1,160 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+ *
18
+ */
19
+
20
+/**
21
+ * ALFAWISE U30 (STM32F103VET6) board pin assignments
22
+ */
23
+
24
+#if !defined(__STM32F1__) && !defined(STM32F1xx)
25
+  #error "Oops! Select a STM32F1 board in 'Tools > Board.'"
26
+#elif HOTENDS > 1 || E_STEPPERS > 1
27
+  #error "LONGER3D only supports 1 hotend / E-stepper. Comment out this line to continue."
28
+#endif
29
+
30
+#define BOARD_NAME "Longer3D"
31
+#define ALFAWISE_UX0             // Common to all Alfawise STM32F1 boards
32
+
33
+                                 //  Release PB4 (STEP_X_PIN) from JTAG NRST role.
34
+//#define DISABLE_DEBUG          //  > Hobi : We still want to debug with STLINK...
35
+#define DISABLE_JTAG             //  we free the jtag pins (PA15) but keep STLINK
36
+
37
+//
38
+// Limit Switches
39
+//
40
+#define X_STOP_PIN         PC1   // pin 16
41
+//#define X_MAX_PIN        PC0   // pin 15 Used as filament sensor on Alfawise setup
42
+#define Y_MIN_PIN          PC15  // pin 9
43
+//#define Y_MAX_PIN        PC14  // pin 8 Unused in stock Alfawise setup
44
+#define Z_MIN_PIN          PE6   // pin 5 Standard Endstop or Z_Probe endstop function
45
+//#define Z_MAX_PIN        PE5   // pin 4 Unused in stock Alfawise setup
46
+                                 // May be used for BLTouch Servo function on older variants (<= V08)
47
+//
48
+// Steppers
49
+//
50
+#define X_ENABLE_PIN       PB5   // pin 91
51
+#define X_STEP_PIN         PB4   // pin 90
52
+#define X_DIR_PIN          PB3   // pin 89
53
+
54
+#define Y_ENABLE_PIN       PB8   // pin 95
55
+#define Y_STEP_PIN         PB7   // pin 93
56
+#define Y_DIR_PIN          PB6   // pin 92
57
+
58
+#define Z_ENABLE_PIN       PE1   // pin 98
59
+#define Z_STEP_PIN         PE0   // pin 97
60
+#define Z_DIR_PIN          PB9   // pin 96
61
+
62
+#define E0_ENABLE_PIN      PE4   // pin 3
63
+#define E0_STEP_PIN        PE3   // pin 2
64
+#define E0_DIR_PIN         PE2   // pin 1
65
+
66
+//
67
+// Temperature Sensors
68
+//
69
+#define TEMP_0_PIN         PA0   // pin 23 (Nozzle 100K/3950 thermistor)
70
+#define TEMP_BED_PIN       PA1   // pin 24 (Hot Bed 100K/3950 thermistor)
71
+
72
+//
73
+// Heaters / Fans
74
+//
75
+#define HEATER_0_PIN       PD3   // pin 84 (Nozzle Heat Mosfet)
76
+#define HEATER_BED_PIN     PA8   // pin 67 (Hot Bed Mosfet)
77
+
78
+#define FAN_PIN            PA15  // pin 77 (4cm Fan)
79
+#define FAN_SOFT_PWM             // Required to avoid issues with heating or STLink
80
+#define FAN_MIN_PWM        35    // Fan will not start in 1-30 range
81
+#define FAN_MAX_PWM       255
82
+
83
+// Filament Sensor
84
+#ifndef FIL_RUNOUT_PIN
85
+  #define FIL_RUNOUT_PIN   PC0   // XMAX plug on PCB used as filament runout sensor on Alfawise boards (inverting true)
86
+#endif
87
+
88
+//#define BEEPER_PIN       PD13  // pin 60 (Servo PWM output 5V/GND on Board V0G+) made for BL-Touch sensor
89
+                                 // Can drive a PC Buzzer, if connected between PWM and 5V pins
90
+
91
+#define LED_PIN            PC2   // pin 17
92
+
93
+//
94
+// PWM
95
+//
96
+//#define NUM_SERVOS        1
97
+//#define SERVO0_TIMER_NUM  1 // General or Adv. timer to use for the servo PWM (2 & 5 are reserved)
98
+
99
+#define SERVO0_PWM_OD
100
+#define SERVO0_PIN         PD13  // Open drain PWM pin on the V0G (GND or floating 5V)
101
+
102
+//#define SERVO0_PIN         PE5   // Pulled up PWM pin on the V08 (3.3V or 0)
103
+
104
+/**
105
+ * Note: Alfawise screens use various TFT controllers. Supported screens
106
+ * are based on the ILI9342, ILI9328 and ST7798V. Define init sequences for
107
+ * other screens in u8g_dev_tft_320x240_upscale_from_128x64.cpp
108
+ *
109
+ * If the screen stays white, disable 'LCD_RESET_PIN' to let the bootloader
110
+ * init the screen.
111
+ *
112
+ * Setting an 'LCD_RESET_PIN' may cause a flicker when entering the LCD menu
113
+ * because Marlin uses the reset as a failsafe to revive a glitchy LCD.
114
+ */
115
+#pragma once
116
+
117
+#define LCD_RESET_PIN      PC4   // pin 33
118
+#define LCD_BACKLIGHT_PIN  PD12  // pin 59
119
+#define FSMC_CS_PIN        PD7   // pin 88 = FSMC_NE1
120
+#define FSMC_RS_PIN        PD11  // pin 58 A16 Register. Only one address needed
121
+
122
+#define LCD_USE_DMA_FSMC   // Use DMA transfers to send data to the TFT
123
+#define FSMC_DMA_DEV       DMA2
124
+#define FSMC_DMA_CHANNEL   DMA_CH5
125
+
126
+#define DOGLCD_MOSI -1  // Prevent auto-define by Conditionals_post.h
127
+#define DOGLCD_SCK  -1
128
+
129
+/**
130
+ * Note: Alfawise U20/U30 boards DON'T use SPI2, as the hardware designer
131
+ * mixed up MOSI and MISO pins. SPI is managed in SW, and needs pins
132
+ * declared below.
133
+ */
134
+#if ENABLED(TOUCH_BUTTONS)
135
+  #define TOUCH_CS_PIN     PB12  // pin 51 SPI2_NSS
136
+  #define TOUCH_SCK_PIN    PB13  // pin 52
137
+  #define TOUCH_MOSI_PIN   PB14  // pin 53
138
+  #define TOUCH_MISO_PIN   PB15  // pin 54
139
+  #define TOUCH_INT_PIN    PC6   // pin 63 (PenIRQ coming from ADS7843)
140
+
141
+  #define BTN_ENC          PB0   // pin 35 unconnected pin on Alfawise. (PC13 to try)
142
+  #define BTN_EN1          -1    // Real pin is needed to enable encoder's push button
143
+  #define BTN_EN2          -1    // functionality used by touch screen
144
+#endif
145
+
146
+//
147
+// SPI1 (EEPROM W25Q64 + DAC OUT)
148
+//
149
+
150
+#undef E2END
151
+#define E2END             0x7FF // EEPROM end address (reserve 2kB on sd/sram, real spi one is 8MB/64Mbits)
152
+/*
153
+#define SPI_EEPROM        1   // If commented this will create a file on the SD card as a replacement
154
+#define SPI_CHAN_EEPROM1  1
155
+#define SPI_EEPROM1_CS       PC5 // pin 34
156
+
157
+//#define EEPROM_SCK  BOARD_SPI1_SCK_PIN   // PA5 pin 30
158
+//#define EEPROM_MISO BOARD_SPI1_MISO_PIN  // PA6 pin 31
159
+//#define EEPROM_MOSI BOARD_SPI1_MOSI_PIN  // PA7 pin 32
160
+*/

+ 8
- 4
Marlin/src/pins/stm32/pins_MKS_ROBIN.h Целия файл

@@ -109,11 +109,15 @@
109 109
 #define LED_PIN            PB2
110 110
 
111 111
 /**
112
- * Note: MKS Robin TFT screens may have different TFT controllers
113
- * If the screen stays white, disable 'LCD_RESET_PIN' to rely on the bootloader to do screen initialization.
112
+ * Note: MKS Robin TFT screens use various TFT controllers. Supported screens
113
+ * are based on the ILI9342, ILI9328 and ST7798V. Define init sequences for
114
+ * other screens in u8g_dev_tft_320x240_upscale_from_128x64.cpp
114 115
  *
115
- * Enabling 'LCD_RESET_PIN' causes flickering when entering the LCD menu due to LCD controller reset.
116
- * Reset feature was designed to "revive the LCD if static electricity killed it."
116
+ * If the screen stays white, disable 'LCD_RESET_PIN'
117
+ * to let the bootloader init the screen.
118
+ *
119
+ * Setting an 'LCD_RESET_PIN' may cause a flicker when entering the LCD menu
120
+ * because Marlin uses the reset as a failsafe to revive a glitchy LCD.
117 121
  */
118 122
 //#define LCD_RESET_PIN      PF6
119 123
 #define LCD_BACKLIGHT_PIN  PG11

+ 3
- 2
Marlin/src/pins/stm32/pins_MKS_ROBIN_MINI.h Целия файл

@@ -101,8 +101,9 @@
101 101
 //#define LED_PIN            PB2
102 102
 
103 103
 /**
104
- * Note: MKS Robin TFT screens may have different TFT controllers
105
- * If the screen stays white, disable 'LCD_RESET_PIN' to rely on the bootloader to do screen initialization.
104
+ * Note: MKS Robin TFT screens use various TFT controllers.
105
+ * If the screen stays white, disable 'LCD_RESET_PIN'
106
+ * to let the bootloader init the screen.
106 107
  */
107 108
 #define LCD_RESET_PIN      PF6
108 109
 #define NO_LCD_REINIT             // Suppress LCD re-initialization

+ 3
- 2
Marlin/src/pins/stm32/pins_MKS_ROBIN_NANO.h Целия файл

@@ -103,8 +103,9 @@
103 103
 #define LED_PIN            PB2
104 104
 
105 105
 /**
106
- * Note: MKS Robin TFT screens may have different TFT controllers
107
- * If the screen stays white, disable 'LCD_RESET_PIN' to rely on the bootloader to do screen initialization.
106
+ * Note: MKS Robin TFT screens use various TFT controllers.
107
+ * If the screen stays white, disable 'LCD_RESET_PIN'
108
+ * to let the bootloader init the screen.
108 109
  */
109 110
 #define LCD_RESET_PIN      PF6
110 111
 #define NO_LCD_REINIT             // Suppress LCD re-initialization

+ 14
- 0
buildroot/share/PlatformIO/ldscripts/alfawise_Ux0.ld Целия файл

@@ -0,0 +1,14 @@
1
+MEMORY
2
+{
3
+  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
4
+  rom (rx)  : ORIGIN = 0x08010000, LENGTH = 512K - 64K
5
+}
6
+
7
+/* Provide memory region aliases for common.inc */
8
+REGION_ALIAS("REGION_TEXT", rom);
9
+REGION_ALIAS("REGION_DATA", ram);
10
+REGION_ALIAS("REGION_BSS", ram);
11
+REGION_ALIAS("REGION_RODATA", rom);
12
+
13
+/* Let common.inc handle the real work. */
14
+INCLUDE common.inc

+ 26
- 0
buildroot/share/PlatformIO/scripts/alfawise_Ux0.py Целия файл

@@ -0,0 +1,26 @@
1
+Import("env")
2
+
3
+# Relocate firmware from 0x08000000 to 0x08010000
4
+for define in env['CPPDEFINES']:
5
+    if define[0] == "VECT_TAB_ADDR":
6
+        env['CPPDEFINES'].remove(define)
7
+env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08010000"))
8
+env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/alfawise_Ux0.ld")
9
+
10
+# Encrypt ${PROGNAME}.bin and save it as 'project.bin'
11
+def encrypt(source, target, env):
12
+    import os
13
+
14
+    firmware = open(target[0].path, "rb")
15
+    marlin_alfa = open(target[0].dir.path +'/project.bin', "wb")
16
+    length = os.path.getsize(target[0].path)
17
+    position = 0
18
+    try:
19
+        while position < length:
20
+            byte = firmware.read(1)
21
+            marlin_alfa.write(byte)
22
+            position += 1
23
+    finally:
24
+        firmware.close()
25
+        marlin_alfa.close()
26
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);

+ 15
- 0
buildroot/share/tests/alfawise_U20-tests Целия файл

@@ -0,0 +1,15 @@
1
+#!/usr/bin/env bash
2
+#
3
+# Build tests for STM32F103VET6
4
+#
5
+
6
+# exit on first failure
7
+set -e
8
+
9
+use_example_configs Alfawise/U20
10
+opt_set MOTHERBOARD BOARD_LONGER3D_LK
11
+opt_set SERIAL_PORT 1
12
+exec_test $1 $2 "Full-featured U20 config"
13
+
14
+# cleanup
15
+restore_configs

+ 2294
- 0
config/examples/Alfawise/U20/Configuration.h
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 2553
- 0
config/examples/Alfawise/U20/Configuration_adv.h
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 77
- 0
config/examples/Alfawise/U20/_Statusscreen.h Целия файл

@@ -0,0 +1,77 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+ *
18
+ */
19
+
20
+/**
21
+ * Custom Status Screen bitmap
22
+ *
23
+ * Place this file in the root with your configuration files
24
+ * and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
25
+ *
26
+ * Use the Marlin Bitmap Converter to make your own:
27
+ * http://marlinfw.org/tools/u8glib/converter.html
28
+ */
29
+
30
+#pragma once
31
+
32
+//
33
+// Status Screen Logo bitmap
34
+//
35
+#define STATUS_LOGO_Y            0
36
+#define STATUS_LOGO_WIDTH       38
37
+
38
+static unsigned char status_logo_bmp[] PROGMEM = {
39
+  B11111111,B11111111,B11111111,B11111111,B11111100,
40
+  B10000000,B00000000,B00010000,B00000111,B11111100,
41
+  B10000000,B00000000,B00010000,B00000000,B11111100,
42
+  B10000000,B00000000,B00110000,B00000000,B01111100,
43
+  B10000000,B00000000,B00110000,B00000000,B00111100,
44
+  B10000000,B00000000,B01110000,B00000000,B00011100,
45
+  B11111111,B10000000,B01110000,B00000000,B00001100,
46
+  B11111111,B10000000,B11110000,B11100000,B00001100,
47
+  B11111111,B00000000,B11110000,B11111000,B00001100,
48
+  B11111111,B00000001,B11110000,B11111100,B00000100,
49
+  B11111110,B00000001,B11110000,B11010010,B00000100,
50
+  B11111110,B00000011,B11110000,B10101110,B00000100,
51
+  B11111100,B00000000,B11110000,B10101111,B00000100,
52
+  B11111100,B00000000,B00110000,B10000011,B00000100,
53
+  B11111000,B00000000,B00110000,B11111111,B00000100,
54
+  B11111000,B00000000,B00010000,B11111111,B00000100,
55
+  B11111111,B11100000,B00010000,B10111111,B00000100,
56
+  B11111111,B11110000,B00010000,B10101111,B00000100,
57
+  B11111111,B11110000,B00010000,B10101110,B00000100,
58
+  B11111111,B11110000,B00010000,B10000010,B00000100,
59
+  B10000011,B11110000,B00010000,B11111100,B00000100,
60
+  B10000001,B11110000,B00010000,B11111000,B00001100,
61
+  B10000001,B11100000,B00010000,B11100000,B00001100,
62
+  B10000000,B00000000,B00010000,B00000000,B00001100,
63
+  B10000000,B00000000,B00110000,B00000000,B00011100,
64
+  B11000000,B00000000,B00110000,B00000000,B00111100,
65
+  B11000000,B00000000,B01110000,B00000000,B01111100,
66
+  B11100000,B00000000,B11110000,B00000000,B11111100,
67
+  B11111000,B00000011,B11110000,B00000111,B11111100
68
+};
69
+
70
+//
71
+// Use default bitmaps
72
+//
73
+#define STATUS_HOTEND_ANIM
74
+#define STATUS_BED_ANIM
75
+#define STATUS_LOGO_X          0
76
+#define STATUS_HEATERS_X      50
77
+#define STATUS_BED_X          74

+ 23
- 0
platformio.ini Целия файл

@@ -368,6 +368,29 @@ src_filter  = ${common.default_src_filter} +<src/HAL/HAL_STM32>
368 368
 monitor_speed = 250000
369 369
 
370 370
 #
371
+# Alfawise U20 (STM32F103VET6)
372
+#
373
+[env:alfawise_U20]
374
+platform      = ststm32
375
+framework     = arduino
376
+board         = genericSTM32F103VE
377
+monitor_speed = 250000
378
+extra_scripts = buildroot/share/PlatformIO/scripts/alfawise_Ux0.py
379
+build_flags   = !python Marlin/src/HAL/HAL_STM32F1/STM32F1_flag_script.py
380
+  ${common.build_flags} -std=gnu++14
381
+  -DSTM32F1xx -DU20 -DTS_V12
382
+build_unflags = -std=gnu++11 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1
383
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
384
+lib_deps      = ${common.lib_deps}
385
+lib_ignore    = c1921b4
386
+  libf3c
387
+  lib066
388
+  Adafruit NeoPixel_ID28
389
+  Adafruit NeoPixel
390
+  libf3e
391
+  TMC26XStepper
392
+
393
+#
371 394
 # MKS Robin (STM32F103ZET6)
372 395
 #
373 396
 [env:mks_robin]

Loading…
Отказ
Запис