summaryrefslogtreecommitdiff
path: root/ports/stm/peripherals
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2020-04-20 18:25:13 -0700
committerScott Shawcroft <scott@tannewt.org>2020-04-20 18:25:13 -0700
commitbebf27e73315386bfd862da46251a5efae56de75 (patch)
tree4bfac7c3b6b0779962cdd637d020a139419a6357 /ports/stm/peripherals
parentabd340a8e465fedd2b5d74989440532c767ccf9e (diff)
parenta4d86b96fd1e60b807258a30cd765b48f0372b6d (diff)
Merge remote-tracking branch 'adafruit/master' into lower_power
This isn't perfect and needs a bit more testing.
Diffstat (limited to 'ports/stm/peripherals')
-rw-r--r--ports/stm/peripherals/clocks.h (renamed from ports/stm/peripherals/stm32f4/clocks.h)4
-rw-r--r--ports/stm/peripherals/gpio.h (renamed from ports/stm/peripherals/stm32f4/gpio.h)5
-rw-r--r--ports/stm/peripherals/periph.h127
-rw-r--r--ports/stm/peripherals/pins.h (renamed from ports/stm/peripherals/stm32f4/pins.h)33
-rw-r--r--ports/stm/peripherals/stm32f4/periph.h180
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/clocks.c4
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c10
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/periph.c132
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/periph.h22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/pins.c2
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f401xe/pins.h6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/clocks.c6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c5
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/periph.c134
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/periph.h22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/pins.c2
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/pins.h6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/clocks.c6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c5
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/periph.c134
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/periph.h22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/pins.c2
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f407xx/pins.h6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/clocks.c4
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c11
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/periph.c176
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/periph.h22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/pins.c2
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f411xe/pins.h4
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/clocks.c6
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c213
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/periph.c196
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/periph.h22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/pins.c2
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f412zx/pins.h7
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/clocks.c66
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c48
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/periph.c248
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/periph.h55
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/pins.c200
-rw-r--r--ports/stm/peripherals/stm32f7/stm32f767xx/pins.h199
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/clocks.c83
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c48
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/periph.c260
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/periph.h55
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/pins.c210
-rw-r--r--ports/stm/peripherals/stm32h7/stm32h743xx/pins.h199
47 files changed, 2318 insertions, 893 deletions
diff --git a/ports/stm/peripherals/stm32f4/clocks.h b/ports/stm/peripherals/clocks.h
index c7ba84662..1f837c79e 100644
--- a/ports/stm/peripherals/stm32f4/clocks.h
+++ b/ports/stm/peripherals/clocks.h
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,4 +24,4 @@
* THE SOFTWARE.
*/
-void stm32f4_peripherals_clocks_init(void);
+void stm32_peripherals_clocks_init(void);
diff --git a/ports/stm/peripherals/stm32f4/gpio.h b/ports/stm/peripherals/gpio.h
index 34f89e792..a5dbe444c 100644
--- a/ports/stm/peripherals/stm32f4/gpio.h
+++ b/ports/stm/peripherals/gpio.h
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,5 +24,4 @@
* THE SOFTWARE.
*/
-void stm32f4_peripherals_gpio_init(void);
-void stm32f4_peripherals_status_led(uint8_t led, uint8_t state);
+void stm32_peripherals_gpio_init(void);
diff --git a/ports/stm/peripherals/periph.h b/ports/stm/peripherals/periph.h
new file mode 100644
index 000000000..209d35ee9
--- /dev/null
+++ b/ports/stm/peripherals/periph.h
@@ -0,0 +1,127 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef __MICROPY_INCLUDED_STM32_PERIPHERALS_PERIPH_H__
+#define __MICROPY_INCLUDED_STM32_PERIPHERALS_PERIPH_H__
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include STM32_HAL_H
+#include "pins.h"
+
+// Comm Peripherals
+
+typedef struct {
+ uint8_t periph_index:4; // Index of the peripheral instance
+ uint8_t altfn_index:4; // Index of the altfn for this pin (0 to 15)
+ const mcu_pin_obj_t * pin; // Pin Object
+} mcu_periph_obj_t;
+
+#define PERIPH(index, alt, p_pin) \
+{ \
+ .periph_index = index, \
+ .altfn_index = alt, \
+ .pin = p_pin, \
+}
+
+// Timer Peripheral
+
+typedef struct {
+ uint8_t tim_index:4;
+ uint8_t altfn_index:4;
+ uint8_t channel_index:4;
+ const mcu_pin_obj_t * pin;
+} mcu_tim_pin_obj_t;
+
+#define TIM(index, alt, channel, tim_pin) \
+{ \
+ .tim_index = index, \
+ .altfn_index = alt, \
+ .channel_index = channel, \
+ .pin = tim_pin, \
+}
+
+// F4 Series
+// Access Lines
+
+#ifdef STM32F401xE
+#define HAS_DAC 0
+#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
+#include "stm32f4/stm32f401xe/periph.h"
+#endif
+
+#ifdef STM32F411xE
+#define HAS_DAC 0
+#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
+#include "stm32f4/stm32f411xe/periph.h"
+#endif
+
+#ifdef STM32F412Zx
+#define HAS_DAC 0
+#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
+#include "stm32f4/stm32f412zx/periph.h"
+#endif
+
+// Foundation Lines
+
+#ifdef STM32F405xx
+#define HAS_DAC 1
+#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
+#include "stm32f4/stm32f405xx/periph.h"
+#endif
+
+#ifdef STM32F407xx
+#define HAS_DAC 1
+#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
+#include "stm32f4/stm32f407xx/periph.h"
+#endif
+
+// F7 Series
+
+#ifdef STM32F767xx
+#define HAS_DAC 0
+#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
+#include "stm32f7/stm32f767xx/periph.h"
+#endif
+
+// H7 Series
+// Single Core
+
+#ifdef STM32H743xx
+#define HAS_DAC 0
+#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
+#include "stm32h7/stm32h743xx/periph.h"
+#endif
+
+#endif // __MICROPY_INCLUDED_STM32_PERIPHERALS_PERIPH_H__
diff --git a/ports/stm/peripherals/stm32f4/pins.h b/ports/stm/peripherals/pins.h
index 44ef4c1ba..628e09695 100644
--- a/ports/stm/peripherals/stm32f4/pins.h
+++ b/ports/stm/peripherals/pins.h
@@ -3,8 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2018 Dan Halbert for Adafruit Industries
- * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -28,13 +27,13 @@
// DO NOT include this file directly. Use shared-bindings/microcontroller/Pin.h instead to ensure
// that all necessary includes are already included.
-#ifndef __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
-#define __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
+#ifndef __MICROPY_INCLUDED_STM32_PERIPHERALS_PINS_H__
+#define __MICROPY_INCLUDED_STM32_PERIPHERALS_PINS_H__
#include <stdint.h>
#include <stdbool.h>
-#include "stm32f4xx_hal.h"
+#include STM32_HAL_H
typedef struct {
mp_obj_base_t base;
@@ -76,21 +75,31 @@ extern const mp_obj_type_t mcu_pin_type;
// Use illegal pin value to mark unassigned pins.
#define NO_PIN 0xff
-// Choose based on chip
+// F4 Series
#ifdef STM32F401xE
-#include "stm32f401xe/pins.h"
+#include "stm32f4/stm32f401xe/pins.h"
#endif
#ifdef STM32F411xE
-#include "stm32f411xe/pins.h"
+#include "stm32f4/stm32f411xe/pins.h"
#endif
#ifdef STM32F412Zx
-#include "stm32f412zx/pins.h"
+#include "stm32f4/stm32f412zx/pins.h"
#endif
#ifdef STM32F405xx
-#include "stm32f405xx/pins.h"
+#include "stm32f4/stm32f405xx/pins.h"
#endif
#ifdef STM32F407xx
-#include "stm32f407xx/pins.h"
+#include "stm32f4/stm32f407xx/pins.h"
#endif
-#endif // __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
+// F7 Series
+#ifdef STM32F767xx
+#include "stm32f7/stm32f767xx/pins.h"
+#endif
+
+// H7 Series
+#ifdef STM32H743xx
+#include "stm32h7/stm32h743xx/pins.h"
+#endif
+
+#endif // __MICROPY_INCLUDED_STM32_PERIPHERALS_PINS_H__
diff --git a/ports/stm/peripherals/stm32f4/periph.h b/ports/stm/peripherals/stm32f4/periph.h
deleted file mode 100644
index d311afe4a..000000000
--- a/ports/stm/peripherals/stm32f4/periph.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PERIPH_H__
-#define __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PERIPH_H__
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#include "stm32f4xx_hal.h"
-#include "stm32f4/pins.h"
-
-// I2C
-// TODO: these objects should be condensed into a single 'periph_pin' unless we
-// find a compelling reason to store more unique data in them.
-
-typedef struct {
- uint8_t i2c_index:4; // Index of the I2C unit (1 to 3)
- uint8_t altfn_index:4; //Index of the altfn for this pin (0 to 15)
- const mcu_pin_obj_t * pin;
-} mcu_i2c_sda_obj_t;
-
-typedef struct {
- uint8_t i2c_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_i2c_scl_obj_t;
-
-
-#define I2C_SDA(index, alt, sda_pin) \
-{ \
- .i2c_index = index, \
- .altfn_index = alt, \
- .pin = sda_pin, \
-}
-
-#define I2C_SCL(index, alt, scl_pin) \
-{ \
- .i2c_index = index, \
- .altfn_index = alt, \
- .pin = scl_pin, \
-}
-
-// SPI
-// TODO: these objects should be condensed into a single 'periph_pin' unless we
-// find a compelling reason to store more unique data in them.
-
-typedef struct {
- uint8_t spi_index:4; //Up to 6 SPI units
- uint8_t altfn_index:4; //Up to 15 alt channels
- const mcu_pin_obj_t * pin;
-} mcu_spi_sck_obj_t;
-
-typedef struct {
- uint8_t spi_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_spi_mosi_obj_t;
-
-typedef struct {
- uint8_t spi_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_spi_miso_obj_t;
-
-typedef struct {
- uint8_t spi_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_spi_nss_obj_t;
-
-#define SPI(index, alt, spi_pin) \
-{ \
- .spi_index = index, \
- .altfn_index = alt, \
- .pin = spi_pin, \
-}
-
-// UART
-// TODO: these objects should be condensed into a single 'periph_pin' unless we
-// find a compelling reason to store more unique data in them.
-
-typedef struct {
- uint8_t uart_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_uart_tx_obj_t;
-
-typedef struct {
- uint8_t uart_index:4;
- uint8_t altfn_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_uart_rx_obj_t;
-
-#define UART(index, alt, uart_pin) \
-{ \
- .uart_index = index, \
- .altfn_index = alt, \
- .pin = uart_pin, \
-}
-
-//Timers
-typedef struct {
- uint8_t tim_index:4;
- uint8_t altfn_index:4;
- uint8_t channel_index:4;
- const mcu_pin_obj_t * pin;
-} mcu_tim_pin_obj_t;
-
-#define TIM(index, alt, channel, tim_pin) \
-{ \
- .tim_index = index, \
- .altfn_index = alt, \
- .channel_index = channel, \
- .pin = tim_pin, \
-}
-
-//Access Lines
-
-#ifdef STM32F401xE
-#define HAS_DAC 0
-#define HAS_TRNG 0
-#define HAS_BASIC_TIM 0
-#include "stm32f401xe/periph.h"
-#endif
-
-#ifdef STM32F411xE
-#define HAS_DAC 0
-#define HAS_TRNG 0
-#define HAS_BASIC_TIM 0
-#include "stm32f411xe/periph.h"
-#endif
-
-#ifdef STM32F412Zx
-#define HAS_DAC 0
-#define HAS_TRNG 1
-#define HAS_BASIC_TIM 1
-#include "stm32f412zx/periph.h"
-#endif
-
-//Foundation Lines
-
-#ifdef STM32F405xx
-#define HAS_DAC 1
-#define HAS_TRNG 1
-#define HAS_BASIC_TIM 1
-#include "stm32f405xx/periph.h"
-#endif
-
-#ifdef STM32F407xx
-#define HAS_DAC 1
-#define HAS_TRNG 1
-#define HAS_BASIC_TIM 1
-#include "stm32f407xx/periph.h"
-#endif
-
-#endif // __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PERIPH_H__
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/clocks.c b/ports/stm/peripherals/stm32f4/stm32f401xe/clocks.c
index 53810af26..194992e81 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/clocks.c
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/clocks.c
@@ -24,10 +24,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
+
#include "stm32f4xx_hal.h"
-#include "py/mpconfig.h"
-void stm32f4_peripherals_clocks_init(void) {
+void stm32_peripherals_clocks_init(void) {
//System clock init
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c b/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c
index 7bd619662..514bcc506 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c
@@ -24,11 +24,10 @@
* THE SOFTWARE.
*/
-#include "stm32f4xx_hal.h"
-#include "stm32f4/gpio.h"
+#include "gpio.h"
#include "common-hal/microcontroller/Pin.h"
-void stm32f4_peripherals_gpio_init(void) {
+void stm32_peripherals_gpio_init(void) {
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
@@ -44,8 +43,3 @@ void stm32f4_peripherals_gpio_init(void) {
never_reset_pin_number(0,14); //PA14 SWCLK
}
-//LEDs are inverted on F411 DISCO
-void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) {
-}
-
-
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/periph.c b/ports/stm/peripherals/stm32f4/stm32f401xe/periph.c
index b12084186..868945ecc 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/periph.c
@@ -26,98 +26,98 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
-#include "stm32f4/periph.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
// I2C
I2C_TypeDef * mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
-const mcu_i2c_sda_obj_t mcu_i2c_sda_list[5] = {
- I2C_SDA(1, 4, &pin_PB07),
- I2C_SDA(1, 4, &pin_PB09),
- I2C_SDA(2, 9, &pin_PB03),
- I2C_SDA(3, 4, &pin_PC09),
- I2C_SDA(3, 9, &pin_PB04),
+const mcu_periph_obj_t mcu_i2c_sda_list[5] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 9, &pin_PB03),
+ PERIPH(3, 4, &pin_PC09),
+ PERIPH(3, 9, &pin_PB04),
};
-const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4] = {
- I2C_SCL(1, 4, &pin_PB06),
- I2C_SCL(1, 4, &pin_PB08),
- I2C_SCL(2, 4, &pin_PB10),
- I2C_SCL(3, 4, &pin_PA08)
+const mcu_periph_obj_t mcu_i2c_scl_list[4] = {
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(3, 4, &pin_PA08)
};
// SPI
SPI_TypeDef * mcu_spi_banks[4] = {SPI1, SPI2, SPI3, SPI4};
-const mcu_spi_sck_obj_t mcu_spi_sck_list[9] = {
- SPI(1, 5, &pin_PA05),
- SPI(1, 5, &pin_PB03),
- SPI(2, 5, &pin_PB10),
- SPI(2, 5, &pin_PB13),
- SPI(2, 5, &pin_PD03),
- SPI(3, 6, &pin_PB03),
- SPI(3, 6, &pin_PC10),
- SPI(4, 5, &pin_PE02),
- SPI(4, 5, &pin_PE12),
+const mcu_periph_obj_t mcu_spi_sck_list[9] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(2, 5, &pin_PD03),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(3, 6, &pin_PC10),
+ PERIPH(4, 5, &pin_PE02),
+ PERIPH(4, 5, &pin_PE12),
};
-const mcu_spi_mosi_obj_t mcu_spi_mosi_list[9] = {
- SPI(1, 5, &pin_PA07),
- SPI(1, 5, &pin_PB05),
- SPI(2, 5, &pin_PB15),
- SPI(2, 5, &pin_PC03),
- SPI(3, 6, &pin_PB05),
- SPI(3, 6, &pin_PC12),
- SPI(3, 5, &pin_PD06),
- SPI(4, 5, &pin_PE06),
- SPI(4, 5, &pin_PE14),
+const mcu_periph_obj_t mcu_spi_mosi_list[9] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(3, 6, &pin_PC12),
+ PERIPH(3, 5, &pin_PD06),
+ PERIPH(4, 5, &pin_PE06),
+ PERIPH(4, 5, &pin_PE14),
};
-const mcu_spi_miso_obj_t mcu_spi_miso_list[8] = {
- SPI(1, 5, &pin_PA06),
- SPI(1, 5, &pin_PB04),
- SPI(2, 5, &pin_PB14),
- SPI(2, 5, &pin_PC02),
- SPI(3, 6, &pin_PB04),
- SPI(3, 6, &pin_PC11),
- SPI(4, 5, &pin_PE05),
- SPI(4, 5, &pin_PE13),
+const mcu_periph_obj_t mcu_spi_miso_list[8] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(3, 6, &pin_PC11),
+ PERIPH(4, 5, &pin_PE05),
+ PERIPH(4, 5, &pin_PE13),
};
-const mcu_spi_nss_obj_t mcu_spi_nss_list[9] = {
- SPI(1, 5, &pin_PA04),
- SPI(1, 5, &pin_PA15),
- SPI(2, 5, &pin_PB09),
- SPI(2, 5, &pin_PB12),
- SPI(3, 6, &pin_PA04),
- SPI(3, 6, &pin_PA15),
- SPI(4, 6, &pin_PB12),
- SPI(4, 5, &pin_PE04),
- SPI(4, 5, &pin_PE11),
+const mcu_periph_obj_t mcu_spi_nss_list[9] = {
+ PERIPH(1, 5, &pin_PA04),
+ PERIPH(1, 5, &pin_PA15),
+ PERIPH(2, 5, &pin_PB09),
+ PERIPH(2, 5, &pin_PB12),
+ PERIPH(3, 6, &pin_PA04),
+ PERIPH(3, 6, &pin_PA15),
+ PERIPH(4, 6, &pin_PB12),
+ PERIPH(4, 5, &pin_PE04),
+ PERIPH(4, 5, &pin_PE11),
};
USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, NULL, NULL, NULL, USART6};
bool mcu_uart_has_usart[MAX_UART] = {true, true, false, false, false, true};
-const mcu_uart_tx_obj_t mcu_uart_tx_list[6] = {
- UART(2, 7, &pin_PA02),
- UART(1, 7, &pin_PA09),
- UART(6, 8, &pin_PA11),
- UART(1, 7, &pin_PB06),
- UART(6, 8, &pin_PC06),
- UART(2, 7, &pin_PD05),
+const mcu_periph_obj_t mcu_uart_tx_list[6] = {
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(6, 8, &pin_PA11),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(2, 7, &pin_PD05),
};
-const mcu_uart_rx_obj_t mcu_uart_rx_list[6] = {
- UART(2, 7, &pin_PA03),
- UART(1, 7, &pin_PA10),
- UART(6, 8, &pin_PA12),
- UART(1, 7, &pin_PB07),
- UART(6, 8, &pin_PC07),
- UART(2, 7, &pin_PD06),
+const mcu_periph_obj_t mcu_uart_rx_list[6] = {
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(6, 8, &pin_PA12),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(2, 7, &pin_PD06),
};
//Timers
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/periph.h b/ports/stm/peripherals/stm32f4/stm32f401xe/periph.h
index 6085f1ff2..334a14db5 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/periph.h
@@ -24,29 +24,29 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PERIPH_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PERIPH_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PERIPH_H
//I2C
extern I2C_TypeDef * mcu_i2c_banks[3];
-extern const mcu_i2c_sda_obj_t mcu_i2c_sda_list[5];
-extern const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4];
+extern const mcu_periph_obj_t mcu_i2c_sda_list[5];
+extern const mcu_periph_obj_t mcu_i2c_scl_list[4];
//SPI
extern SPI_TypeDef * mcu_spi_banks[4];
-extern const mcu_spi_sck_obj_t mcu_spi_sck_list[9];
-extern const mcu_spi_mosi_obj_t mcu_spi_mosi_list[9];
-extern const mcu_spi_miso_obj_t mcu_spi_miso_list[8];
-extern const mcu_spi_nss_obj_t mcu_spi_nss_list[9];
+extern const mcu_periph_obj_t mcu_spi_sck_list[9];
+extern const mcu_periph_obj_t mcu_spi_mosi_list[9];
+extern const mcu_periph_obj_t mcu_spi_miso_list[8];
+extern const mcu_periph_obj_t mcu_spi_nss_list[9];
//UART
extern USART_TypeDef * mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
-extern const mcu_uart_tx_obj_t mcu_uart_tx_list[6];
-extern const mcu_uart_rx_obj_t mcu_uart_rx_list[6];
+extern const mcu_periph_obj_t mcu_uart_tx_list[6];
+extern const mcu_periph_obj_t mcu_uart_rx_list[6];
//Timers
#define TIM_BANK_ARRAY_LEN 14
@@ -54,4 +54,4 @@ extern const mcu_uart_rx_obj_t mcu_uart_rx_list[6];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PERIPH_H \ No newline at end of file
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/pins.c b/ports/stm/peripherals/stm32f4/stm32f401xe/pins.c
index 7e88c3dcb..eea2a1a1b 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/pins.c
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/pins.c
@@ -26,7 +26,7 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
+#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/pins.h b/ports/stm/peripherals/stm32f4/stm32f401xe/pins.h
index 09bc8f13e..c836df69a 100644
--- a/ports/stm/peripherals/stm32f4/stm32f401xe/pins.h
+++ b/ports/stm/peripherals/stm32f4/stm32f401xe/pins.h
@@ -24,8 +24,8 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PINS_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PINS_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PINS_H
//Pins in datasheet order: DocID026289 Rev 7 page 38. LQFP100 only
//pg 38
@@ -118,4 +118,4 @@ extern const mcu_pin_obj_t pin_PE00;
extern const mcu_pin_obj_t pin_PE01;
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F401XE_PINS_H
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F401XE_PINS_H
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/clocks.c b/ports/stm/peripherals/stm32f4/stm32f405xx/clocks.c
index 874a7dbf7..f4c583068 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/clocks.c
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/clocks.c
@@ -24,12 +24,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#include "stm32f4xx_hal.h"
-#include "py/mpconfig.h"
-void stm32f4_peripherals_clocks_init(void) {
- //TODO: All parameters must be moved to board level, due to relationship with HSE Osc.
+#include "stm32f4xx_hal.h"
+void stm32_peripherals_clocks_init(void) {
//System clock init
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c
index d1eaa90d1..a5f4eae78 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c
@@ -24,11 +24,10 @@
* THE SOFTWARE.
*/
-#include "stm32f4xx_hal.h"
-#include "stm32f4/gpio.h"
+#include "peripherals/gpio.h"
#include "common-hal/microcontroller/Pin.h"
-void stm32f4_peripherals_gpio_init(void) {
+void stm32_peripherals_gpio_init(void) {
//Enable all GPIO for now
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
index bc03f7c7b..e75f0b206 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
@@ -26,97 +26,97 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
-#include "stm32f4/periph.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
// I2C
I2C_TypeDef * mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
-const mcu_i2c_sda_obj_t mcu_i2c_sda_list[4] = {
- I2C_SDA(1, 4, &pin_PB07),
- I2C_SDA(1, 4, &pin_PB09),
- I2C_SDA(2, 4, &pin_PB11),
- I2C_SDA(3, 4, &pin_PC09),
+const mcu_periph_obj_t mcu_i2c_sda_list[4] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 4, &pin_PB11),
+ PERIPH(3, 4, &pin_PC09),
};
-const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4] = {
- I2C_SCL(1, 4, &pin_PB06),
- I2C_SCL(1, 4, &pin_PB08),
- I2C_SCL(2, 4, &pin_PB10),
- I2C_SCL(3, 4, &pin_PA08)
+const mcu_periph_obj_t mcu_i2c_scl_list[4] = {
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(3, 4, &pin_PA08)
};
SPI_TypeDef * mcu_spi_banks[3] = {SPI1, SPI2, SPI3};
-const mcu_spi_sck_obj_t mcu_spi_sck_list[7] = {
- SPI(1, 5, &pin_PA05),
- SPI(1, 5, &pin_PB03),
- SPI(2, 5, &pin_PB10),
- SPI(2, 5, &pin_PB13),
- SPI(2, 5, &pin_PC07),
- SPI(3, 6, &pin_PB03),
- SPI(3, 6, &pin_PC10),
+const mcu_periph_obj_t mcu_spi_sck_list[7] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(2, 5, &pin_PC07),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(3, 6, &pin_PC10),
};
-const mcu_spi_mosi_obj_t mcu_spi_mosi_list[6] = {
- SPI(1, 5, &pin_PA07),
- SPI(1, 5, &pin_PB05),
- SPI(2, 5, &pin_PB15),
- SPI(2, 5, &pin_PC03),
- SPI(3, 6, &pin_PB05),
- SPI(3, 6, &pin_PC12),
+const mcu_periph_obj_t mcu_spi_mosi_list[6] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(3, 6, &pin_PC12),
};
-const mcu_spi_miso_obj_t mcu_spi_miso_list[6] = {
- SPI(1, 5, &pin_PA06),
- SPI(1, 5, &pin_PB04),
- SPI(2, 5, &pin_PB14),
- SPI(2, 5, &pin_PC02),
- SPI(3, 6, &pin_PB04),
- SPI(3, 6, &pin_PC11),
+const mcu_periph_obj_t mcu_spi_miso_list[6] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(3, 6, &pin_PC11),
};
-const mcu_spi_nss_obj_t mcu_spi_nss_list[6] = {
- SPI(1, 5, &pin_PA04),
- SPI(1, 5, &pin_PA15),
- SPI(2, 5, &pin_PB09),
- SPI(2, 5, &pin_PB12),
- SPI(3, 6, &pin_PA04),
- SPI(3, 6, &pin_PA15),
+const mcu_periph_obj_t mcu_spi_nss_list[6] = {
+ PERIPH(1, 5, &pin_PA04),
+ PERIPH(1, 5, &pin_PA15),
+ PERIPH(2, 5, &pin_PB09),
+ PERIPH(2, 5, &pin_PB12),
+ PERIPH(3, 6, &pin_PA04),
+ PERIPH(3, 6, &pin_PA15),
};
USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, UART4, UART5, USART6};
bool mcu_uart_has_usart[MAX_UART] = {true, true, true, false, false, true};
-const mcu_uart_tx_obj_t mcu_uart_tx_list[12] = {
- UART(4, 8, &pin_PA00),
- UART(2, 7, &pin_PA02),
- UART(1, 7, &pin_PA09),
- UART(1, 7, &pin_PB06),
- UART(3, 7, &pin_PB10),
- UART(6, 8, &pin_PC06),
- UART(3, 7, &pin_PC10),
- UART(4, 8, &pin_PC10),
- UART(5, 8, &pin_PC12),
- UART(2, 7, &pin_PD05),
- UART(3, 7, &pin_PD08),
- UART(6, 8, &pin_PG14),
+const mcu_periph_obj_t mcu_uart_tx_list[12] = {
+ PERIPH(4, 8, &pin_PA00),
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(3, 7, &pin_PB10),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(3, 7, &pin_PC10),
+ PERIPH(4, 8, &pin_PC10),
+ PERIPH(5, 8, &pin_PC12),
+ PERIPH(2, 7, &pin_PD05),
+ PERIPH(3, 7, &pin_PD08),
+ PERIPH(6, 8, &pin_PG14),
};
-const mcu_uart_rx_obj_t mcu_uart_rx_list[12] = {
- UART(4, 8, &pin_PA01),
- UART(2, 7, &pin_PA03),
- UART(1, 7, &pin_PA10),
- UART(1, 7, &pin_PB07),
- UART(3, 7, &pin_PB11),
- UART(6, 8, &pin_PC07),
- UART(3, 7, &pin_PC11),
- UART(4, 8, &pin_PC11),
- UART(5, 8, &pin_PD02),
- UART(2, 7, &pin_PD06),
- UART(3, 7, &pin_PD09),
- UART(6, 8, &pin_PG09),
+const mcu_periph_obj_t mcu_uart_rx_list[12] = {
+ PERIPH(4, 8, &pin_PA01),
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(3, 7, &pin_PB11),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(3, 7, &pin_PC11),
+ PERIPH(4, 8, &pin_PC11),
+ PERIPH(5, 8, &pin_PD02),
+ PERIPH(2, 7, &pin_PD06),
+ PERIPH(3, 7, &pin_PD09),
+ PERIPH(6, 8, &pin_PG09),
};
//Timers
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
index e87e79857..98b4fab9c 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
@@ -24,29 +24,29 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PERIPH_H
//I2C
extern I2C_TypeDef * mcu_i2c_banks[3];
-extern const mcu_i2c_sda_obj_t mcu_i2c_sda_list[4];
-extern const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4];
+extern const mcu_periph_obj_t mcu_i2c_sda_list[4];
+extern const mcu_periph_obj_t mcu_i2c_scl_list[4];
//SPI
extern SPI_TypeDef * mcu_spi_banks[3];
-extern const mcu_spi_sck_obj_t mcu_spi_sck_list[7];
-extern const mcu_spi_mosi_obj_t mcu_spi_mosi_list[6];
-extern const mcu_spi_miso_obj_t mcu_spi_miso_list[6];
-extern const mcu_spi_nss_obj_t mcu_spi_nss_list[6];
+extern const mcu_periph_obj_t mcu_spi_sck_list[7];
+extern const mcu_periph_obj_t mcu_spi_mosi_list[6];
+extern const mcu_periph_obj_t mcu_spi_miso_list[6];
+extern const mcu_periph_obj_t mcu_spi_nss_list[6];
//UART
extern USART_TypeDef * mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
-extern const mcu_uart_tx_obj_t mcu_uart_tx_list[12];
-extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
+extern const mcu_periph_obj_t mcu_uart_tx_list[12];
+extern const mcu_periph_obj_t mcu_uart_rx_list[12];
//Timers
#define TIM_BANK_ARRAY_LEN 14
@@ -54,4 +54,4 @@ extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H \ No newline at end of file
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/pins.c b/ports/stm/peripherals/stm32f4/stm32f405xx/pins.c
index 86445fe14..0f669f1c6 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/pins.c
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/pins.c
@@ -26,7 +26,7 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
+#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/pins.h b/ports/stm/peripherals/stm32f4/stm32f405xx/pins.h
index 180f5c316..b3e5e3344 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/pins.h
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/pins.h
@@ -24,8 +24,8 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PINS_H
//Pins in datasheet order: DocID028087 Rev 7 page 50. LQFP100 only
//pg 50
@@ -155,4 +155,4 @@ extern const mcu_pin_obj_t pin_PB09;
extern const mcu_pin_obj_t pin_PE00;
extern const mcu_pin_obj_t pin_PE01;
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PINS_H
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/clocks.c b/ports/stm/peripherals/stm32f4/stm32f407xx/clocks.c
index 2afca64e8..a545aaec5 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/clocks.c
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/clocks.c
@@ -24,12 +24,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#include "stm32f4xx_hal.h"
-#include "py/mpconfig.h"
-void stm32f4_peripherals_clocks_init(void) {
- //TODO: All parameters must be moved to board level, due to relationship with HSE Osc.
+#include "stm32f4xx_hal.h"
+void stm32_peripherals_clocks_init(void) {
//System clock init
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c
index d1eaa90d1..a5f4eae78 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c
@@ -24,11 +24,10 @@
* THE SOFTWARE.
*/
-#include "stm32f4xx_hal.h"
-#include "stm32f4/gpio.h"
+#include "peripherals/gpio.h"
#include "common-hal/microcontroller/Pin.h"
-void stm32f4_peripherals_gpio_init(void) {
+void stm32_peripherals_gpio_init(void) {
//Enable all GPIO for now
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/periph.c b/ports/stm/peripherals/stm32f4/stm32f407xx/periph.c
index bc03f7c7b..e75f0b206 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/periph.c
@@ -26,97 +26,97 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
-#include "stm32f4/periph.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
// I2C
I2C_TypeDef * mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
-const mcu_i2c_sda_obj_t mcu_i2c_sda_list[4] = {
- I2C_SDA(1, 4, &pin_PB07),
- I2C_SDA(1, 4, &pin_PB09),
- I2C_SDA(2, 4, &pin_PB11),
- I2C_SDA(3, 4, &pin_PC09),
+const mcu_periph_obj_t mcu_i2c_sda_list[4] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 4, &pin_PB11),
+ PERIPH(3, 4, &pin_PC09),
};
-const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4] = {
- I2C_SCL(1, 4, &pin_PB06),
- I2C_SCL(1, 4, &pin_PB08),
- I2C_SCL(2, 4, &pin_PB10),
- I2C_SCL(3, 4, &pin_PA08)
+const mcu_periph_obj_t mcu_i2c_scl_list[4] = {
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(3, 4, &pin_PA08)
};
SPI_TypeDef * mcu_spi_banks[3] = {SPI1, SPI2, SPI3};
-const mcu_spi_sck_obj_t mcu_spi_sck_list[7] = {
- SPI(1, 5, &pin_PA05),
- SPI(1, 5, &pin_PB03),
- SPI(2, 5, &pin_PB10),
- SPI(2, 5, &pin_PB13),
- SPI(2, 5, &pin_PC07),
- SPI(3, 6, &pin_PB03),
- SPI(3, 6, &pin_PC10),
+const mcu_periph_obj_t mcu_spi_sck_list[7] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(2, 5, &pin_PC07),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(3, 6, &pin_PC10),
};
-const mcu_spi_mosi_obj_t mcu_spi_mosi_list[6] = {
- SPI(1, 5, &pin_PA07),
- SPI(1, 5, &pin_PB05),
- SPI(2, 5, &pin_PB15),
- SPI(2, 5, &pin_PC03),
- SPI(3, 6, &pin_PB05),
- SPI(3, 6, &pin_PC12),
+const mcu_periph_obj_t mcu_spi_mosi_list[6] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(3, 6, &pin_PC12),
};
-const mcu_spi_miso_obj_t mcu_spi_miso_list[6] = {
- SPI(1, 5, &pin_PA06),
- SPI(1, 5, &pin_PB04),
- SPI(2, 5, &pin_PB14),
- SPI(2, 5, &pin_PC02),
- SPI(3, 6, &pin_PB04),
- SPI(3, 6, &pin_PC11),
+const mcu_periph_obj_t mcu_spi_miso_list[6] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(3, 6, &pin_PC11),
};
-const mcu_spi_nss_obj_t mcu_spi_nss_list[6] = {
- SPI(1, 5, &pin_PA04),
- SPI(1, 5, &pin_PA15),
- SPI(2, 5, &pin_PB09),
- SPI(2, 5, &pin_PB12),
- SPI(3, 6, &pin_PA04),
- SPI(3, 6, &pin_PA15),
+const mcu_periph_obj_t mcu_spi_nss_list[6] = {
+ PERIPH(1, 5, &pin_PA04),
+ PERIPH(1, 5, &pin_PA15),
+ PERIPH(2, 5, &pin_PB09),
+ PERIPH(2, 5, &pin_PB12),
+ PERIPH(3, 6, &pin_PA04),
+ PERIPH(3, 6, &pin_PA15),
};
USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, UART4, UART5, USART6};
bool mcu_uart_has_usart[MAX_UART] = {true, true, true, false, false, true};
-const mcu_uart_tx_obj_t mcu_uart_tx_list[12] = {
- UART(4, 8, &pin_PA00),
- UART(2, 7, &pin_PA02),
- UART(1, 7, &pin_PA09),
- UART(1, 7, &pin_PB06),
- UART(3, 7, &pin_PB10),
- UART(6, 8, &pin_PC06),
- UART(3, 7, &pin_PC10),
- UART(4, 8, &pin_PC10),
- UART(5, 8, &pin_PC12),
- UART(2, 7, &pin_PD05),
- UART(3, 7, &pin_PD08),
- UART(6, 8, &pin_PG14),
+const mcu_periph_obj_t mcu_uart_tx_list[12] = {
+ PERIPH(4, 8, &pin_PA00),
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(3, 7, &pin_PB10),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(3, 7, &pin_PC10),
+ PERIPH(4, 8, &pin_PC10),
+ PERIPH(5, 8, &pin_PC12),
+ PERIPH(2, 7, &pin_PD05),
+ PERIPH(3, 7, &pin_PD08),
+ PERIPH(6, 8, &pin_PG14),
};
-const mcu_uart_rx_obj_t mcu_uart_rx_list[12] = {
- UART(4, 8, &pin_PA01),
- UART(2, 7, &pin_PA03),
- UART(1, 7, &pin_PA10),
- UART(1, 7, &pin_PB07),
- UART(3, 7, &pin_PB11),
- UART(6, 8, &pin_PC07),
- UART(3, 7, &pin_PC11),
- UART(4, 8, &pin_PC11),
- UART(5, 8, &pin_PD02),
- UART(2, 7, &pin_PD06),
- UART(3, 7, &pin_PD09),
- UART(6, 8, &pin_PG09),
+const mcu_periph_obj_t mcu_uart_rx_list[12] = {
+ PERIPH(4, 8, &pin_PA01),
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(3, 7, &pin_PB11),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(3, 7, &pin_PC11),
+ PERIPH(4, 8, &pin_PC11),
+ PERIPH(5, 8, &pin_PD02),
+ PERIPH(2, 7, &pin_PD06),
+ PERIPH(3, 7, &pin_PD09),
+ PERIPH(6, 8, &pin_PG09),
};
//Timers
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/periph.h b/ports/stm/peripherals/stm32f4/stm32f407xx/periph.h
index e87e79857..15cbfb16d 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/periph.h
@@ -24,29 +24,29 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PERIPH_H
//I2C
extern I2C_TypeDef * mcu_i2c_banks[3];
-extern const mcu_i2c_sda_obj_t mcu_i2c_sda_list[4];
-extern const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4];
+extern const mcu_periph_obj_t mcu_i2c_sda_list[4];
+extern const mcu_periph_obj_t mcu_i2c_scl_list[4];
//SPI
extern SPI_TypeDef * mcu_spi_banks[3];
-extern const mcu_spi_sck_obj_t mcu_spi_sck_list[7];
-extern const mcu_spi_mosi_obj_t mcu_spi_mosi_list[6];
-extern const mcu_spi_miso_obj_t mcu_spi_miso_list[6];
-extern const mcu_spi_nss_obj_t mcu_spi_nss_list[6];
+extern const mcu_periph_obj_t mcu_spi_sck_list[7];
+extern const mcu_periph_obj_t mcu_spi_mosi_list[6];
+extern const mcu_periph_obj_t mcu_spi_miso_list[6];
+extern const mcu_periph_obj_t mcu_spi_nss_list[6];
//UART
extern USART_TypeDef * mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
-extern const mcu_uart_tx_obj_t mcu_uart_tx_list[12];
-extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
+extern const mcu_periph_obj_t mcu_uart_tx_list[12];
+extern const mcu_periph_obj_t mcu_uart_rx_list[12];
//Timers
#define TIM_BANK_ARRAY_LEN 14
@@ -54,4 +54,4 @@ extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F405XX_PERIPH_H \ No newline at end of file
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/pins.c b/ports/stm/peripherals/stm32f4/stm32f407xx/pins.c
index 86445fe14..0f669f1c6 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/pins.c
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/pins.c
@@ -26,7 +26,7 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
+#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/pins.h b/ports/stm/peripherals/stm32f4/stm32f407xx/pins.h
index 180f5c316..109dcb922 100644
--- a/ports/stm/peripherals/stm32f4/stm32f407xx/pins.h
+++ b/ports/stm/peripherals/stm32f4/stm32f407xx/pins.h
@@ -24,8 +24,8 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PINS_H
//Pins in datasheet order: DocID028087 Rev 7 page 50. LQFP100 only
//pg 50
@@ -155,4 +155,4 @@ extern const mcu_pin_obj_t pin_PB09;
extern const mcu_pin_obj_t pin_PE00;
extern const mcu_pin_obj_t pin_PE01;
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F407XX_PINS_H
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/clocks.c b/ports/stm/peripherals/stm32f4/stm32f411xe/clocks.c
index 53810af26..194992e81 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/clocks.c
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/clocks.c
@@ -24,10 +24,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
+
#include "stm32f4xx_hal.h"
-#include "py/mpconfig.h"
-void stm32f4_peripherals_clocks_init(void) {
+void stm32_peripherals_clocks_init(void) {
//System clock init
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c b/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c
index aee0bd5eb..9aabffa9f 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c
@@ -24,12 +24,11 @@
* THE SOFTWARE.
*/
+#include "peripherals/gpio.h"
#include "stm32f4xx_hal.h"
-#include "stm32f4/gpio.h"
-#include "py/mpconfig.h"
#include "common-hal/microcontroller/Pin.h"
-void stm32f4_peripherals_gpio_init(void) {
+void stm32_peripherals_gpio_init(void) {
//* GPIO Ports Clock Enable */
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
@@ -39,16 +38,18 @@ void stm32f4_peripherals_gpio_init(void) {
__HAL_RCC_GPIOD_CLK_ENABLE();
//Never reset pins
+ // TODO: Move this out of peripherals. These helpers shouldn't reference anything CircuitPython
+ // specific.
never_reset_pin_number(2,14); //PC14 OSC32_IN
never_reset_pin_number(2,15); //PC15 OSC32_OUT
- #if !(BOARD_OVERWRITE_SWD)
+ #if !(BOARD_OVERWRITE_SWD)
never_reset_pin_number(0,13); //PA13 SWDIO
never_reset_pin_number(0,14); //PA14 SWCLK
#endif
// Port H is not included in GPIO port array
- // never_reset_pin_number(5,0); //PH0 JTDO
+ // never_reset_pin_number(5,0); //PH0 JTDO
// never_reset_pin_number(5,1); //PH1 JTRST
}
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/periph.c b/ports/stm/peripherals/stm32f4/stm32f411xe/periph.c
index b7d9edf4f..085663749 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/periph.c
@@ -26,120 +26,120 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
-#include "stm32f4/periph.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
// I2C
I2C_TypeDef * mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
-const mcu_i2c_sda_obj_t mcu_i2c_sda_list[7] = {
- I2C_SDA(1, 4, &pin_PB07),
- I2C_SDA(1, 4, &pin_PB09),
- I2C_SDA(2, 9, &pin_PB09),
- I2C_SDA(2, 9, &pin_PB03),
- I2C_SDA(3, 4, &pin_PC09),
- I2C_SDA(3, 9, &pin_PB04),
- I2C_SDA(3, 9, &pin_PB08)
+const mcu_periph_obj_t mcu_i2c_sda_list[7] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 9, &pin_PB09),
+ PERIPH(2, 9, &pin_PB03),
+ PERIPH(3, 4, &pin_PC09),
+ PERIPH(3, 9, &pin_PB04),
+ PERIPH(3, 9, &pin_PB08)
};
-const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4] = {
- I2C_SCL(1, 4, &pin_PB06),
- I2C_SCL(1, 4, &pin_PB08),
- I2C_SCL(2, 4, &pin_PB10),
- I2C_SCL(3, 4, &pin_PA08)
+const mcu_periph_obj_t mcu_i2c_scl_list[4] = {
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(3, 4, &pin_PA08)
};
// SPI
SPI_TypeDef * mcu_spi_banks[5] = {SPI1, SPI2, SPI3, SPI4, SPI5};
-const mcu_spi_sck_obj_t mcu_spi_sck_list[15] = {
- SPI(1, 5, &pin_PA05),
- SPI(1, 5, &pin_PB03),
- SPI(2, 5, &pin_PB10),
- SPI(2, 5, &pin_PB13),
- SPI(2, 5, &pin_PC07),
- SPI(2, 5, &pin_PD03),
- SPI(3, 6, &pin_PB03),
- SPI(3, 7, &pin_PB12),
- SPI(3, 6, &pin_PC10),
- SPI(4, 6, &pin_PB13),
- SPI(4, 5, &pin_PE02),
- SPI(4, 5, &pin_PE12),
- SPI(5, 6, &pin_PB00),
- SPI(5, 6, &pin_PE02),
- SPI(5, 6, &pin_PE12)
+const mcu_periph_obj_t mcu_spi_sck_list[15] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(2, 5, &pin_PC07),
+ PERIPH(2, 5, &pin_PD03),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(3, 7, &pin_PB12),
+ PERIPH(3, 6, &pin_PC10),
+ PERIPH(4, 6, &pin_PB13),
+ PERIPH(4, 5, &pin_PE02),
+ PERIPH(4, 5, &pin_PE12),
+ PERIPH(5, 6, &pin_PB00),
+ PERIPH(5, 6, &pin_PE02),
+ PERIPH(5, 6, &pin_PE12)
};
-const mcu_spi_mosi_obj_t mcu_spi_mosi_list[14] = {
- SPI(1, 5, &pin_PA07),
- SPI(1, 5, &pin_PB05),
- SPI(2, 5, &pin_PB15),
- SPI(2, 5, &pin_PC03),
- SPI(3, 6, &pin_PB05),
- SPI(3, 6, &pin_PC12),
- SPI(3, 5, &pin_PD06),
- SPI(4, 5, &pin_PA01),
- SPI(4, 5, &pin_PE06),
- SPI(4, 5, &pin_PE14),
- SPI(5, 6, &pin_PA10),
- SPI(5, 6, &pin_PB08),
- SPI(5, 6, &pin_PE06),
- SPI(5, 6, &pin_PE14)
+const mcu_periph_obj_t mcu_spi_mosi_list[14] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(3, 6, &pin_PC12),
+ PERIPH(3, 5, &pin_PD06),
+ PERIPH(4, 5, &pin_PA01),
+ PERIPH(4, 5, &pin_PE06),
+ PERIPH(4, 5, &pin_PE14),
+ PERIPH(5, 6, &pin_PA10),
+ PERIPH(5, 6, &pin_PB08),
+ PERIPH(5, 6, &pin_PE06),
+ PERIPH(5, 6, &pin_PE14)
};
-const mcu_spi_miso_obj_t mcu_spi_miso_list[12] = {
- SPI(1, 5, &pin_PA06),
- SPI(1, 5, &pin_PB04),
- SPI(2, 5, &pin_PB14),
- SPI(2, 5, &pin_PC02),
- SPI(3, 6, &pin_PB04),
- SPI(3, 6, &pin_PC11),
- SPI(4, 6, &pin_PA11),
- SPI(4, 5, &pin_PE05),
- SPI(4, 5, &pin_PE13),
- SPI(5, 6, &pin_PA12),
- SPI(5, 6, &pin_PE05),
- SPI(5, 6, &pin_PE13)
+const mcu_periph_obj_t mcu_spi_miso_list[12] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(3, 6, &pin_PC11),
+ PERIPH(4, 6, &pin_PA11),
+ PERIPH(4, 5, &pin_PE05),
+ PERIPH(4, 5, &pin_PE13),
+ PERIPH(5, 6, &pin_PA12),
+ PERIPH(5, 6, &pin_PE05),
+ PERIPH(5, 6, &pin_PE13)
};
-const mcu_spi_nss_obj_t mcu_spi_nss_list[12] = {
- SPI(1, 5, &pin_PA04),
- SPI(1, 5, &pin_PA15),
- SPI(2, 5, &pin_PB09),
- SPI(2, 5, &pin_PB12),
- SPI(3, 6, &pin_PA04),
- SPI(3, 6, &pin_PA15),
- SPI(4, 6, &pin_PB12),
- SPI(4, 5, &pin_PE04),
- SPI(4, 5, &pin_PE11),
- SPI(5, 6, &pin_PB01),
- SPI(5, 6, &pin_PE04),
- SPI(5, 6, &pin_PE11)
+const mcu_periph_obj_t mcu_spi_nss_list[12] = {
+ PERIPH(1, 5, &pin_PA04),
+ PERIPH(1, 5, &pin_PA15),
+ PERIPH(2, 5, &pin_PB09),
+ PERIPH(2, 5, &pin_PB12),
+ PERIPH(3, 6, &pin_PA04),
+ PERIPH(3, 6, &pin_PA15),
+ PERIPH(4, 6, &pin_PB12),
+ PERIPH(4, 5, &pin_PE04),
+ PERIPH(4, 5, &pin_PE11),
+ PERIPH(5, 6, &pin_PB01),
+ PERIPH(5, 6, &pin_PE04),
+ PERIPH(5, 6, &pin_PE11)
};
USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, NULL, NULL, NULL, USART6};
bool mcu_uart_has_usart[MAX_UART] = {true, true, false, false, false, true};
-const mcu_uart_tx_obj_t mcu_uart_tx_list[7] = {
- UART(2, 7, &pin_PA02),
- UART(1, 7, &pin_PA09),
- UART(1, 7, &pin_PA15),
- UART(6, 8, &pin_PA11),
- UART(1, 7, &pin_PB06),
- UART(6, 8, &pin_PC06),
- UART(2, 7, &pin_PD05),
+const mcu_periph_obj_t mcu_uart_tx_list[7] = {
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(1, 7, &pin_PA15),
+ PERIPH(6, 8, &pin_PA11),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(2, 7, &pin_PD05),
};
-const mcu_uart_rx_obj_t mcu_uart_rx_list[7] = {
- UART(2, 7, &pin_PA03),
- UART(1, 7, &pin_PA10),
- UART(6, 8, &pin_PA12),
- UART(1, 7, &pin_PB03),
- UART(1, 7, &pin_PB07),
- UART(6, 8, &pin_PC07),
- UART(2, 7, &pin_PD06),
+const mcu_periph_obj_t mcu_uart_rx_list[7] = {
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(6, 8, &pin_PA12),
+ PERIPH(1, 7, &pin_PB03),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(2, 7, &pin_PD06),
};
//Timers
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/periph.h b/ports/stm/peripherals/stm32f4/stm32f411xe/periph.h
index d657d73b6..2c5e5dd56 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/periph.h
@@ -24,29 +24,29 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F411XE_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F411XE_PERIPH_H
//I2C
extern I2C_TypeDef * mcu_i2c_banks[3];
-extern const mcu_i2c_sda_obj_t mcu_i2c_sda_list[7];
-extern const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4];
+extern const mcu_periph_obj_t mcu_i2c_sda_list[7];
+extern const mcu_periph_obj_t mcu_i2c_scl_list[4];
//SPI
extern SPI_TypeDef * mcu_spi_banks[5];
-extern const mcu_spi_sck_obj_t mcu_spi_sck_list[15];
-extern const mcu_spi_mosi_obj_t mcu_spi_mosi_list[14];
-extern const mcu_spi_miso_obj_t mcu_spi_miso_list[12];
-extern const mcu_spi_nss_obj_t mcu_spi_nss_list[12];
+extern const mcu_periph_obj_t mcu_spi_sck_list[15];
+extern const mcu_periph_obj_t mcu_spi_mosi_list[14];
+extern const mcu_periph_obj_t mcu_spi_miso_list[12];
+extern const mcu_periph_obj_t mcu_spi_nss_list[12];
//UART
extern USART_TypeDef * mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
-extern const mcu_uart_tx_obj_t mcu_uart_tx_list[7];
-extern const mcu_uart_rx_obj_t mcu_uart_rx_list[7];
+extern const mcu_periph_obj_t mcu_uart_tx_list[7];
+extern const mcu_periph_obj_t mcu_uart_rx_list[7];
//Timers
#define TIM_BANK_ARRAY_LEN 14
@@ -54,4 +54,4 @@ extern const mcu_uart_rx_obj_t mcu_uart_rx_list[7];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H \ No newline at end of file
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F411XE_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/pins.c b/ports/stm/peripherals/stm32f4/stm32f411xe/pins.c
index 7e88c3dcb..eea2a1a1b 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/pins.c
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/pins.c
@@ -26,7 +26,7 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
+#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/pins.h b/ports/stm/peripherals/stm32f4/stm32f411xe/pins.h
index 37d3a5cf1..b6c18b02e 100644
--- a/ports/stm/peripherals/stm32f4/stm32f411xe/pins.h
+++ b/ports/stm/peripherals/stm32f4/stm32f411xe/pins.h
@@ -24,8 +24,8 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PINS_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PINS_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F411XE_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F411XE_PINS_H
//Pins in datasheet order: DocID026289 Rev 7 page 38. LQFP100 only
//pg 38
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/clocks.c b/ports/stm/peripherals/stm32f4/stm32f412zx/clocks.c
index b4075027a..6c4cb5b32 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/clocks.c
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/clocks.c
@@ -24,12 +24,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
+
#include "stm32f4xx_hal.h"
-#include "py/mpconfig.h"
-void stm32f4_peripherals_clocks_init(void) {
+void stm32_peripherals_clocks_init(void) {
//System clock init
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
+ RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c
index d17ab4e01..3ec1b5b79 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c
@@ -24,193 +24,22 @@
* THE SOFTWARE.
*/
-/* GPIO PIN REFERENCE
-#define LED3_Pin GPIO_PIN_2
-#define LED3_GPIO_Port GPIOE
-#define LED4_Pin GPIO_PIN_3
-#define LED4_GPIO_Port GPIOE
-#define DFSDM_DATIN3_Pin GPIO_PIN_4
-#define DFSDM_DATIN3_GPIO_Port GPIOE
-#define A0_Pin GPIO_PIN_0
-#define A0_GPIO_Port GPIOF
-#define LCD_BLCTRL_Pin GPIO_PIN_5
-#define LCD_BLCTRL_GPIO_Port GPIOF
-#define QSPI_BK1_IO3_Pin GPIO_PIN_6
-#define QSPI_BK1_IO3_GPIO_Port GPIOF
-#define QSPI_BK1_IO2_Pin GPIO_PIN_7
-#define QSPI_BK1_IO2_GPIO_Port GPIOF
-#define QSPI_BK1_IO0_Pin GPIO_PIN_8
-#define QSPI_BK1_IO0_GPIO_Port GPIOF
-#define QSPI_BK1_IO1_Pin GPIO_PIN_9
-#define QSPI_BK1_IO1_GPIO_Port GPIOF
-#define STLK_MCO_Pin GPIO_PIN_0
-#define STLK_MCO_GPIO_Port GPIOH
-#define DFSDM_CKOUT_Pin GPIO_PIN_2
-#define DFSDM_CKOUT_GPIO_Port GPIOC
-#define JOY_SEL_Pin GPIO_PIN_0
-#define JOY_SEL_GPIO_Port GPIOA
-#define STLINK_RX_Pin GPIO_PIN_2
-#define STLINK_RX_GPIO_Port GPIOA
-#define STLINK_TX_Pin GPIO_PIN_3
-#define STLINK_TX_GPIO_Port GPIOA
-#define CODEC_I2S3_WS_Pin GPIO_PIN_4
-#define CODEC_I2S3_WS_GPIO_Port GPIOA
-#define DFSDM_DATIN0_Pin GPIO_PIN_1
-#define DFSDM_DATIN0_GPIO_Port GPIOB
-#define QSPI_CLK_Pin GPIO_PIN_2
-#define QSPI_CLK_GPIO_Port GPIOB
-#define EXT_RESET_Pin GPIO_PIN_11
-#define EXT_RESET_GPIO_Port GPIOF
-#define CTP_RST_Pin GPIO_PIN_12
-#define CTP_RST_GPIO_Port GPIOF
-#define JOY_RIGHT_Pin GPIO_PIN_14
-#define JOY_RIGHT_GPIO_Port GPIOF
-#define JOY_LEFT_Pin GPIO_PIN_15
-#define JOY_LEFT_GPIO_Port GPIOF
-#define JOY_UP_Pin GPIO_PIN_0
-#define JOY_UP_GPIO_Port GPIOG
-#define JOY_DOWN_Pin GPIO_PIN_1
-#define JOY_DOWN_GPIO_Port GPIOG
-#define D4_Pin GPIO_PIN_7
-#define D4_GPIO_Port GPIOE
-#define D5_Pin GPIO_PIN_8
-#define D5_GPIO_Port GPIOE
-#define D6_Pin GPIO_PIN_9
-#define D6_GPIO_Port GPIOE
-#define D7_Pin GPIO_PIN_10
-#define D7_GPIO_Port GPIOE
-#define D8_Pin GPIO_PIN_11
-#define D8_GPIO_Port GPIOE
-#define D9_Pin GPIO_PIN_12
-#define D9_GPIO_Port GPIOE
-#define D10_Pin GPIO_PIN_13
-#define D10_GPIO_Port GPIOE
-#define D11_Pin GPIO_PIN_14
-#define D11_GPIO_Port GPIOE
-#define D12_Pin GPIO_PIN_15
-#define D12_GPIO_Port GPIOE
-#define I2C2_SCL_Pin GPIO_PIN_10
-#define I2C2_SCL_GPIO_Port GPIOB
-#define M2_CKIN_Pin GPIO_PIN_11
-#define M2_CKIN_GPIO_Port GPIOB
-#define CODEC_I2S3_SCK_Pin GPIO_PIN_12
-#define CODEC_I2S3_SCK_GPIO_Port GPIOB
-#define D13_Pin GPIO_PIN_8
-#define D13_GPIO_Port GPIOD
-#define D14_Pin GPIO_PIN_9
-#define D14_GPIO_Port GPIOD
-#define D15_Pin GPIO_PIN_10
-#define D15_GPIO_Port GPIOD
-#define LCD_RESET_Pin GPIO_PIN_11
-#define LCD_RESET_GPIO_Port GPIOD
-#define D0_Pin GPIO_PIN_14
-#define D0_GPIO_Port GPIOD
-#define D1_Pin GPIO_PIN_15
-#define D1_GPIO_Port GPIOD
-#define CODEC_INT_Pin GPIO_PIN_2
-#define CODEC_INT_GPIO_Port GPIOG
-#define LCD_TE_Pin GPIO_PIN_4
-#define LCD_TE_GPIO_Port GPIOG
-#define CTP_INT_Pin GPIO_PIN_5
-#define CTP_INT_GPIO_Port GPIOG
-#define QSPI_BK1_NCS_Pin GPIO_PIN_6
-#define QSPI_BK1_NCS_GPIO_Port GPIOG
-#define USB_OTGFS_OVRCR_Pin GPIO_PIN_7
-#define USB_OTGFS_OVRCR_GPIO_Port GPIOG
-#define USB_OTGFS_PPWR_EN_Pin GPIO_PIN_8
-#define USB_OTGFS_PPWR_EN_GPIO_Port GPIOG
-#define CODEC_I2S3_MCK_Pin GPIO_PIN_7
-#define CODEC_I2S3_MCK_GPIO_Port GPIOC
-#define uSD_D0_Pin GPIO_PIN_8
-#define uSD_D0_GPIO_Port GPIOC
-#define uSD_D1_Pin GPIO_PIN_9
-#define uSD_D1_GPIO_Port GPIOC
-#define M2_CKINA8_Pin GPIO_PIN_8
-#define M2_CKINA8_GPIO_Port GPIOA
-#define USB_OTGFS_VBUS_Pin GPIO_PIN_9
-#define USB_OTGFS_VBUS_GPIO_Port GPIOA
-#define USB_OTGFS_ID_Pin GPIO_PIN_10
-#define USB_OTGFS_ID_GPIO_Port GPIOA
-#define USB_OTGFS_DM_Pin GPIO_PIN_11
-#define USB_OTGFS_DM_GPIO_Port GPIOA
-#define USB_OTGFS_DP_Pin GPIO_PIN_12
-#define USB_OTGFS_DP_GPIO_Port GPIOA
-#define SWDIO_Pin GPIO_PIN_13
-#define SWDIO_GPIO_Port GPIOA
-#define SWCLK_Pin GPIO_PIN_14
-#define SWCLK_GPIO_Port GPIOA
-#define uSD_D2_Pin GPIO_PIN_10
-#define uSD_D2_GPIO_Port GPIOC
-#define uSD_D3_Pin GPIO_PIN_11
-#define uSD_D3_GPIO_Port GPIOC
-#define uSD_CLK_Pin GPIO_PIN_12
-#define uSD_CLK_GPIO_Port GPIOC
-#define D2_Pin GPIO_PIN_0
-#define D2_GPIO_Port GPIOD
-#define D3_Pin GPIO_PIN_1
-#define D3_GPIO_Port GPIOD
-#define uSD_CMD_Pin GPIO_PIN_2
-#define uSD_CMD_GPIO_Port GPIOD
-#define uSD_DETECT_Pin GPIO_PIN_3
-#define uSD_DETECT_GPIO_Port GPIOD
-#define FMC_NOE_Pin GPIO_PIN_4
-#define FMC_NOE_GPIO_Port GPIOD
-#define FMC_NWE_Pin GPIO_PIN_5
-#define FMC_NWE_GPIO_Port GPIOD
-#define FMC_NE1_Pin GPIO_PIN_7
-#define FMC_NE1_GPIO_Port GPIOD
-#define SWO_Pin GPIO_PIN_3
-#define SWO_GPIO_Port GPIOB
-#define CODEC_I2S3ext_SD_Pin GPIO_PIN_4
-#define CODEC_I2S3ext_SD_GPIO_Port GPIOB
-#define CODEC_I2S3_SD_Pin GPIO_PIN_5
-#define CODEC_I2S3_SD_GPIO_Port GPIOB
-#define I2C1_SCL_Pin GPIO_PIN_6
-#define I2C1_SCL_GPIO_Port GPIOB
-#define I2C1_SDA_Pin GPIO_PIN_7
-#define I2C1_SDA_GPIO_Port GPIOB
-#define I2C2_SDA_Pin GPIO_PIN_9
-#define I2C2_SDA_GPIO_Port GPIOB
-#define LED1_Pin GPIO_PIN_0
-#define LED1_GPIO_Port GPIOE
-#define LED2_Pin GPIO_PIN_1
-#define LED2_GPIO_Port GPIOE
-*/
-
-#include "stm32f4xx_hal.h"
-#include "stm32f4/gpio.h"
+#include "peripherals/gpio.h"
#include "common-hal/microcontroller/Pin.h"
-void stm32f4_peripherals_gpio_init(void) {
- //Enable all GPIO for now
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOF_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
-
- HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);
- //HAL_GPIO_WritePin(USB_OTGFS_PPWR_EN_GPIO_Port, USB_OTGFS_PPWR_EN_Pin, GPIO_PIN_SET);
+void stm32_peripherals_gpio_init(void) {
- //Configure LED pins
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOF_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
- //Status LED chain
- stm32f4_peripherals_status_led(0,1);
- stm32f4_peripherals_status_led(1,0);
- stm32f4_peripherals_status_led(2,0);
- stm32f4_peripherals_status_led(3,0);
-
- //Never reset pins
- never_reset_pin_number(2,13); //PC13 anti tamp
+ //Never reset pins
+ never_reset_pin_number(2,13); //PC13 anti tamp
never_reset_pin_number(2,14); //PC14 OSC32_IN
never_reset_pin_number(2,15); //PC15 OSC32_OUT
never_reset_pin_number(0,13); //PA13 SWDIO
@@ -223,21 +52,3 @@ void stm32f4_peripherals_gpio_init(void) {
// never_reset_pin_number(5,0); //PH0 JTDO
// never_reset_pin_number(5,1); //PH1 JTRST
}
-
-//LEDs are inverted on F411 DISCO
-void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) {
- switch(led)
- {
- case 0: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, (state ^ 1));
- break;
- case 1: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, (state ^ 1));
- break;
- case 2: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, (state ^ 1));
- break;
- case 3: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, (state ^ 1));
- break;
- default: break;
- }
-}
-
-
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/periph.c b/ports/stm/peripherals/stm32f4/stm32f412zx/periph.c
index f5effa80e..e92c88ce5 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/periph.c
@@ -26,98 +26,98 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
-#include "stm32f4/periph.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
// I2C
I2C_TypeDef * mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
-const mcu_i2c_sda_obj_t mcu_i2c_sda_list[8] = {
- I2C_SDA(1, 4, &pin_PB07),
- I2C_SDA(1, 4, &pin_PB09),
- I2C_SDA(2, 4, &pin_PB11), //not on LQFP100
- I2C_SDA(2, 9, &pin_PB09),
- I2C_SDA(2, 9, &pin_PB03),
- I2C_SDA(3, 4, &pin_PC09),
- I2C_SDA(3, 9, &pin_PB04),
- I2C_SDA(3, 9, &pin_PB08)
+const mcu_periph_obj_t mcu_i2c_sda_list[8] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 4, &pin_PB11), //not on LQFP100
+ PERIPH(2, 9, &pin_PB09),
+ PERIPH(2, 9, &pin_PB03),
+ PERIPH(3, 4, &pin_PC09),
+ PERIPH(3, 9, &pin_PB04),
+ PERIPH(3, 9, &pin_PB08)
};
-const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4] = {
- I2C_SCL(1, 4, &pin_PB06),
- I2C_SCL(1, 4, &pin_PB08),
- I2C_SCL(2, 4, &pin_PB10),
- I2C_SCL(3, 4, &pin_PA08)
+const mcu_periph_obj_t mcu_i2c_scl_list[4] = {
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(3, 4, &pin_PA08)
};
// SPI
SPI_TypeDef * mcu_spi_banks[5] = {SPI1, SPI2, SPI3, SPI4, SPI5};
-const mcu_spi_sck_obj_t mcu_spi_sck_list[15] = {
- SPI(1, 5, &pin_PA05),
- SPI(1, 5, &pin_PB03),
- SPI(2, 5, &pin_PB10),
- SPI(2, 5, &pin_PB13),
- SPI(2, 5, &pin_PC07),
- SPI(2, 5, &pin_PD03),
- SPI(3, 6, &pin_PB03),
- SPI(3, 7, &pin_PB12),
- SPI(3, 6, &pin_PC10),
- SPI(4, 6, &pin_PB13),
- SPI(4, 5, &pin_PE02),
- SPI(4, 5, &pin_PE12),
- SPI(5, 6, &pin_PB00),
- SPI(5, 6, &pin_PE02),
- SPI(5, 6, &pin_PE12)
+const mcu_periph_obj_t mcu_spi_sck_list[15] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(2, 5, &pin_PC07),
+ PERIPH(2, 5, &pin_PD03),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(3, 7, &pin_PB12),
+ PERIPH(3, 6, &pin_PC10),
+ PERIPH(4, 6, &pin_PB13),
+ PERIPH(4, 5, &pin_PE02),
+ PERIPH(4, 5, &pin_PE12),
+ PERIPH(5, 6, &pin_PB00),
+ PERIPH(5, 6, &pin_PE02),
+ PERIPH(5, 6, &pin_PE12)
};
-const mcu_spi_mosi_obj_t mcu_spi_mosi_list[14] = {
- SPI(1, 5, &pin_PA07),
- SPI(1, 5, &pin_PB05),
- SPI(2, 5, &pin_PB15),
- SPI(2, 5, &pin_PC03),
- SPI(3, 6, &pin_PB05),
- SPI(3, 6, &pin_PC12),
- SPI(3, 5, &pin_PD06),
- SPI(4, 5, &pin_PA01),
- SPI(4, 5, &pin_PE06),
- SPI(4, 5, &pin_PE14),
- SPI(5, 6, &pin_PA10),
- SPI(5, 6, &pin_PB08),
- SPI(5, 6, &pin_PE06),
- SPI(5, 6, &pin_PE14)
+const mcu_periph_obj_t mcu_spi_mosi_list[14] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(3, 6, &pin_PC12),
+ PERIPH(3, 5, &pin_PD06),
+ PERIPH(4, 5, &pin_PA01),
+ PERIPH(4, 5, &pin_PE06),
+ PERIPH(4, 5, &pin_PE14),
+ PERIPH(5, 6, &pin_PA10),
+ PERIPH(5, 6, &pin_PB08),
+ PERIPH(5, 6, &pin_PE06),
+ PERIPH(5, 6, &pin_PE14)
};
-const mcu_spi_miso_obj_t mcu_spi_miso_list[12] = {
- SPI(1, 5, &pin_PA06),
- SPI(1, 5, &pin_PB04),
- SPI(2, 5, &pin_PB14),
- SPI(2, 5, &pin_PC02),
- SPI(3, 6, &pin_PB04),
- SPI(3, 6, &pin_PC11),
- SPI(4, 6, &pin_PA11),
- SPI(4, 5, &pin_PE05),
- SPI(4, 5, &pin_PE13),
- SPI(5, 6, &pin_PA12),
- SPI(5, 6, &pin_PE05),
- SPI(5, 6, &pin_PE13)
+const mcu_periph_obj_t mcu_spi_miso_list[12] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(3, 6, &pin_PC11),
+ PERIPH(4, 6, &pin_PA11),
+ PERIPH(4, 5, &pin_PE05),
+ PERIPH(4, 5, &pin_PE13),
+ PERIPH(5, 6, &pin_PA12),
+ PERIPH(5, 6, &pin_PE05),
+ PERIPH(5, 6, &pin_PE13)
};
-const mcu_spi_nss_obj_t mcu_spi_nss_list[12] = {
- SPI(1, 5, &pin_PA04),
- SPI(1, 5, &pin_PA15),
- SPI(2, 5, &pin_PB09),
- SPI(2, 5, &pin_PB12),
- SPI(3, 6, &pin_PA04),
- SPI(3, 6, &pin_PA15),
- SPI(4, 6, &pin_PB12),
- SPI(4, 5, &pin_PE04),
- SPI(4, 5, &pin_PE11),
- SPI(5, 6, &pin_PB01),
- SPI(5, 6, &pin_PE04),
- SPI(5, 6, &pin_PE11)
+const mcu_periph_obj_t mcu_spi_nss_list[12] = {
+ PERIPH(1, 5, &pin_PA04),
+ PERIPH(1, 5, &pin_PA15),
+ PERIPH(2, 5, &pin_PB09),
+ PERIPH(2, 5, &pin_PB12),
+ PERIPH(3, 6, &pin_PA04),
+ PERIPH(3, 6, &pin_PA15),
+ PERIPH(4, 6, &pin_PB12),
+ PERIPH(4, 5, &pin_PE04),
+ PERIPH(4, 5, &pin_PE11),
+ PERIPH(5, 6, &pin_PB01),
+ PERIPH(5, 6, &pin_PE04),
+ PERIPH(5, 6, &pin_PE11)
};
//UART
@@ -125,33 +125,33 @@ const mcu_spi_nss_obj_t mcu_spi_nss_list[12] = {
USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, NULL, NULL, USART6};
bool mcu_uart_has_usart[MAX_UART] = {true, true, true, false, false, true};
-const mcu_uart_tx_obj_t mcu_uart_tx_list[11] = {
- UART(2, 7, &pin_PA02),
- UART(1, 7, &pin_PA09),
- UART(1, 7, &pin_PA15),
- UART(6, 8, &pin_PA11),
- UART(1, 7, &pin_PB06),
- UART(3, 7, &pin_PB10),
- UART(6, 8, &pin_PC06),
- UART(3, 7, &pin_PC10),
- UART(2, 7, &pin_PD05),
- UART(3, 7, &pin_PD08),
- UART(6, 8, &pin_PG14),
+const mcu_periph_obj_t mcu_uart_tx_list[11] = {
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(1, 7, &pin_PA15),
+ PERIPH(6, 8, &pin_PA11),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(3, 7, &pin_PB10),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(3, 7, &pin_PC10),
+ PERIPH(2, 7, &pin_PD05),
+ PERIPH(3, 7, &pin_PD08),
+ PERIPH(6, 8, &pin_PG14),
};
-const mcu_uart_rx_obj_t mcu_uart_rx_list[12] = {
- UART(2, 7, &pin_PA03),
- UART(1, 7, &pin_PA10),
- UART(6, 8, &pin_PA12),
- UART(1, 7, &pin_PB03),
- UART(1, 7, &pin_PB07),
- UART(3, 7, &pin_PB11),
- UART(3, 7, &pin_PC05),
- UART(6, 8, &pin_PC07),
- UART(3, 7, &pin_PC11),
- UART(2, 7, &pin_PD06),
- UART(3, 7, &pin_PD09),
- UART(6, 8, &pin_PG09),
+const mcu_periph_obj_t mcu_uart_rx_list[12] = {
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(6, 8, &pin_PA12),
+ PERIPH(1, 7, &pin_PB03),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(3, 7, &pin_PB11),
+ PERIPH(3, 7, &pin_PC05),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(3, 7, &pin_PC11),
+ PERIPH(2, 7, &pin_PD06),
+ PERIPH(3, 7, &pin_PD09),
+ PERIPH(6, 8, &pin_PG09),
};
//Timers
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/periph.h b/ports/stm/peripherals/stm32f4/stm32f412zx/periph.h
index e0141e6da..f668ace75 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/periph.h
@@ -24,30 +24,30 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PERIPH_H
//I2C
extern I2C_TypeDef * mcu_i2c_banks[3];
-extern const mcu_i2c_sda_obj_t mcu_i2c_sda_list[8];
-extern const mcu_i2c_scl_obj_t mcu_i2c_scl_list[4];
+extern const mcu_periph_obj_t mcu_i2c_sda_list[8];
+extern const mcu_periph_obj_t mcu_i2c_scl_list[4];
//SPI
extern SPI_TypeDef * mcu_spi_banks[5];
-extern const mcu_spi_sck_obj_t mcu_spi_sck_list[15];
-extern const mcu_spi_mosi_obj_t mcu_spi_mosi_list[14];
-extern const mcu_spi_miso_obj_t mcu_spi_miso_list[12];
-extern const mcu_spi_nss_obj_t mcu_spi_nss_list[12];
+extern const mcu_periph_obj_t mcu_spi_sck_list[15];
+extern const mcu_periph_obj_t mcu_spi_mosi_list[14];
+extern const mcu_periph_obj_t mcu_spi_miso_list[12];
+extern const mcu_periph_obj_t mcu_spi_nss_list[12];
//UART
extern USART_TypeDef * mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
-extern const mcu_uart_tx_obj_t mcu_uart_tx_list[11];
-extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
+extern const mcu_periph_obj_t mcu_uart_tx_list[11];
+extern const mcu_periph_obj_t mcu_uart_rx_list[12];
//Timers
#define TIM_BANK_ARRAY_LEN 14
@@ -55,4 +55,4 @@ extern const mcu_uart_rx_obj_t mcu_uart_rx_list[12];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F411VE_PERIPH_H \ No newline at end of file
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/pins.c b/ports/stm/peripherals/stm32f4/stm32f412zx/pins.c
index c56de5a29..ef3ce6d0e 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/pins.c
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/pins.c
@@ -26,7 +26,7 @@
#include "py/obj.h"
#include "py/mphal.h"
-#include "stm32f4/pins.h"
+#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/pins.h b/ports/stm/peripherals/stm32f4/stm32f412zx/pins.h
index 180f5c316..5cf99345c 100644
--- a/ports/stm/peripherals/stm32f4/stm32f412zx/pins.h
+++ b/ports/stm/peripherals/stm32f4/stm32f412zx/pins.h
@@ -24,10 +24,9 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
-#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PINS_H
-//Pins in datasheet order: DocID028087 Rev 7 page 50. LQFP100 only
//pg 50
extern const mcu_pin_obj_t pin_PE02;
extern const mcu_pin_obj_t pin_PE03;
@@ -155,4 +154,4 @@ extern const mcu_pin_obj_t pin_PB09;
extern const mcu_pin_obj_t pin_PE00;
extern const mcu_pin_obj_t pin_PE01;
-#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F412ZX_PINS_H
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/clocks.c b/ports/stm/peripherals/stm32f7/stm32f767xx/clocks.c
new file mode 100644
index 000000000..18b202df5
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/clocks.c
@@ -0,0 +1,66 @@
+
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "stm32f7xx_hal.h"
+
+void stm32_peripherals_clocks_init(void) {
+ RCC_ClkInitTypeDef RCC_ClkInitStruct;
+ RCC_OscInitTypeDef RCC_OscInitStruct;
+
+ /* Enable Power Control clock */
+ __HAL_RCC_PWR_CLK_ENABLE();
+
+ /* The voltage scaling allows optimizing the power consumption when the device is
+ clocked below the maximum system frequency, to update the voltage scaling value
+ regarding system frequency refer to product datasheet. */
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+
+ /* Enable HSE Oscillator and activate PLL with HSE as source */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = BOARD_OSC_DIV;
+ RCC_OscInitStruct.PLL.PLLN = 432;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 9;
+ RCC_OscInitStruct.PLL.PLLR = 7;
+ HAL_RCC_OscConfig(&RCC_OscInitStruct);
+
+ /* Activate the OverDrive to reach the 216 MHz Frequency */
+ HAL_PWREx_EnableOverDrive();
+
+ /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
+ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
+
+ HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
+
+}
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c b/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c
new file mode 100644
index 000000000..d51ff53c1
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "gpio.h"
+#include "common-hal/microcontroller/Pin.h"
+
+void stm32_peripherals_gpio_init(void) {
+ //Enable all GPIO for now
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOF_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+
+ //Never reset pins
+ never_reset_pin_number(2,14); //PC14 OSC32_IN
+ never_reset_pin_number(2,15); //PC15 OSC32_OUT
+ never_reset_pin_number(0,13); //PA13 SWDIO
+ never_reset_pin_number(0,14); //PA14 SWCLK
+}
+
+
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/periph.c b/ports/stm/peripherals/stm32f7/stm32f767xx/periph.c
new file mode 100644
index 000000000..07d226db3
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/periph.c
@@ -0,0 +1,248 @@
+ /*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "py/obj.h"
+#include "py/mphal.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
+
+// I2C
+
+I2C_TypeDef * mcu_i2c_banks[4] = {I2C1, I2C2, I2C3, I2C4};
+
+const mcu_periph_obj_t mcu_i2c_sda_list[12] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(4, 11, &pin_PB07),
+ PERIPH(4, 1, &pin_PB09),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(2, 4, &pin_PB11),
+ PERIPH(3, 4, &pin_PC09),
+ PERIPH(4, 4, &pin_PD13),
+ PERIPH(2, 4, &pin_PF00),
+ PERIPH(4, 4, &pin_PF15),
+ PERIPH(2, 4, &pin_PH05),
+ PERIPH(3, 4, &pin_PH08),
+ PERIPH(4, 4, &pin_PH12),
+};
+const mcu_periph_obj_t mcu_i2c_scl_list[12] = {
+ PERIPH(3, 4, &pin_PA08),
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(4, 11, &pin_PB06),
+ PERIPH(4, 1, &pin_PB08),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(4, 4, &pin_PD12),
+ PERIPH(2, 4, &pin_PF01),
+ PERIPH(4, 4, &pin_PF14),
+ PERIPH(2, 4, &pin_PH04),
+ PERIPH(3, 4, &pin_PH07),
+ PERIPH(4, 4, &pin_PH11),
+};
+
+//SPI
+
+SPI_TypeDef * mcu_spi_banks[6] = {SPI1, SPI2, SPI3, SPI4, SPI5, SPI6};
+
+const mcu_periph_obj_t mcu_spi_sck_list[18] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(6, 8, &pin_PA05),
+ PERIPH(2, 5, &pin_PA09),
+ PERIPH(2, 5, &pin_PA12),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(6, 8, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(3, 6, &pin_PC10),
+ PERIPH(2, 5, &pin_PD03),
+ PERIPH(4, 5, &pin_PE02),
+ PERIPH(4, 5, &pin_PE12),
+ PERIPH(5, 5, &pin_PF07),
+ PERIPH(1, 5, &pin_PG11),
+ PERIPH(6, 5, &pin_PG13),
+ PERIPH(5, 5, &pin_PH06),
+ PERIPH(2, 5, &pin_PI01),
+};
+const mcu_periph_obj_t mcu_spi_mosi_list[18] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(6, 8, &pin_PA07),
+ PERIPH(3, 7, &pin_PB02),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(3, 6, &pin_PB05),
+ PERIPH(6, 8, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC01),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PC12),
+ PERIPH(3, 5, &pin_PD06),
+ PERIPH(1, 5, &pin_PD07),
+ PERIPH(4, 5, &pin_PE06),
+ PERIPH(4, 5, &pin_PE14),
+ PERIPH(5, 5, &pin_PF09),
+ PERIPH(5, 5, &pin_PF11),
+ PERIPH(6, 5, &pin_PG14),
+ PERIPH(2, 5, &pin_PI03),
+};
+const mcu_periph_obj_t mcu_spi_miso_list[15] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(6, 8, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(6, 8, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PC11),
+ PERIPH(4, 5, &pin_PE05),
+ PERIPH(4, 5, &pin_PE13),
+ PERIPH(5, 5, &pin_PF08),
+ PERIPH(1, 5, &pin_PG09),
+ PERIPH(6, 5, &pin_PG12),
+ PERIPH(5, 5, &pin_PH07),
+ PERIPH(2, 5, &pin_PI02),
+};
+
+//UART
+
+USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, UART4, UART5, USART6, UART7, UART8};
+bool mcu_uart_has_usart[MAX_UART] = {true, true, true, true, true, true, true, true};
+
+const mcu_periph_obj_t mcu_uart_tx_list[24] = {
+ PERIPH(4, 8, &pin_PA00),
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(4, 6, &pin_PA12),
+ PERIPH(7, 12, &pin_PA15),
+ PERIPH(7, 12, &pin_PB04),
+ PERIPH(5, 1, &pin_PB06),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(5, 7, &pin_PB09),
+ PERIPH(3, 7, &pin_PB10),
+ PERIPH(5, 8, &pin_PB13),
+ PERIPH(1, 4, &pin_PB14),
+ PERIPH(6, 8, &pin_PC06),
+ PERIPH(3, 7, &pin_PC10),
+ PERIPH(4, 8, &pin_PC10),
+ PERIPH(5, 8, &pin_PC12),
+ PERIPH(4, 8, &pin_PD01),
+ PERIPH(2, 7, &pin_PD05),
+ PERIPH(3, 7, &pin_PD08),
+ PERIPH(8, 8, &pin_PE01),
+ PERIPH(7, 8, &pin_PE08),
+ PERIPH(7, 8, &pin_PF07),
+ PERIPH(6, 8, &pin_PG14),
+ PERIPH(4, 8, &pin_PH13),
+};
+const mcu_periph_obj_t mcu_uart_rx_list[25] = {
+ PERIPH(4, 8, &pin_PA01),
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(7, 12, &pin_PA08),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(4, 6, &pin_PA11),
+ PERIPH(7, 12, &pin_PB03),
+ PERIPH(5, 1, &pin_PB05),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(5, 7, &pin_PB08),
+ PERIPH(3, 7, &pin_PB11),
+ PERIPH(5, 8, &pin_PB12),
+ PERIPH(1, 4, &pin_PB15),
+ PERIPH(6, 8, &pin_PC07),
+ PERIPH(3, 7, &pin_PC11),
+ PERIPH(4, 8, &pin_PC11),
+ PERIPH(4, 8, &pin_PD00),
+ PERIPH(5, 8, &pin_PD02),
+ PERIPH(2, 7, &pin_PD06),
+ PERIPH(3, 7, &pin_PD09),
+ PERIPH(8, 8, &pin_PE00),
+ PERIPH(7, 8, &pin_PE07),
+ PERIPH(7, 8, &pin_PF06),
+ PERIPH(6, 8, &pin_PG09),
+ PERIPH(4, 8, &pin_PH14),
+ PERIPH(4, 8, &pin_PI09),
+};
+
+//Timers
+//TIM6 and TIM7 are basic timers that are only used by DAC, and don't have pins
+//TODO: H7 has more timers than this, but are they tied to pins?
+TIM_TypeDef * mcu_tim_banks[14] = {TIM1, TIM2, TIM3, TIM4, TIM5, NULL, NULL, TIM8, NULL, NULL,
+ NULL, TIM12, TIM13, TIM14};
+
+const mcu_tim_pin_obj_t mcu_tim_pin_list[55] = {
+ TIM(2, 1, 1, &pin_PA00),
+ TIM(5, 2, 1, &pin_PA00),
+ TIM(2, 1, 2, &pin_PA01),
+ TIM(5, 2, 2, &pin_PA01),
+ TIM(2, 1, 3, &pin_PA02),
+ TIM(5, 2, 3, &pin_PA02),
+ TIM(9, 3, 1, &pin_PA02),
+ TIM(2, 1, 4, &pin_PA03),
+ TIM(5, 2, 4, &pin_PA03),
+ TIM(9, 3, 2, &pin_PA03),
+ TIM(2, 1, 1, &pin_PA05),
+ TIM(3, 2, 1, &pin_PA06),
+ TIM(3, 2, 2, &pin_PA07),
+ TIM(1, 1, 1, &pin_PA08),
+ TIM(1, 1, 2, &pin_PA09),
+ TIM(1, 1, 3, &pin_PA10),
+ TIM(1, 1, 4, &pin_PA11),
+ TIM(2, 1, 1, &pin_PA15),
+ TIM(3, 2, 3, &pin_PB00),
+ TIM(3, 2, 4, &pin_PB01),
+ TIM(2, 1, 2, &pin_PB03),
+ TIM(3, 2, 1, &pin_PB04),
+ TIM(3, 2, 2, &pin_PB05),
+ TIM(4, 2, 1, &pin_PB06),
+ TIM(4, 2, 2, &pin_PB07),
+ TIM(4, 2, 3, &pin_PB08),
+ TIM(4, 2, 4, &pin_PB09),
+ TIM(2, 1, 3, &pin_PB10),
+ TIM(2, 1, 4, &pin_PB11),
+ TIM(3, 2, 1, &pin_PC06),
+ TIM(8, 3, 1, &pin_PC06),
+ TIM(3, 2, 2, &pin_PC07),
+ TIM(8, 3, 2, &pin_PC07),
+ TIM(3, 2, 3, &pin_PC08),
+ TIM(8, 3, 3, &pin_PC08),
+ TIM(3, 2, 4, &pin_PC09),
+ TIM(8, 3, 4, &pin_PC09),
+ TIM(4, 2, 1, &pin_PD12),
+ TIM(4, 2, 2, &pin_PD13),
+ TIM(4, 2, 3, &pin_PD14),
+ TIM(4, 2, 4, &pin_PD15),
+ TIM(9, 3, 1, &pin_PE05),
+ TIM(9, 3, 2, &pin_PE06),
+ TIM(1, 1, 1, &pin_PE09),
+ TIM(1, 1, 2, &pin_PE11),
+ TIM(1, 1, 3, &pin_PE13),
+ TIM(1, 1, 4, &pin_PE14),
+ TIM(5, 2, 1, &pin_PH10),
+ TIM(5, 2, 2, &pin_PH11),
+ TIM(5, 2, 3, &pin_PH12),
+ TIM(5, 2, 4, &pin_PI00),
+ TIM(8, 3, 4, &pin_PI02),
+ TIM(8, 3, 1, &pin_PI05),
+ TIM(8, 3, 2, &pin_PI06),
+ TIM(8, 3, 3, &pin_PI07),
+};
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/periph.h b/ports/stm/peripherals/stm32f7/stm32f767xx/periph.h
new file mode 100644
index 000000000..f1878ee2e
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/periph.h
@@ -0,0 +1,55 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PERIPH_H
+
+//I2C
+extern I2C_TypeDef * mcu_i2c_banks[4];
+
+const mcu_periph_obj_t mcu_i2c_sda_list[12];
+const mcu_periph_obj_t mcu_i2c_scl_list[12];
+
+//SPI
+extern SPI_TypeDef * mcu_spi_banks[6];
+
+const mcu_periph_obj_t mcu_spi_sck_list[18];
+const mcu_periph_obj_t mcu_spi_mosi_list[18];
+const mcu_periph_obj_t mcu_spi_miso_list[15];
+
+//UART
+extern USART_TypeDef * mcu_uart_banks[MAX_UART];
+extern bool mcu_uart_has_usart[MAX_UART];
+
+const mcu_periph_obj_t mcu_uart_tx_list[24];
+const mcu_periph_obj_t mcu_uart_rx_list[25];
+
+//Timers
+#define TIM_BANK_ARRAY_LEN 14
+#define TIM_PIN_ARRAY_LEN 55
+TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
+
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/pins.c b/ports/stm/peripherals/stm32f7/stm32f767xx/pins.c
new file mode 100644
index 000000000..870545f99
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/pins.c
@@ -0,0 +1,200 @@
+ /*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "py/obj.h"
+#include "py/mphal.h"
+#include "peripherals/pins.h"
+
+// Todo: some pins do have ADCs, but the module isn't set up yet.
+
+const mcu_pin_obj_t pin_PA00 = PIN(0, 0, NO_ADC);
+const mcu_pin_obj_t pin_PA01 = PIN(0, 1, NO_ADC);
+const mcu_pin_obj_t pin_PA02 = PIN(0, 2, NO_ADC);
+const mcu_pin_obj_t pin_PA03 = PIN(0, 3, NO_ADC);
+const mcu_pin_obj_t pin_PA04 = PIN(0, 4, NO_ADC);
+const mcu_pin_obj_t pin_PA05 = PIN(0, 5, NO_ADC);
+const mcu_pin_obj_t pin_PA06 = PIN(0, 6, NO_ADC);
+const mcu_pin_obj_t pin_PA07 = PIN(0, 7, NO_ADC);
+const mcu_pin_obj_t pin_PA08 = PIN(0, 8, NO_ADC);
+const mcu_pin_obj_t pin_PA09 = PIN(0, 9, NO_ADC);
+const mcu_pin_obj_t pin_PA10 = PIN(0, 10, NO_ADC);
+const mcu_pin_obj_t pin_PA11 = PIN(0, 11, NO_ADC);
+const mcu_pin_obj_t pin_PA12 = PIN(0, 12, NO_ADC);
+const mcu_pin_obj_t pin_PA13 = PIN(0, 13, NO_ADC);
+const mcu_pin_obj_t pin_PA14 = PIN(0, 14, NO_ADC);
+const mcu_pin_obj_t pin_PA15 = PIN(0, 15, NO_ADC);
+const mcu_pin_obj_t pin_PB00 = PIN(1, 0, NO_ADC);
+const mcu_pin_obj_t pin_PB01 = PIN(1, 1, NO_ADC);
+const mcu_pin_obj_t pin_PB02 = PIN(1, 2, NO_ADC);
+const mcu_pin_obj_t pin_PB03 = PIN(1, 3, NO_ADC);
+const mcu_pin_obj_t pin_PB04 = PIN(1, 4, NO_ADC);
+const mcu_pin_obj_t pin_PB05 = PIN(1, 5, NO_ADC);
+const mcu_pin_obj_t pin_PB06 = PIN(1, 6, NO_ADC);
+const mcu_pin_obj_t pin_PB07 = PIN(1, 7, NO_ADC);
+const mcu_pin_obj_t pin_PB08 = PIN(1, 8, NO_ADC);
+const mcu_pin_obj_t pin_PB09 = PIN(1, 9, NO_ADC);
+const mcu_pin_obj_t pin_PB10 = PIN(1, 10, NO_ADC);
+const mcu_pin_obj_t pin_PB11 = PIN(1, 11, NO_ADC);
+const mcu_pin_obj_t pin_PB12 = PIN(1, 12, NO_ADC);
+const mcu_pin_obj_t pin_PB13 = PIN(1, 13, NO_ADC);
+const mcu_pin_obj_t pin_PB14 = PIN(1, 14, NO_ADC);
+const mcu_pin_obj_t pin_PB15 = PIN(1, 15, NO_ADC);
+const mcu_pin_obj_t pin_PC00 = PIN(2, 0, NO_ADC);
+const mcu_pin_obj_t pin_PC01 = PIN(2, 1, NO_ADC);
+const mcu_pin_obj_t pin_PC02 = PIN(2, 2, NO_ADC);
+const mcu_pin_obj_t pin_PC03 = PIN(2, 3, NO_ADC);
+const mcu_pin_obj_t pin_PC04 = PIN(2, 4, NO_ADC);
+const mcu_pin_obj_t pin_PC05 = PIN(2, 5, NO_ADC);
+const mcu_pin_obj_t pin_PC06 = PIN(2, 6, NO_ADC);
+const mcu_pin_obj_t pin_PC07 = PIN(2, 7, NO_ADC);
+const mcu_pin_obj_t pin_PC08 = PIN(2, 8, NO_ADC);
+const mcu_pin_obj_t pin_PC09 = PIN(2, 9, NO_ADC);
+const mcu_pin_obj_t pin_PC10 = PIN(2, 10, NO_ADC);
+const mcu_pin_obj_t pin_PC11 = PIN(2, 11, NO_ADC);
+const mcu_pin_obj_t pin_PC12 = PIN(2, 12, NO_ADC);
+const mcu_pin_obj_t pin_PC13 = PIN(2, 13, NO_ADC);
+const mcu_pin_obj_t pin_PC14 = PIN(2, 14, NO_ADC);
+const mcu_pin_obj_t pin_PC15 = PIN(2, 15, NO_ADC);
+const mcu_pin_obj_t pin_PD00 = PIN(3, 0, NO_ADC);
+const mcu_pin_obj_t pin_PD01 = PIN(3, 1, NO_ADC);
+const mcu_pin_obj_t pin_PD02 = PIN(3, 2, NO_ADC);
+const mcu_pin_obj_t pin_PD03 = PIN(3, 3, NO_ADC);
+const mcu_pin_obj_t pin_PD04 = PIN(3, 4, NO_ADC);
+const mcu_pin_obj_t pin_PD05 = PIN(3, 5, NO_ADC);
+const mcu_pin_obj_t pin_PD06 = PIN(3, 6, NO_ADC);
+const mcu_pin_obj_t pin_PD07 = PIN(3, 7, NO_ADC);
+const mcu_pin_obj_t pin_PD08 = PIN(3, 8, NO_ADC);
+const mcu_pin_obj_t pin_PD09 = PIN(3, 9, NO_ADC);
+const mcu_pin_obj_t pin_PD10 = PIN(3, 10, NO_ADC);
+const mcu_pin_obj_t pin_PD11 = PIN(3, 11, NO_ADC);
+const mcu_pin_obj_t pin_PD12 = PIN(3, 12, NO_ADC);
+const mcu_pin_obj_t pin_PD13 = PIN(3, 13, NO_ADC);
+const mcu_pin_obj_t pin_PD14 = PIN(3, 14, NO_ADC);
+const mcu_pin_obj_t pin_PD15 = PIN(3, 15, NO_ADC);
+const mcu_pin_obj_t pin_PE00 = PIN(4, 0, NO_ADC);
+const mcu_pin_obj_t pin_PE01 = PIN(4, 1, NO_ADC);
+const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
+const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
+const mcu_pin_obj_t pin_PE04 = PIN(4, 4, NO_ADC);
+const mcu_pin_obj_t pin_PE05 = PIN(4, 5, NO_ADC);
+const mcu_pin_obj_t pin_PE06 = PIN(4, 6, NO_ADC);
+const mcu_pin_obj_t pin_PE07 = PIN(4, 7, NO_ADC);
+const mcu_pin_obj_t pin_PE08 = PIN(4, 8, NO_ADC);
+const mcu_pin_obj_t pin_PE09 = PIN(4, 9, NO_ADC);
+const mcu_pin_obj_t pin_PE10 = PIN(4, 10, NO_ADC);
+const mcu_pin_obj_t pin_PE11 = PIN(4, 11, NO_ADC);
+const mcu_pin_obj_t pin_PE12 = PIN(4, 12, NO_ADC);
+const mcu_pin_obj_t pin_PE13 = PIN(4, 13, NO_ADC);
+const mcu_pin_obj_t pin_PE14 = PIN(4, 14, NO_ADC);
+const mcu_pin_obj_t pin_PE15 = PIN(4, 15, NO_ADC);
+const mcu_pin_obj_t pin_PF00 = PIN(5, 0, NO_ADC);
+const mcu_pin_obj_t pin_PF01 = PIN(5, 1, NO_ADC);
+const mcu_pin_obj_t pin_PF02 = PIN(5, 2, NO_ADC);
+const mcu_pin_obj_t pin_PF03 = PIN(5, 3, NO_ADC);
+const mcu_pin_obj_t pin_PF04 = PIN(5, 4, NO_ADC);
+const mcu_pin_obj_t pin_PF05 = PIN(5, 5, NO_ADC);
+const mcu_pin_obj_t pin_PF06 = PIN(5, 6, NO_ADC);
+const mcu_pin_obj_t pin_PF07 = PIN(5, 7, NO_ADC);
+const mcu_pin_obj_t pin_PF08 = PIN(5, 8, NO_ADC);
+const mcu_pin_obj_t pin_PF09 = PIN(5, 9, NO_ADC);
+const mcu_pin_obj_t pin_PF10 = PIN(5, 10, NO_ADC);
+const mcu_pin_obj_t pin_PF11 = PIN(5, 11, NO_ADC);
+const mcu_pin_obj_t pin_PF12 = PIN(5, 12, NO_ADC);
+const mcu_pin_obj_t pin_PF13 = PIN(5, 13, NO_ADC);
+const mcu_pin_obj_t pin_PF14 = PIN(5, 14, NO_ADC);
+const mcu_pin_obj_t pin_PF15 = PIN(5, 15, NO_ADC);
+const mcu_pin_obj_t pin_PG00 = PIN(6, 0, NO_ADC);
+const mcu_pin_obj_t pin_PG01 = PIN(6, 1, NO_ADC);
+const mcu_pin_obj_t pin_PG02 = PIN(6, 2, NO_ADC);
+const mcu_pin_obj_t pin_PG03 = PIN(6, 3, NO_ADC);
+const mcu_pin_obj_t pin_PG04 = PIN(6, 4, NO_ADC);
+const mcu_pin_obj_t pin_PG05 = PIN(6, 5, NO_ADC);
+const mcu_pin_obj_t pin_PG06 = PIN(6, 6, NO_ADC);
+const mcu_pin_obj_t pin_PG07 = PIN(6, 7, NO_ADC);
+const mcu_pin_obj_t pin_PG08 = PIN(6, 8, NO_ADC);
+const mcu_pin_obj_t pin_PG09 = PIN(6, 9, NO_ADC);
+const mcu_pin_obj_t pin_PG10 = PIN(6, 10, NO_ADC);
+const mcu_pin_obj_t pin_PG11 = PIN(6, 11, NO_ADC);
+const mcu_pin_obj_t pin_PG12 = PIN(6, 12, NO_ADC);
+const mcu_pin_obj_t pin_PG13 = PIN(6, 13, NO_ADC);
+const mcu_pin_obj_t pin_PG14 = PIN(6, 14, NO_ADC);
+const mcu_pin_obj_t pin_PG15 = PIN(6, 15, NO_ADC);
+const mcu_pin_obj_t pin_PH00 = PIN(7, 0, NO_ADC);
+const mcu_pin_obj_t pin_PH01 = PIN(7, 1, NO_ADC);
+const mcu_pin_obj_t pin_PH02 = PIN(7, 2, NO_ADC);
+const mcu_pin_obj_t pin_PH03 = PIN(7, 3, NO_ADC);
+const mcu_pin_obj_t pin_PH04 = PIN(7, 4, NO_ADC);
+const mcu_pin_obj_t pin_PH05 = PIN(7, 5, NO_ADC);
+const mcu_pin_obj_t pin_PH06 = PIN(7, 6, NO_ADC);
+const mcu_pin_obj_t pin_PH07 = PIN(7, 7, NO_ADC);
+const mcu_pin_obj_t pin_PH08 = PIN(7, 8, NO_ADC);
+const mcu_pin_obj_t pin_PH09 = PIN(7, 9, NO_ADC);
+const mcu_pin_obj_t pin_PH10 = PIN(7, 10, NO_ADC);
+const mcu_pin_obj_t pin_PH11 = PIN(7, 11, NO_ADC);
+const mcu_pin_obj_t pin_PH12 = PIN(7, 12, NO_ADC);
+const mcu_pin_obj_t pin_PH13 = PIN(7, 13, NO_ADC);
+const mcu_pin_obj_t pin_PH14 = PIN(7, 14, NO_ADC);
+const mcu_pin_obj_t pin_PH15 = PIN(7, 15, NO_ADC);
+const mcu_pin_obj_t pin_PI00 = PIN(8, 0, NO_ADC);
+const mcu_pin_obj_t pin_PI01 = PIN(8, 1, NO_ADC);
+const mcu_pin_obj_t pin_PI02 = PIN(8, 2, NO_ADC);
+const mcu_pin_obj_t pin_PI03 = PIN(8, 3, NO_ADC);
+const mcu_pin_obj_t pin_PI04 = PIN(8, 4, NO_ADC);
+const mcu_pin_obj_t pin_PI05 = PIN(8, 5, NO_ADC);
+const mcu_pin_obj_t pin_PI06 = PIN(8, 6, NO_ADC);
+const mcu_pin_obj_t pin_PI07 = PIN(8, 7, NO_ADC);
+const mcu_pin_obj_t pin_PI08 = PIN(8, 8, NO_ADC);
+const mcu_pin_obj_t pin_PI09 = PIN(8, 9, NO_ADC);
+const mcu_pin_obj_t pin_PI10 = PIN(8, 10, NO_ADC);
+const mcu_pin_obj_t pin_PI11 = PIN(8, 11, NO_ADC);
+const mcu_pin_obj_t pin_PI12 = PIN(8, 12, NO_ADC);
+const mcu_pin_obj_t pin_PI13 = PIN(8, 13, NO_ADC);
+const mcu_pin_obj_t pin_PI14 = PIN(8, 14, NO_ADC);
+const mcu_pin_obj_t pin_PI15 = PIN(8, 15, NO_ADC);
+const mcu_pin_obj_t pin_PJ00 = PIN(9, 0, NO_ADC);
+const mcu_pin_obj_t pin_PJ01 = PIN(9, 1, NO_ADC);
+const mcu_pin_obj_t pin_PJ02 = PIN(9, 2, NO_ADC);
+const mcu_pin_obj_t pin_PJ03 = PIN(9, 3, NO_ADC);
+const mcu_pin_obj_t pin_PJ04 = PIN(9, 4, NO_ADC);
+const mcu_pin_obj_t pin_PJ05 = PIN(9, 5, NO_ADC);
+const mcu_pin_obj_t pin_PJ06 = PIN(9, 6, NO_ADC);
+const mcu_pin_obj_t pin_PJ07 = PIN(9, 7, NO_ADC);
+const mcu_pin_obj_t pin_PJ08 = PIN(9, 8, NO_ADC);
+const mcu_pin_obj_t pin_PJ09 = PIN(9, 9, NO_ADC);
+const mcu_pin_obj_t pin_PJ10 = PIN(9, 10, NO_ADC);
+const mcu_pin_obj_t pin_PJ11 = PIN(9, 11, NO_ADC);
+const mcu_pin_obj_t pin_PJ12 = PIN(9, 12, NO_ADC);
+const mcu_pin_obj_t pin_PJ13 = PIN(9, 13, NO_ADC);
+const mcu_pin_obj_t pin_PJ14 = PIN(9, 14, NO_ADC);
+const mcu_pin_obj_t pin_PJ15 = PIN(9, 15, NO_ADC);
+const mcu_pin_obj_t pin_PK00 = PIN(10, 0, NO_ADC);
+const mcu_pin_obj_t pin_PK01 = PIN(10, 1, NO_ADC);
+const mcu_pin_obj_t pin_PK02 = PIN(10, 2, NO_ADC);
+const mcu_pin_obj_t pin_PK03 = PIN(10, 3, NO_ADC);
+const mcu_pin_obj_t pin_PK04 = PIN(10, 4, NO_ADC);
+const mcu_pin_obj_t pin_PK05 = PIN(10, 5, NO_ADC);
+const mcu_pin_obj_t pin_PK06 = PIN(10, 6, NO_ADC);
+const mcu_pin_obj_t pin_PK07 = PIN(10, 7, NO_ADC);
diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/pins.h b/ports/stm/peripherals/stm32f7/stm32f767xx/pins.h
new file mode 100644
index 000000000..e0f2bb056
--- /dev/null
+++ b/ports/stm/peripherals/stm32f7/stm32f767xx/pins.h
@@ -0,0 +1,199 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PINS_H
+
+extern const mcu_pin_obj_t pin_PA00;
+extern const mcu_pin_obj_t pin_PA01;
+extern const mcu_pin_obj_t pin_PA02;
+extern const mcu_pin_obj_t pin_PA03;
+extern const mcu_pin_obj_t pin_PA04;
+extern const mcu_pin_obj_t pin_PA05;
+extern const mcu_pin_obj_t pin_PA06;
+extern const mcu_pin_obj_t pin_PA07;
+extern const mcu_pin_obj_t pin_PA08;
+extern const mcu_pin_obj_t pin_PA09;
+extern const mcu_pin_obj_t pin_PA10;
+extern const mcu_pin_obj_t pin_PA11;
+extern const mcu_pin_obj_t pin_PA12;
+extern const mcu_pin_obj_t pin_PA13;
+extern const mcu_pin_obj_t pin_PA14;
+extern const mcu_pin_obj_t pin_PA15;
+extern const mcu_pin_obj_t pin_PB00;
+extern const mcu_pin_obj_t pin_PB01;
+extern const mcu_pin_obj_t pin_PB02;
+extern const mcu_pin_obj_t pin_PB03;
+extern const mcu_pin_obj_t pin_PB04;
+extern const mcu_pin_obj_t pin_PB05;
+extern const mcu_pin_obj_t pin_PB06;
+extern const mcu_pin_obj_t pin_PB07;
+extern const mcu_pin_obj_t pin_PB08;
+extern const mcu_pin_obj_t pin_PB09;
+extern const mcu_pin_obj_t pin_PB10;
+extern const mcu_pin_obj_t pin_PB11;
+extern const mcu_pin_obj_t pin_PB12;
+extern const mcu_pin_obj_t pin_PB13;
+extern const mcu_pin_obj_t pin_PB14;
+extern const mcu_pin_obj_t pin_PB15;
+extern const mcu_pin_obj_t pin_PC00;
+extern const mcu_pin_obj_t pin_PC01;
+extern const mcu_pin_obj_t pin_PC02;
+extern const mcu_pin_obj_t pin_PC03;
+extern const mcu_pin_obj_t pin_PC04;
+extern const mcu_pin_obj_t pin_PC05;
+extern const mcu_pin_obj_t pin_PC06;
+extern const mcu_pin_obj_t pin_PC07;
+extern const mcu_pin_obj_t pin_PC08;
+extern const mcu_pin_obj_t pin_PC09;
+extern const mcu_pin_obj_t pin_PC10;
+extern const mcu_pin_obj_t pin_PC11;
+extern const mcu_pin_obj_t pin_PC12;
+extern const mcu_pin_obj_t pin_PC13;
+extern const mcu_pin_obj_t pin_PC14;
+extern const mcu_pin_obj_t pin_PC15;
+extern const mcu_pin_obj_t pin_PD00;
+extern const mcu_pin_obj_t pin_PD01;
+extern const mcu_pin_obj_t pin_PD02;
+extern const mcu_pin_obj_t pin_PD03;
+extern const mcu_pin_obj_t pin_PD04;
+extern const mcu_pin_obj_t pin_PD05;
+extern const mcu_pin_obj_t pin_PD06;
+extern const mcu_pin_obj_t pin_PD07;
+extern const mcu_pin_obj_t pin_PD08;
+extern const mcu_pin_obj_t pin_PD09;
+extern const mcu_pin_obj_t pin_PD10;
+extern const mcu_pin_obj_t pin_PD11;
+extern const mcu_pin_obj_t pin_PD12;
+extern const mcu_pin_obj_t pin_PD13;
+extern const mcu_pin_obj_t pin_PD14;
+extern const mcu_pin_obj_t pin_PD15;
+extern const mcu_pin_obj_t pin_PE00;
+extern const mcu_pin_obj_t pin_PE01;
+extern const mcu_pin_obj_t pin_PE02;
+extern const mcu_pin_obj_t pin_PE03;
+extern const mcu_pin_obj_t pin_PE04;
+extern const mcu_pin_obj_t pin_PE05;
+extern const mcu_pin_obj_t pin_PE06;
+extern const mcu_pin_obj_t pin_PE07;
+extern const mcu_pin_obj_t pin_PE08;
+extern const mcu_pin_obj_t pin_PE09;
+extern const mcu_pin_obj_t pin_PE10;
+extern const mcu_pin_obj_t pin_PE11;
+extern const mcu_pin_obj_t pin_PE12;
+extern const mcu_pin_obj_t pin_PE13;
+extern const mcu_pin_obj_t pin_PE14;
+extern const mcu_pin_obj_t pin_PE15;
+extern const mcu_pin_obj_t pin_PF00;
+extern const mcu_pin_obj_t pin_PF01;
+extern const mcu_pin_obj_t pin_PF02;
+extern const mcu_pin_obj_t pin_PF03;
+extern const mcu_pin_obj_t pin_PF04;
+extern const mcu_pin_obj_t pin_PF05;
+extern const mcu_pin_obj_t pin_PF06;
+extern const mcu_pin_obj_t pin_PF07;
+extern const mcu_pin_obj_t pin_PF08;
+extern const mcu_pin_obj_t pin_PF09;
+extern const mcu_pin_obj_t pin_PF10;
+extern const mcu_pin_obj_t pin_PF11;
+extern const mcu_pin_obj_t pin_PF12;
+extern const mcu_pin_obj_t pin_PF13;
+extern const mcu_pin_obj_t pin_PF14;
+extern const mcu_pin_obj_t pin_PF15;
+extern const mcu_pin_obj_t pin_PG00;
+extern const mcu_pin_obj_t pin_PG01;
+extern const mcu_pin_obj_t pin_PG02;
+extern const mcu_pin_obj_t pin_PG03;
+extern const mcu_pin_obj_t pin_PG04;
+extern const mcu_pin_obj_t pin_PG05;
+extern const mcu_pin_obj_t pin_PG06;
+extern const mcu_pin_obj_t pin_PG07;
+extern const mcu_pin_obj_t pin_PG08;
+extern const mcu_pin_obj_t pin_PG09;
+extern const mcu_pin_obj_t pin_PG10;
+extern const mcu_pin_obj_t pin_PG11;
+extern const mcu_pin_obj_t pin_PG12;
+extern const mcu_pin_obj_t pin_PG13;
+extern const mcu_pin_obj_t pin_PG14;
+extern const mcu_pin_obj_t pin_PG15;
+extern const mcu_pin_obj_t pin_PH00;
+extern const mcu_pin_obj_t pin_PH01;
+extern const mcu_pin_obj_t pin_PH02;
+extern const mcu_pin_obj_t pin_PH03;
+extern const mcu_pin_obj_t pin_PH04;
+extern const mcu_pin_obj_t pin_PH05;
+extern const mcu_pin_obj_t pin_PH06;
+extern const mcu_pin_obj_t pin_PH07;
+extern const mcu_pin_obj_t pin_PH08;
+extern const mcu_pin_obj_t pin_PH09;
+extern const mcu_pin_obj_t pin_PH10;
+extern const mcu_pin_obj_t pin_PH11;
+extern const mcu_pin_obj_t pin_PH12;
+extern const mcu_pin_obj_t pin_PH13;
+extern const mcu_pin_obj_t pin_PH14;
+extern const mcu_pin_obj_t pin_PH15;
+extern const mcu_pin_obj_t pin_PI00;
+extern const mcu_pin_obj_t pin_PI01;
+extern const mcu_pin_obj_t pin_PI02;
+extern const mcu_pin_obj_t pin_PI03;
+extern const mcu_pin_obj_t pin_PI04;
+extern const mcu_pin_obj_t pin_PI05;
+extern const mcu_pin_obj_t pin_PI06;
+extern const mcu_pin_obj_t pin_PI07;
+extern const mcu_pin_obj_t pin_PI08;
+extern const mcu_pin_obj_t pin_PI09;
+extern const mcu_pin_obj_t pin_PI10;
+extern const mcu_pin_obj_t pin_PI11;
+extern const mcu_pin_obj_t pin_PI12;
+extern const mcu_pin_obj_t pin_PI13;
+extern const mcu_pin_obj_t pin_PI14;
+extern const mcu_pin_obj_t pin_PI15;
+extern const mcu_pin_obj_t pin_PJ00;
+extern const mcu_pin_obj_t pin_PJ01;
+extern const mcu_pin_obj_t pin_PJ02;
+extern const mcu_pin_obj_t pin_PJ03;
+extern const mcu_pin_obj_t pin_PJ04;
+extern const mcu_pin_obj_t pin_PJ05;
+extern const mcu_pin_obj_t pin_PJ06;
+extern const mcu_pin_obj_t pin_PJ07;
+extern const mcu_pin_obj_t pin_PJ08;
+extern const mcu_pin_obj_t pin_PJ09;
+extern const mcu_pin_obj_t pin_PJ10;
+extern const mcu_pin_obj_t pin_PJ11;
+extern const mcu_pin_obj_t pin_PJ12;
+extern const mcu_pin_obj_t pin_PJ13;
+extern const mcu_pin_obj_t pin_PJ14;
+extern const mcu_pin_obj_t pin_PJ15;
+extern const mcu_pin_obj_t pin_PK00;
+extern const mcu_pin_obj_t pin_PK01;
+extern const mcu_pin_obj_t pin_PK02;
+extern const mcu_pin_obj_t pin_PK03;
+extern const mcu_pin_obj_t pin_PK04;
+extern const mcu_pin_obj_t pin_PK05;
+extern const mcu_pin_obj_t pin_PK06;
+extern const mcu_pin_obj_t pin_PK07;
+
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F767XX_PINS_H
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/clocks.c b/ports/stm/peripherals/stm32h7/stm32h743xx/clocks.c
new file mode 100644
index 000000000..8ede6080e
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/clocks.c
@@ -0,0 +1,83 @@
+
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "stm32h7xx_hal.h"
+
+void stm32_peripherals_clocks_init(void) {
+ RCC_ClkInitTypeDef RCC_ClkInitStruct;
+ RCC_OscInitTypeDef RCC_OscInitStruct;
+
+ /* The PWR block is always enabled on the H7 series- there is no clock
+ enable. For now, use the default VOS3 scale mode (lowest) and limit clock
+ frequencies to avoid potential current draw problems from bus
+ power when using the max clock speeds throughout the chip. */
+
+ /* Enable HSE Oscillator and activate PLL1 with HSE as source */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
+ RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = BOARD_OSC_DIV;
+ RCC_OscInitStruct.PLL.PLLN = 336;
+ RCC_OscInitStruct.PLL.PLLP = 2;
+ RCC_OscInitStruct.PLL.PLLQ = 7;
+ RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_0;
+ RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM;
+ RCC_OscInitStruct.PLL.PLLFRACN = 0;
+ HAL_RCC_OscConfig(&RCC_OscInitStruct);
+
+ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | \
+ RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | \
+ RCC_CLOCKTYPE_D3PCLK1);
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
+
+ /* Unlike on the STM32F4 family, it appears the maximum APB frequencies are
+ device-dependent- 120 MHz for this board according to Figure 2 of
+ the datasheet. Dividing by half will be safe for now. */
+ RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
+ RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
+
+ /* 4 wait states required for 168MHz and VOS3. */
+ HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
+
+ /* Like on F4, on H7, USB's actual peripheral clock and bus clock are
+ separate. However, the main system PLL (PLL1) doesn't have a direct
+ connection to the USB peripheral clock to generate 48 MHz, so we do this
+ dance. This will connect PLL1's Q output to the USB peripheral clock. */
+ RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct;
+
+ RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
+ RCC_PeriphCLKInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
+ HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct);
+
+}
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c b/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c
new file mode 100644
index 000000000..d51ff53c1
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "gpio.h"
+#include "common-hal/microcontroller/Pin.h"
+
+void stm32_peripherals_gpio_init(void) {
+ //Enable all GPIO for now
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOF_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+
+ //Never reset pins
+ never_reset_pin_number(2,14); //PC14 OSC32_IN
+ never_reset_pin_number(2,15); //PC15 OSC32_OUT
+ never_reset_pin_number(0,13); //PA13 SWDIO
+ never_reset_pin_number(0,14); //PA14 SWCLK
+}
+
+
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/periph.c b/ports/stm/peripherals/stm32h7/stm32h743xx/periph.c
new file mode 100644
index 000000000..892164600
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/periph.c
@@ -0,0 +1,260 @@
+ /*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "py/obj.h"
+#include "py/mphal.h"
+#include "peripherals/pins.h"
+#include "peripherals/periph.h"
+
+// I2C
+
+I2C_TypeDef * mcu_i2c_banks[4] = {I2C1, I2C2, I2C3, I2C4};
+
+const mcu_periph_obj_t mcu_i2c_sda_list[12] = {
+ PERIPH(1, 4, &pin_PB07),
+ PERIPH(4, 6, &pin_PB07),
+ PERIPH(1, 4, &pin_PB09),
+ PERIPH(4, 6, &pin_PB09),
+ PERIPH(2, 4, &pin_PB11),
+ PERIPH(3, 4, &pin_PC09),
+ PERIPH(4, 4, &pin_PD13),
+ PERIPH(2, 4, &pin_PF00),
+ PERIPH(4, 4, &pin_PF15),
+ PERIPH(2, 4, &pin_PH05),
+ PERIPH(3, 4, &pin_PH08),
+ PERIPH(4, 4, &pin_PH12)
+};
+
+const mcu_periph_obj_t mcu_i2c_scl_list[12] = {
+ PERIPH(3, 4, &pin_PA08),
+ PERIPH(1, 4, &pin_PB06),
+ PERIPH(4, 6, &pin_PB06),
+ PERIPH(1, 4, &pin_PB08),
+ PERIPH(4, 6, &pin_PB08),
+ PERIPH(2, 4, &pin_PB10),
+ PERIPH(4, 4, &pin_PD12),
+ PERIPH(2, 4, &pin_PF01),
+ PERIPH(4, 4, &pin_PF14),
+ PERIPH(2, 4, &pin_PH04),
+ PERIPH(3, 4, &pin_PH07),
+ PERIPH(4, 4, &pin_PH11)
+};
+
+// SPI
+
+SPI_TypeDef * mcu_spi_banks[6] = {SPI1, SPI2, SPI3, SPI4, SPI5, SPI6};
+
+const mcu_periph_obj_t mcu_spi_sck_list[19] = {
+ PERIPH(1, 5, &pin_PA05),
+ PERIPH(6, 8, &pin_PA05),
+ PERIPH(2, 5, &pin_PA09),
+ PERIPH(2, 5, &pin_PA12),
+ PERIPH(1, 5, &pin_PB03),
+ PERIPH(3, 6, &pin_PB03),
+ PERIPH(6, 8, &pin_PB03),
+ PERIPH(2, 5, &pin_PB10),
+ PERIPH(2, 5, &pin_PB13),
+ PERIPH(3, 6, &pin_PC10),
+ PERIPH(2, 5, &pin_PD03),
+ PERIPH(4, 5, &pin_PE02),
+ PERIPH(4, 5, &pin_PE12),
+ PERIPH(5, 5, &pin_PF07),
+ PERIPH(1, 5, &pin_PG11),
+ PERIPH(6, 5, &pin_PG13),
+ PERIPH(5, 5, &pin_PH06),
+ PERIPH(2, 5, &pin_PI01),
+ PERIPH(5, 5, &pin_PK00),
+};
+
+const mcu_periph_obj_t mcu_spi_mosi_list[19] = {
+ PERIPH(1, 5, &pin_PA07),
+ PERIPH(6, 8, &pin_PA07),
+ PERIPH(3, 7, &pin_PB02),
+ PERIPH(1, 5, &pin_PB05),
+ PERIPH(3, 7, &pin_PB05),
+ PERIPH(6, 8, &pin_PB05),
+ PERIPH(2, 5, &pin_PB15),
+ PERIPH(2, 5, &pin_PC01),
+ PERIPH(2, 5, &pin_PC03),
+ PERIPH(3, 6, &pin_PC12),
+ PERIPH(3, 5, &pin_PD06),
+ PERIPH(1, 5, &pin_PD07),
+ PERIPH(4, 5, &pin_PE06),
+ PERIPH(4, 5, &pin_PE14),
+ PERIPH(5, 5, &pin_PF09),
+ PERIPH(5, 5, &pin_PF11),
+ PERIPH(6, 5, &pin_PG14),
+ PERIPH(2, 5, &pin_PI03),
+ PERIPH(5, 5, &pin_PJ10),
+};
+
+const mcu_periph_obj_t mcu_spi_miso_list[16] = {
+ PERIPH(1, 5, &pin_PA06),
+ PERIPH(6, 8, &pin_PA06),
+ PERIPH(1, 5, &pin_PB04),
+ PERIPH(3, 6, &pin_PB04),
+ PERIPH(6, 8, &pin_PB04),
+ PERIPH(2, 5, &pin_PB14),
+ PERIPH(2, 5, &pin_PC02),
+ PERIPH(3, 6, &pin_PC11),
+ PERIPH(4, 5, &pin_PE05),
+ PERIPH(4, 5, &pin_PE13),
+ PERIPH(5, 5, &pin_PF08),
+ PERIPH(1, 5, &pin_PG09),
+ PERIPH(6, 5, &pin_PG12),
+ PERIPH(5, 5, &pin_PH07),
+ PERIPH(2, 5, &pin_PI02),
+ PERIPH(5, 5, &pin_PJ11),
+};
+
+//UART
+
+USART_TypeDef * mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, UART4, UART5, USART6, UART7, UART8};
+bool mcu_uart_has_usart[MAX_UART] = {true, true, true, true, true, true, true, true};
+
+const mcu_periph_obj_t mcu_uart_tx_list[25] = {
+ PERIPH(4, 8, &pin_PA00),
+ PERIPH(2, 7, &pin_PA02),
+ PERIPH(1, 7, &pin_PA09),
+ PERIPH(4, 6, &pin_PA12),
+ PERIPH(7, 11, &pin_PA15),
+ PERIPH(7, 11, &pin_PB04),
+ PERIPH(1, 7, &pin_PB06),
+ PERIPH(5, 14, &pin_PB06),
+ PERIPH(4, 8, &pin_PB09),
+ PERIPH(3, 7, &pin_PB10),
+ PERIPH(5, 14, &pin_PB13),
+ PERIPH(1, 4, &pin_PB14),
+ PERIPH(6, 7, &pin_PC06),
+ PERIPH(3, 7, &pin_PC10),
+ PERIPH(4, 8, &pin_PC10),
+ PERIPH(5, 8, &pin_PC12),
+ PERIPH(4, 8, &pin_PD01),
+ PERIPH(2, 7, &pin_PD05),
+ PERIPH(3, 7, &pin_PD08),
+ PERIPH(8, 8, &pin_PE01),
+ PERIPH(7, 7, &pin_PE08),
+ PERIPH(7, 7, &pin_PF07),
+ PERIPH(6, 7, &pin_PG14),
+ PERIPH(4, 8, &pin_PH13),
+ PERIPH(8, 8, &pin_PJ08),
+};
+
+const mcu_periph_obj_t mcu_uart_rx_list[26] = {
+ PERIPH(4, 8, &pin_PA01),
+ PERIPH(2, 7, &pin_PA03),
+ PERIPH(7, 11, &pin_PA08),
+ PERIPH(1, 7, &pin_PA10),
+ PERIPH(4, 6, &pin_PA11),
+ PERIPH(7, 11, &pin_PB03),
+ PERIPH(5, 14, &pin_PB05),
+ PERIPH(1, 7, &pin_PB07),
+ PERIPH(4, 8, &pin_PB08),
+ PERIPH(3, 7, &pin_PB11),
+ PERIPH(5, 14, &pin_PB12),
+ PERIPH(1, 4, &pin_PB15),
+ PERIPH(6, 7, &pin_PC07),
+ PERIPH(3, 7, &pin_PC11),
+ PERIPH(4, 8, &pin_PC11),
+ PERIPH(4, 8, &pin_PD00),
+ PERIPH(5, 8, &pin_PD02),
+ PERIPH(2, 7, &pin_PD06),
+ PERIPH(3, 7, &pin_PD09),
+ PERIPH(8, 8, &pin_PE00),
+ PERIPH(7, 7, &pin_PE07),
+ PERIPH(7, 7, &pin_PF06),
+ PERIPH(6, 7, &pin_PG09),
+ PERIPH(4, 8, &pin_PH14),
+ PERIPH(4, 8, &pin_PI09),
+ PERIPH(8, 8, &pin_PJ09),
+};
+
+//Timers
+//TIM6 and TIM7 are basic timers that are only used by DAC, and don't have pins
+//TODO: H7 has more timers than this, but are they tied to pins?
+TIM_TypeDef * mcu_tim_banks[14] = {TIM1, TIM2, TIM3, TIM4, TIM5, NULL, NULL, TIM8, NULL, NULL,
+ NULL, TIM12, TIM13, TIM14};
+
+const mcu_tim_pin_obj_t mcu_tim_pin_list[58] = {
+ TIM(2, 1, 1, &pin_PA00),
+ TIM(5, 2, 1, &pin_PA00),
+ TIM(2, 1, 2, &pin_PA01),
+ TIM(5, 2, 2, &pin_PA01),
+ TIM(2, 1, 3, &pin_PA02),
+ TIM(5, 2, 3, &pin_PA02),
+ TIM(2, 1, 4, &pin_PA03),
+ TIM(5, 2, 4, &pin_PA03),
+ TIM(2, 1, 1, &pin_PA05),
+ TIM(3, 2, 1, &pin_PA06),
+ TIM(3, 2, 2, &pin_PA07),
+ TIM(1, 1, 1, &pin_PA08),
+ TIM(1, 1, 2, &pin_PA09),
+ TIM(1, 1, 3, &pin_PA10),
+ TIM(1, 1, 4, &pin_PA11),
+ TIM(2, 1, 1, &pin_PA15),
+ TIM(3, 2, 3, &pin_PB00),
+ TIM(3, 2, 4, &pin_PB01),
+ TIM(2, 1, 2, &pin_PB03),
+ TIM(3, 2, 1, &pin_PB04),
+ TIM(3, 2, 2, &pin_PB05),
+ TIM(4, 2, 1, &pin_PB06),
+ TIM(4, 2, 2, &pin_PB07),
+ TIM(4, 2, 3, &pin_PB08),
+ TIM(4, 2, 4, &pin_PB09),
+ TIM(2, 1, 3, &pin_PB10),
+ TIM(2, 1, 4, &pin_PB11),
+ TIM(3, 2, 1, &pin_PC06),
+ TIM(8, 3, 1, &pin_PC06),
+ TIM(3, 2, 2, &pin_PC07),
+ TIM(8, 3, 2, &pin_PC07),
+ TIM(3, 2, 3, &pin_PC08),
+ TIM(8, 3, 3, &pin_PC08),
+ TIM(3, 2, 4, &pin_PC09),
+ TIM(8, 3, 4, &pin_PC09),
+ TIM(4, 2, 1, &pin_PD12),
+ TIM(4, 2, 2, &pin_PD13),
+ TIM(4, 2, 3, &pin_PD14),
+ TIM(4, 2, 4, &pin_PD15),
+ TIM(1, 1, 1, &pin_PE09),
+ TIM(1, 1, 2, &pin_PE11),
+ TIM(1, 1, 3, &pin_PE13),
+ TIM(1, 1, 4, &pin_PE14),
+ TIM(5, 2, 1, &pin_PH10),
+ TIM(5, 2, 2, &pin_PH11),
+ TIM(5, 2, 3, &pin_PH12),
+ TIM(5, 2, 4, &pin_PI00),
+ TIM(8, 3, 4, &pin_PI02),
+ TIM(8, 3, 1, &pin_PI05),
+ TIM(8, 3, 2, &pin_PI06),
+ TIM(8, 3, 3, &pin_PI07),
+ TIM(8, 3, 2, &pin_PJ06),
+ TIM(8, 3, 1, &pin_PJ08),
+ TIM(1, 1, 3, &pin_PJ09),
+ TIM(8, 3, 2, &pin_PJ10),
+ TIM(1, 1, 2, &pin_PJ11),
+ TIM(8, 3, 3, &pin_PK00),
+ TIM(1, 1, 1, &pin_PK01),
+};
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/periph.h b/ports/stm/peripherals/stm32h7/stm32h743xx/periph.h
new file mode 100644
index 000000000..4b852413b
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/periph.h
@@ -0,0 +1,55 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PERIPH_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PERIPH_H
+
+//I2C
+extern I2C_TypeDef * mcu_i2c_banks[4];
+
+const mcu_periph_obj_t mcu_i2c_sda_list[12];
+const mcu_periph_obj_t mcu_i2c_scl_list[12];
+
+//SPI
+extern SPI_TypeDef * mcu_spi_banks[6];
+
+const mcu_periph_obj_t mcu_spi_sck_list[19];
+const mcu_periph_obj_t mcu_spi_mosi_list[19];
+const mcu_periph_obj_t mcu_spi_miso_list[16];
+
+//UART
+extern USART_TypeDef * mcu_uart_banks[MAX_UART];
+extern bool mcu_uart_has_usart[MAX_UART];
+
+const mcu_periph_obj_t mcu_uart_tx_list[25];
+const mcu_periph_obj_t mcu_uart_rx_list[26];
+
+//Timers
+#define TIM_BANK_ARRAY_LEN 14
+#define TIM_PIN_ARRAY_LEN 58
+TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
+
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PERIPH_H \ No newline at end of file
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/pins.c b/ports/stm/peripherals/stm32h7/stm32h743xx/pins.c
new file mode 100644
index 000000000..491fe6938
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/pins.c
@@ -0,0 +1,210 @@
+ /*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "py/obj.h"
+#include "py/mphal.h"
+#include "peripherals/pins.h"
+
+// Todo: some pins do have ADCs, but the module isn't set up yet.
+
+const mcu_pin_obj_t pin_PA00 = PIN(0, 0, NO_ADC);
+const mcu_pin_obj_t pin_PA01 = PIN(0, 1, NO_ADC);
+const mcu_pin_obj_t pin_PA02 = PIN(0, 2, NO_ADC);
+const mcu_pin_obj_t pin_PA03 = PIN(0, 3, NO_ADC);
+const mcu_pin_obj_t pin_PA04 = PIN(0, 4, NO_ADC);
+const mcu_pin_obj_t pin_PA05 = PIN(0, 5, NO_ADC);
+const mcu_pin_obj_t pin_PA06 = PIN(0, 6, NO_ADC);
+const mcu_pin_obj_t pin_PA07 = PIN(0, 7, NO_ADC);
+const mcu_pin_obj_t pin_PA08 = PIN(0, 8, NO_ADC);
+const mcu_pin_obj_t pin_PA09 = PIN(0, 9, NO_ADC);
+const mcu_pin_obj_t pin_PA10 = PIN(0, 10, NO_ADC);
+const mcu_pin_obj_t pin_PA11 = PIN(0, 11, NO_ADC);
+const mcu_pin_obj_t pin_PA12 = PIN(0, 12, NO_ADC);
+const mcu_pin_obj_t pin_PA13 = PIN(0, 13, NO_ADC);
+const mcu_pin_obj_t pin_PA14 = PIN(0, 14, NO_ADC);
+const mcu_pin_obj_t pin_PA15 = PIN(0, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PB00 = PIN(1, 0, NO_ADC);
+const mcu_pin_obj_t pin_PB01 = PIN(1, 1, NO_ADC);
+const mcu_pin_obj_t pin_PB02 = PIN(1, 2, NO_ADC);
+const mcu_pin_obj_t pin_PB03 = PIN(1, 3, NO_ADC);
+const mcu_pin_obj_t pin_PB04 = PIN(1, 4, NO_ADC);
+const mcu_pin_obj_t pin_PB05 = PIN(1, 5, NO_ADC);
+const mcu_pin_obj_t pin_PB06 = PIN(1, 6, NO_ADC);
+const mcu_pin_obj_t pin_PB07 = PIN(1, 7, NO_ADC);
+const mcu_pin_obj_t pin_PB08 = PIN(1, 8, NO_ADC);
+const mcu_pin_obj_t pin_PB09 = PIN(1, 9, NO_ADC);
+const mcu_pin_obj_t pin_PB10 = PIN(1, 10, NO_ADC);
+const mcu_pin_obj_t pin_PB11 = PIN(1, 11, NO_ADC);
+const mcu_pin_obj_t pin_PB12 = PIN(1, 12, NO_ADC);
+const mcu_pin_obj_t pin_PB13 = PIN(1, 13, NO_ADC);
+const mcu_pin_obj_t pin_PB14 = PIN(1, 14, NO_ADC);
+const mcu_pin_obj_t pin_PB15 = PIN(1, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PC00 = PIN(2, 0, NO_ADC);
+const mcu_pin_obj_t pin_PC01 = PIN(2, 1, NO_ADC);
+const mcu_pin_obj_t pin_PC02 = PIN(2, 2, NO_ADC);
+const mcu_pin_obj_t pin_PC03 = PIN(2, 3, NO_ADC);
+const mcu_pin_obj_t pin_PC04 = PIN(2, 4, NO_ADC);
+const mcu_pin_obj_t pin_PC05 = PIN(2, 5, NO_ADC);
+const mcu_pin_obj_t pin_PC06 = PIN(2, 6, NO_ADC);
+const mcu_pin_obj_t pin_PC07 = PIN(2, 7, NO_ADC);
+const mcu_pin_obj_t pin_PC08 = PIN(2, 8, NO_ADC);
+const mcu_pin_obj_t pin_PC09 = PIN(2, 9, NO_ADC);
+const mcu_pin_obj_t pin_PC10 = PIN(2, 10, NO_ADC);
+const mcu_pin_obj_t pin_PC11 = PIN(2, 11, NO_ADC);
+const mcu_pin_obj_t pin_PC12 = PIN(2, 12, NO_ADC);
+const mcu_pin_obj_t pin_PC13 = PIN(2, 13, NO_ADC);
+const mcu_pin_obj_t pin_PC14 = PIN(2, 14, NO_ADC);
+const mcu_pin_obj_t pin_PC15 = PIN(2, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PD00 = PIN(3, 0, NO_ADC);
+const mcu_pin_obj_t pin_PD01 = PIN(3, 1, NO_ADC);
+const mcu_pin_obj_t pin_PD02 = PIN(3, 2, NO_ADC);
+const mcu_pin_obj_t pin_PD03 = PIN(3, 3, NO_ADC);
+const mcu_pin_obj_t pin_PD04 = PIN(3, 4, NO_ADC);
+const mcu_pin_obj_t pin_PD05 = PIN(3, 5, NO_ADC);
+const mcu_pin_obj_t pin_PD06 = PIN(3, 6, NO_ADC);
+const mcu_pin_obj_t pin_PD07 = PIN(3, 7, NO_ADC);
+const mcu_pin_obj_t pin_PD08 = PIN(3, 8, NO_ADC);
+const mcu_pin_obj_t pin_PD09 = PIN(3, 9, NO_ADC);
+const mcu_pin_obj_t pin_PD10 = PIN(3, 10, NO_ADC);
+const mcu_pin_obj_t pin_PD11 = PIN(3, 11, NO_ADC);
+const mcu_pin_obj_t pin_PD12 = PIN(3, 12, NO_ADC);
+const mcu_pin_obj_t pin_PD13 = PIN(3, 13, NO_ADC);
+const mcu_pin_obj_t pin_PD14 = PIN(3, 14, NO_ADC);
+const mcu_pin_obj_t pin_PD15 = PIN(3, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PE00 = PIN(4, 0, NO_ADC);
+const mcu_pin_obj_t pin_PE01 = PIN(4, 1, NO_ADC);
+const mcu_pin_obj_t pin_PE02 = PIN(4, 2, NO_ADC);
+const mcu_pin_obj_t pin_PE03 = PIN(4, 3, NO_ADC);
+const mcu_pin_obj_t pin_PE04 = PIN(4, 4, NO_ADC);
+const mcu_pin_obj_t pin_PE05 = PIN(4, 5, NO_ADC);
+const mcu_pin_obj_t pin_PE06 = PIN(4, 6, NO_ADC);
+const mcu_pin_obj_t pin_PE07 = PIN(4, 7, NO_ADC);
+const mcu_pin_obj_t pin_PE08 = PIN(4, 8, NO_ADC);
+const mcu_pin_obj_t pin_PE09 = PIN(4, 9, NO_ADC);
+const mcu_pin_obj_t pin_PE10 = PIN(4, 10, NO_ADC);
+const mcu_pin_obj_t pin_PE11 = PIN(4, 11, NO_ADC);
+const mcu_pin_obj_t pin_PE12 = PIN(4, 12, NO_ADC);
+const mcu_pin_obj_t pin_PE13 = PIN(4, 13, NO_ADC);
+const mcu_pin_obj_t pin_PE14 = PIN(4, 14, NO_ADC);
+const mcu_pin_obj_t pin_PE15 = PIN(4, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PF00 = PIN(5, 0, NO_ADC);
+const mcu_pin_obj_t pin_PF01 = PIN(5, 1, NO_ADC);
+const mcu_pin_obj_t pin_PF02 = PIN(5, 2, NO_ADC);
+const mcu_pin_obj_t pin_PF03 = PIN(5, 3, NO_ADC);
+const mcu_pin_obj_t pin_PF04 = PIN(5, 4, NO_ADC);
+const mcu_pin_obj_t pin_PF05 = PIN(5, 5, NO_ADC);
+const mcu_pin_obj_t pin_PF06 = PIN(5, 6, NO_ADC);
+const mcu_pin_obj_t pin_PF07 = PIN(5, 7, NO_ADC);
+const mcu_pin_obj_t pin_PF08 = PIN(5, 8, NO_ADC);
+const mcu_pin_obj_t pin_PF09 = PIN(5, 9, NO_ADC);
+const mcu_pin_obj_t pin_PF10 = PIN(5, 10, NO_ADC);
+const mcu_pin_obj_t pin_PF11 = PIN(5, 11, NO_ADC);
+const mcu_pin_obj_t pin_PF12 = PIN(5, 12, NO_ADC);
+const mcu_pin_obj_t pin_PF13 = PIN(5, 13, NO_ADC);
+const mcu_pin_obj_t pin_PF14 = PIN(5, 14, NO_ADC);
+const mcu_pin_obj_t pin_PF15 = PIN(5, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PG00 = PIN(6, 0, NO_ADC);
+const mcu_pin_obj_t pin_PG01 = PIN(6, 1, NO_ADC);
+const mcu_pin_obj_t pin_PG02 = PIN(6, 2, NO_ADC);
+const mcu_pin_obj_t pin_PG03 = PIN(6, 3, NO_ADC);
+const mcu_pin_obj_t pin_PG04 = PIN(6, 4, NO_ADC);
+const mcu_pin_obj_t pin_PG05 = PIN(6, 5, NO_ADC);
+const mcu_pin_obj_t pin_PG06 = PIN(6, 6, NO_ADC);
+const mcu_pin_obj_t pin_PG07 = PIN(6, 7, NO_ADC);
+const mcu_pin_obj_t pin_PG08 = PIN(6, 8, NO_ADC);
+const mcu_pin_obj_t pin_PG09 = PIN(6, 9, NO_ADC);
+const mcu_pin_obj_t pin_PG10 = PIN(6, 10, NO_ADC);
+const mcu_pin_obj_t pin_PG11 = PIN(6, 11, NO_ADC);
+const mcu_pin_obj_t pin_PG12 = PIN(6, 12, NO_ADC);
+const mcu_pin_obj_t pin_PG13 = PIN(6, 13, NO_ADC);
+const mcu_pin_obj_t pin_PG14 = PIN(6, 14, NO_ADC);
+const mcu_pin_obj_t pin_PG15 = PIN(6, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PH00 = PIN(7, 0, NO_ADC);
+const mcu_pin_obj_t pin_PH01 = PIN(7, 1, NO_ADC);
+const mcu_pin_obj_t pin_PH02 = PIN(7, 2, NO_ADC);
+const mcu_pin_obj_t pin_PH03 = PIN(7, 3, NO_ADC);
+const mcu_pin_obj_t pin_PH04 = PIN(7, 4, NO_ADC);
+const mcu_pin_obj_t pin_PH05 = PIN(7, 5, NO_ADC);
+const mcu_pin_obj_t pin_PH06 = PIN(7, 6, NO_ADC);
+const mcu_pin_obj_t pin_PH07 = PIN(7, 7, NO_ADC);
+const mcu_pin_obj_t pin_PH08 = PIN(7, 8, NO_ADC);
+const mcu_pin_obj_t pin_PH09 = PIN(7, 9, NO_ADC);
+const mcu_pin_obj_t pin_PH10 = PIN(7, 10, NO_ADC);
+const mcu_pin_obj_t pin_PH11 = PIN(7, 11, NO_ADC);
+const mcu_pin_obj_t pin_PH12 = PIN(7, 12, NO_ADC);
+const mcu_pin_obj_t pin_PH13 = PIN(7, 13, NO_ADC);
+const mcu_pin_obj_t pin_PH14 = PIN(7, 14, NO_ADC);
+const mcu_pin_obj_t pin_PH15 = PIN(7, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PI00 = PIN(8, 0, NO_ADC);
+const mcu_pin_obj_t pin_PI01 = PIN(8, 1, NO_ADC);
+const mcu_pin_obj_t pin_PI02 = PIN(8, 2, NO_ADC);
+const mcu_pin_obj_t pin_PI03 = PIN(8, 3, NO_ADC);
+const mcu_pin_obj_t pin_PI04 = PIN(8, 4, NO_ADC);
+const mcu_pin_obj_t pin_PI05 = PIN(8, 5, NO_ADC);
+const mcu_pin_obj_t pin_PI06 = PIN(8, 6, NO_ADC);
+const mcu_pin_obj_t pin_PI07 = PIN(8, 7, NO_ADC);
+const mcu_pin_obj_t pin_PI08 = PIN(8, 8, NO_ADC);
+const mcu_pin_obj_t pin_PI09 = PIN(8, 9, NO_ADC);
+const mcu_pin_obj_t pin_PI10 = PIN(8, 10, NO_ADC);
+const mcu_pin_obj_t pin_PI11 = PIN(8, 11, NO_ADC);
+const mcu_pin_obj_t pin_PI12 = PIN(8, 12, NO_ADC);
+const mcu_pin_obj_t pin_PI13 = PIN(8, 13, NO_ADC);
+const mcu_pin_obj_t pin_PI14 = PIN(8, 14, NO_ADC);
+const mcu_pin_obj_t pin_PI15 = PIN(8, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PJ00 = PIN(9, 0, NO_ADC);
+const mcu_pin_obj_t pin_PJ01 = PIN(9, 1, NO_ADC);
+const mcu_pin_obj_t pin_PJ02 = PIN(9, 2, NO_ADC);
+const mcu_pin_obj_t pin_PJ03 = PIN(9, 3, NO_ADC);
+const mcu_pin_obj_t pin_PJ04 = PIN(9, 4, NO_ADC);
+const mcu_pin_obj_t pin_PJ05 = PIN(9, 5, NO_ADC);
+const mcu_pin_obj_t pin_PJ06 = PIN(9, 6, NO_ADC);
+const mcu_pin_obj_t pin_PJ07 = PIN(9, 7, NO_ADC);
+const mcu_pin_obj_t pin_PJ08 = PIN(9, 8, NO_ADC);
+const mcu_pin_obj_t pin_PJ09 = PIN(9, 9, NO_ADC);
+const mcu_pin_obj_t pin_PJ10 = PIN(9, 10, NO_ADC);
+const mcu_pin_obj_t pin_PJ11 = PIN(9, 11, NO_ADC);
+const mcu_pin_obj_t pin_PJ12 = PIN(9, 12, NO_ADC);
+const mcu_pin_obj_t pin_PJ13 = PIN(9, 13, NO_ADC);
+const mcu_pin_obj_t pin_PJ14 = PIN(9, 14, NO_ADC);
+const mcu_pin_obj_t pin_PJ15 = PIN(9, 15, NO_ADC);
+
+const mcu_pin_obj_t pin_PK00 = PIN(10, 0, NO_ADC);
+const mcu_pin_obj_t pin_PK01 = PIN(10, 1, NO_ADC);
+const mcu_pin_obj_t pin_PK02 = PIN(10, 2, NO_ADC);
+const mcu_pin_obj_t pin_PK03 = PIN(10, 3, NO_ADC);
+const mcu_pin_obj_t pin_PK04 = PIN(10, 4, NO_ADC);
+const mcu_pin_obj_t pin_PK05 = PIN(10, 5, NO_ADC);
+const mcu_pin_obj_t pin_PK06 = PIN(10, 6, NO_ADC);
+const mcu_pin_obj_t pin_PK07 = PIN(10, 7, NO_ADC);
diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/pins.h b/ports/stm/peripherals/stm32h7/stm32h743xx/pins.h
new file mode 100644
index 000000000..7c4650dca
--- /dev/null
+++ b/ports/stm/peripherals/stm32h7/stm32h743xx/pins.h
@@ -0,0 +1,199 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PINS_H
+#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PINS_H
+
+extern const mcu_pin_obj_t pin_PA00;
+extern const mcu_pin_obj_t pin_PA01;
+extern const mcu_pin_obj_t pin_PA02;
+extern const mcu_pin_obj_t pin_PA03;
+extern const mcu_pin_obj_t pin_PA04;
+extern const mcu_pin_obj_t pin_PA05;
+extern const mcu_pin_obj_t pin_PA06;
+extern const mcu_pin_obj_t pin_PA07;
+extern const mcu_pin_obj_t pin_PA08;
+extern const mcu_pin_obj_t pin_PA09;
+extern const mcu_pin_obj_t pin_PA10;
+extern const mcu_pin_obj_t pin_PA11;
+extern const mcu_pin_obj_t pin_PA12;
+extern const mcu_pin_obj_t pin_PA13;
+extern const mcu_pin_obj_t pin_PA14;
+extern const mcu_pin_obj_t pin_PA15;
+extern const mcu_pin_obj_t pin_PB00;
+extern const mcu_pin_obj_t pin_PB01;
+extern const mcu_pin_obj_t pin_PB02;
+extern const mcu_pin_obj_t pin_PB03;
+extern const mcu_pin_obj_t pin_PB04;
+extern const mcu_pin_obj_t pin_PB05;
+extern const mcu_pin_obj_t pin_PB06;
+extern const mcu_pin_obj_t pin_PB07;
+extern const mcu_pin_obj_t pin_PB08;
+extern const mcu_pin_obj_t pin_PB09;
+extern const mcu_pin_obj_t pin_PB10;
+extern const mcu_pin_obj_t pin_PB11;
+extern const mcu_pin_obj_t pin_PB12;
+extern const mcu_pin_obj_t pin_PB13;
+extern const mcu_pin_obj_t pin_PB14;
+extern const mcu_pin_obj_t pin_PB15;
+extern const mcu_pin_obj_t pin_PC00;
+extern const mcu_pin_obj_t pin_PC01;
+extern const mcu_pin_obj_t pin_PC02;
+extern const mcu_pin_obj_t pin_PC03;
+extern const mcu_pin_obj_t pin_PC04;
+extern const mcu_pin_obj_t pin_PC05;
+extern const mcu_pin_obj_t pin_PC06;
+extern const mcu_pin_obj_t pin_PC07;
+extern const mcu_pin_obj_t pin_PC08;
+extern const mcu_pin_obj_t pin_PC09;
+extern const mcu_pin_obj_t pin_PC10;
+extern const mcu_pin_obj_t pin_PC11;
+extern const mcu_pin_obj_t pin_PC12;
+extern const mcu_pin_obj_t pin_PC13;
+extern const mcu_pin_obj_t pin_PC14;
+extern const mcu_pin_obj_t pin_PC15;
+extern const mcu_pin_obj_t pin_PD00;
+extern const mcu_pin_obj_t pin_PD01;
+extern const mcu_pin_obj_t pin_PD02;
+extern const mcu_pin_obj_t pin_PD03;
+extern const mcu_pin_obj_t pin_PD04;
+extern const mcu_pin_obj_t pin_PD05;
+extern const mcu_pin_obj_t pin_PD06;
+extern const mcu_pin_obj_t pin_PD07;
+extern const mcu_pin_obj_t pin_PD08;
+extern const mcu_pin_obj_t pin_PD09;
+extern const mcu_pin_obj_t pin_PD10;
+extern const mcu_pin_obj_t pin_PD11;
+extern const mcu_pin_obj_t pin_PD12;
+extern const mcu_pin_obj_t pin_PD13;
+extern const mcu_pin_obj_t pin_PD14;
+extern const mcu_pin_obj_t pin_PD15;
+extern const mcu_pin_obj_t pin_PE00;
+extern const mcu_pin_obj_t pin_PE01;
+extern const mcu_pin_obj_t pin_PE02;
+extern const mcu_pin_obj_t pin_PE03;
+extern const mcu_pin_obj_t pin_PE04;
+extern const mcu_pin_obj_t pin_PE05;
+extern const mcu_pin_obj_t pin_PE06;
+extern const mcu_pin_obj_t pin_PE07;
+extern const mcu_pin_obj_t pin_PE08;
+extern const mcu_pin_obj_t pin_PE09;
+extern const mcu_pin_obj_t pin_PE10;
+extern const mcu_pin_obj_t pin_PE11;
+extern const mcu_pin_obj_t pin_PE12;
+extern const mcu_pin_obj_t pin_PE13;
+extern const mcu_pin_obj_t pin_PE14;
+extern const mcu_pin_obj_t pin_PE15;
+extern const mcu_pin_obj_t pin_PF00;
+extern const mcu_pin_obj_t pin_PF01;
+extern const mcu_pin_obj_t pin_PF02;
+extern const mcu_pin_obj_t pin_PF03;
+extern const mcu_pin_obj_t pin_PF04;
+extern const mcu_pin_obj_t pin_PF05;
+extern const mcu_pin_obj_t pin_PF06;
+extern const mcu_pin_obj_t pin_PF07;
+extern const mcu_pin_obj_t pin_PF08;
+extern const mcu_pin_obj_t pin_PF09;
+extern const mcu_pin_obj_t pin_PF10;
+extern const mcu_pin_obj_t pin_PF11;
+extern const mcu_pin_obj_t pin_PF12;
+extern const mcu_pin_obj_t pin_PF13;
+extern const mcu_pin_obj_t pin_PF14;
+extern const mcu_pin_obj_t pin_PF15;
+extern const mcu_pin_obj_t pin_PG00;
+extern const mcu_pin_obj_t pin_PG01;
+extern const mcu_pin_obj_t pin_PG02;
+extern const mcu_pin_obj_t pin_PG03;
+extern const mcu_pin_obj_t pin_PG04;
+extern const mcu_pin_obj_t pin_PG05;
+extern const mcu_pin_obj_t pin_PG06;
+extern const mcu_pin_obj_t pin_PG07;
+extern const mcu_pin_obj_t pin_PG08;
+extern const mcu_pin_obj_t pin_PG09;
+extern const mcu_pin_obj_t pin_PG10;
+extern const mcu_pin_obj_t pin_PG11;
+extern const mcu_pin_obj_t pin_PG12;
+extern const mcu_pin_obj_t pin_PG13;
+extern const mcu_pin_obj_t pin_PG14;
+extern const mcu_pin_obj_t pin_PG15;
+extern const mcu_pin_obj_t pin_PH00;
+extern const mcu_pin_obj_t pin_PH01;
+extern const mcu_pin_obj_t pin_PH02;
+extern const mcu_pin_obj_t pin_PH03;
+extern const mcu_pin_obj_t pin_PH04;
+extern const mcu_pin_obj_t pin_PH05;
+extern const mcu_pin_obj_t pin_PH06;
+extern const mcu_pin_obj_t pin_PH07;
+extern const mcu_pin_obj_t pin_PH08;
+extern const mcu_pin_obj_t pin_PH09;
+extern const mcu_pin_obj_t pin_PH10;
+extern const mcu_pin_obj_t pin_PH11;
+extern const mcu_pin_obj_t pin_PH12;
+extern const mcu_pin_obj_t pin_PH13;
+extern const mcu_pin_obj_t pin_PH14;
+extern const mcu_pin_obj_t pin_PH15;
+extern const mcu_pin_obj_t pin_PI00;
+extern const mcu_pin_obj_t pin_PI01;
+extern const mcu_pin_obj_t pin_PI02;
+extern const mcu_pin_obj_t pin_PI03;
+extern const mcu_pin_obj_t pin_PI04;
+extern const mcu_pin_obj_t pin_PI05;
+extern const mcu_pin_obj_t pin_PI06;
+extern const mcu_pin_obj_t pin_PI07;
+extern const mcu_pin_obj_t pin_PI08;
+extern const mcu_pin_obj_t pin_PI09;
+extern const mcu_pin_obj_t pin_PI10;
+extern const mcu_pin_obj_t pin_PI11;
+extern const mcu_pin_obj_t pin_PI12;
+extern const mcu_pin_obj_t pin_PI13;
+extern const mcu_pin_obj_t pin_PI14;
+extern const mcu_pin_obj_t pin_PI15;
+extern const mcu_pin_obj_t pin_PJ00;
+extern const mcu_pin_obj_t pin_PJ01;
+extern const mcu_pin_obj_t pin_PJ02;
+extern const mcu_pin_obj_t pin_PJ03;
+extern const mcu_pin_obj_t pin_PJ04;
+extern const mcu_pin_obj_t pin_PJ05;
+extern const mcu_pin_obj_t pin_PJ06;
+extern const mcu_pin_obj_t pin_PJ07;
+extern const mcu_pin_obj_t pin_PJ08;
+extern const mcu_pin_obj_t pin_PJ09;
+extern const mcu_pin_obj_t pin_PJ10;
+extern const mcu_pin_obj_t pin_PJ11;
+extern const mcu_pin_obj_t pin_PJ12;
+extern const mcu_pin_obj_t pin_PJ13;
+extern const mcu_pin_obj_t pin_PJ14;
+extern const mcu_pin_obj_t pin_PJ15;
+extern const mcu_pin_obj_t pin_PK00;
+extern const mcu_pin_obj_t pin_PK01;
+extern const mcu_pin_obj_t pin_PK02;
+extern const mcu_pin_obj_t pin_PK03;
+extern const mcu_pin_obj_t pin_PK04;
+extern const mcu_pin_obj_t pin_PK05;
+extern const mcu_pin_obj_t pin_PK06;
+extern const mcu_pin_obj_t pin_PK07;
+
+#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32H743XX_PINS_H