summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHierophect <hierophect@gmail.com>2019-07-17 14:07:33 -0400
committerHierophect <hierophect@gmail.com>2019-07-17 14:07:33 -0400
commitc588cc6db01586a51d4698806a776bcd79468845 (patch)
tree982b00e7fd336e9e6c0b892f3025b6ce1b5cbd7e
parentf31a0d9cf538406954c22c92c7160171209b8d8b (diff)
first pass of DigitalIO
-rwxr-xr-xports/stm32f4/Makefile23
-rw-r--r--ports/stm32f4/boards/make-pins.py208
-rw-r--r--ports/stm32f4/boards/stm32f412g_disco/pins.c90
-rw-r--r--ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c2
-rw-r--r--ports/stm32f4/common-hal/digitalio/DigitalInOut.c153
-rw-r--r--ports/stm32f4/common-hal/microcontroller/Pin.c142
-rw-r--r--ports/stm32f4/common-hal/microcontroller/Pin.h33
-rw-r--r--ports/stm32f4/common-hal/microcontroller/__init__.c167
-rw-r--r--ports/stm32f4/mpconfigport.mk6
-rw-r--r--ports/stm32f4/peripherals/stm32/stm32f411re/pins.c78
-rw-r--r--ports/stm32f4/peripherals/stm32/stm32f411re/pins.h79
-rw-r--r--ports/stm32f4/peripherals/stm32f4/cache.c (renamed from ports/stm32f4/peripherals/stm32/cache.c)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/cache.h (renamed from ports/stm32f4/peripherals/stm32/cache.h)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/clocks.c (renamed from ports/stm32f4/peripherals/stm32/clocks.c)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/clocks.h (renamed from ports/stm32f4/peripherals/stm32/clocks.h)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/nvm.c (renamed from ports/stm32f4/peripherals/stm32/nvm.c)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/nvm.h (renamed from ports/stm32f4/peripherals/stm32/nvm.h)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/pins.h (renamed from ports/stm32f4/peripherals/stm32/pins.h)38
-rw-r--r--ports/stm32f4/peripherals/stm32f4/power.h (renamed from ports/stm32f4/peripherals/stm32/power.h)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c159
-rw-r--r--ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h156
-rw-r--r--ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c (renamed from ports/stm32f4/peripherals/stm32/stm32f411re/power.c)14
-rw-r--r--ports/stm32f4/peripherals/stm32f4/timers.c (renamed from ports/stm32f4/peripherals/stm32/timers.c)0
-rw-r--r--ports/stm32f4/peripherals/stm32f4/timers.h (renamed from ports/stm32f4/peripherals/stm32/timers.h)0
-rw-r--r--ports/stm32f4/supervisor/serial.c5
-rw-r--r--ports/stm32f4/supervisor/usb.c76
26 files changed, 705 insertions, 724 deletions
diff --git a/ports/stm32f4/Makefile b/ports/stm32f4/Makefile
index f5701dd78..c41c277e6 100755
--- a/ports/stm32f4/Makefile
+++ b/ports/stm32f4/Makefile
@@ -70,6 +70,7 @@ INC += -I./stm32cube/CMSIS/Device/ST/STM32F4xx/Include
INC += -I./stm32cube/CMSIS/Include
INC += -I./boards
INC += -I./boards/$(BOARD)
+INC += -I./peripherals
INC += -I../../lib/mp-readline
INC += -I../../lib/tinyusb/src
INC += -I../../supervisor/shared/usb
@@ -88,10 +89,9 @@ endif
# C defines
C_DEFS = \
+-DUSE_FULL_LL_DRIVER \
-DUSE_HAL_DRIVER \
-DSTM32F412Zx \
--DUSE_HAL_DRIVER \
--DSTM32F412Zx
# C defines
#C_DEFS = \
@@ -144,8 +144,25 @@ CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_STM32F4 -DCFG_TUD_CDC_RX_BUFSIZE=1024 -DCFG_TUD
SRC_STM32 = \
boards/$(BOARD)/stm32f4xx_it.c \
boards/$(BOARD)/stm32f4xx_hal_msp.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_i2c.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2s.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2s_ex.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_qspi.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c \
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c \
+ stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c \
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
@@ -169,6 +186,7 @@ SRC_C += \
mphalport.c \
tick.c \
boards/$(BOARD)/board.c \
+ boards/$(BOARD)/pins.c \
lib/libc/string0.c \
lib/mp-readline/readline.c \
lib/oofatfs/ff.c \
@@ -180,6 +198,7 @@ SRC_C += \
lib/utils/pyexec.c \
lib/utils/stdout_helpers.c \
lib/utils/sys_stdio_mphal.c \
+ peripherals/stm32f4/stm32f412zg/pins.c \
supervisor/shared/memory.c \
#lib/tinyusb/src/portable/st/stm32f4/dcd_stm32f4.c
diff --git a/ports/stm32f4/boards/make-pins.py b/ports/stm32f4/boards/make-pins.py
deleted file mode 100644
index d1cfd5b70..000000000
--- a/ports/stm32f4/boards/make-pins.py
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/env python
-"""Creates the pin file for the nRF5."""
-
-from __future__ import print_function
-
-import argparse
-import sys
-import csv
-
-
-def parse_port_pin(name_str):
- """Parses a string and returns a (port-num, pin-num) tuple."""
- if len(name_str) < 4:
- raise ValueError("Expecting pin name to be at least 5 charcters.")
- if name_str[0] != 'P':
- raise ValueError("Expecting pin name to start with P")
- if name_str[1] not in ('0', '1'):
- raise ValueError("Expecting pin port to be in 0 or 1")
- port = ord(name_str[1]) - ord('0')
- pin_str = name_str[3:]
- if not pin_str.isdigit():
- raise ValueError("Expecting numeric pin number.")
- return (port, int(pin_str))
-
-
-class Pin(object):
- """Holds the information associated with a pin."""
-
- def __init__(self, port, pin):
- self.port = port
- self.pin = pin
- self.adc_channel = '0'
- self.board_pin = False
-
- def cpu_pin_name(self):
- return 'P{:d}_{:02d}'.format(self.port, self.pin)
-
- def is_board_pin(self):
- return self.board_pin
-
- def set_is_board_pin(self):
- self.board_pin = True
-
- def parse_adc(self, adc_str):
- if (adc_str[:3] != 'AIN'):
- return
- self.adc_channel = 'SAADC_CH_PSELP_PSELP_AnalogInput%d' % int(adc_str[3])
-
- def print(self):
- print('const pin_obj_t pin_{:s} = PIN({:s}, {:d}, {:d}, {:s});'.format(
- self.cpu_pin_name(), self.cpu_pin_name(),
- self.port, self.pin, self.adc_channel))
-
- def print_header(self, hdr_file):
- hdr_file.write('extern const pin_obj_t pin_{:s};\n'.
- format(self.cpu_pin_name()))
-
-
-class NamedPin(object):
-
- def __init__(self, name, pin):
- self._name = name
- self._pin = pin
-
- def pin(self):
- return self._pin
-
- def name(self):
- return self._name
-
-
-class Pins(object):
-
- def __init__(self):
- self.cpu_pins = [] # list of NamedPin objects
- self.board_pins = [] # list of NamedPin objects
-
- def find_pin(self, port_num, pin_num):
- for named_pin in self.cpu_pins:
- pin = named_pin.pin()
- if pin.port == port_num and pin.pin == pin_num:
- return pin
-
- def parse_af_file(self, filename):
- with open(filename, 'r') as csvfile:
- rows = csv.reader(csvfile)
- for row in rows:
- try:
- (port_num, pin_num) = parse_port_pin(row[0])
- except:
- continue
- pin = Pin(port_num, pin_num)
- if len(row) > 1:
- pin.parse_adc(row[1])
- self.cpu_pins.append(NamedPin(pin.cpu_pin_name(), pin))
-
- def parse_board_file(self, filename):
- with open(filename, 'r') as csvfile:
- rows = csv.reader(csvfile)
- for row in rows:
- try:
- (port_num, pin_num) = parse_port_pin(row[1])
- except:
- continue
- pin = self.find_pin(port_num, pin_num)
- if pin:
- pin.set_is_board_pin()
- self.board_pins.append(NamedPin(row[0], pin))
-
- def print_named(self, label, named_pins):
- print('')
- print('STATIC const mp_rom_map_elem_t {:s}_table[] = {{'.format(label))
- for named_pin in named_pins:
- pin = named_pin.pin()
- if pin.is_board_pin():
- print(' {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},'.format(named_pin.name(), pin.cpu_pin_name()))
- print('};')
- print('MP_DEFINE_CONST_DICT({:s}, {:s}_table);'.format(label, label))
-
- def print(self):
- for named_pin in self.cpu_pins:
- pin = named_pin.pin()
- if pin.is_board_pin():
- pin.print()
- self.print_named('mcu_pin_globals', self.cpu_pins)
- self.print_named('board_module_globals', self.board_pins)
-
- def print_header(self, hdr_filename):
- with open(hdr_filename, 'wt') as hdr_file:
- for named_pin in self.cpu_pins:
- pin = named_pin.pin()
- if pin.is_board_pin():
- pin.print_header(hdr_file)
-
- def print_qstr(self, qstr_filename):
- with open(qstr_filename, 'wt') as qstr_file:
- qstr_set = set([])
- for named_pin in self.cpu_pins:
- pin = named_pin.pin()
- if pin.is_board_pin():
- qstr_set |= set([named_pin.name()])
- for named_pin in self.board_pins:
- qstr_set |= set([named_pin.name()])
- for qstr in sorted(qstr_set):
- print('Q({})'.format(qstr), file=qstr_file)
-
-
-def main():
- parser = argparse.ArgumentParser(
- prog="make-pins.py",
- usage="%(prog)s [options] [command]",
- description="Generate board specific pin file"
- )
- parser.add_argument(
- "-a", "--af",
- dest="af_filename",
- help="Specifies the alternate function file for the chip",
- default="nrf_af.csv"
- )
- parser.add_argument(
- "-b", "--board",
- dest="board_filename",
- help="Specifies the board file",
- )
- parser.add_argument(
- "-p", "--prefix",
- dest="prefix_filename",
- help="Specifies beginning portion of generated pins file",
- default="nrf52_prefix.c"
- )
- parser.add_argument(
- "-q", "--qstr",
- dest="qstr_filename",
- help="Specifies name of generated qstr header file",
- default="build/pins_qstr.h"
- )
- parser.add_argument(
- "-r", "--hdr",
- dest="hdr_filename",
- help="Specifies name of generated pin header file",
- default="build/pins.h"
- )
- args = parser.parse_args(sys.argv[1:])
-
- pins = Pins()
-
- print('// This file was automatically generated by make-pins.py')
- print('//')
- if args.af_filename:
- print('// --af {:s}'.format(args.af_filename))
- pins.parse_af_file(args.af_filename)
-
- if args.board_filename:
- print('// --board {:s}'.format(args.board_filename))
- pins.parse_board_file(args.board_filename)
-
- if args.prefix_filename:
- print('// --prefix {:s}'.format(args.prefix_filename))
- print('')
- with open(args.prefix_filename, 'r') as prefix_file:
- print(prefix_file.read())
- pins.print()
- pins.print_header(args.hdr_filename)
- pins.print_qstr(args.qstr_filename)
-
-
-if __name__ == "__main__":
- main()
diff --git a/ports/stm32f4/boards/stm32f412g_disco/pins.c b/ports/stm32f4/boards/stm32f412g_disco/pins.c
new file mode 100644
index 000000000..e3a4b5ed6
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f412g_disco/pins.c
@@ -0,0 +1,90 @@
+#include "shared-bindings/board/__init__.h"
+
+STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR_PE02), MP_ROM_PTR(&pin_PE02) },
+ { MP_ROM_QSTR(MP_QSTR_PE03), MP_ROM_PTR(&pin_PE03) },
+ { MP_ROM_QSTR(MP_QSTR_PE04), MP_ROM_PTR(&pin_PE04) },
+ { MP_ROM_QSTR(MP_QSTR_PE05), MP_ROM_PTR(&pin_PE05) },
+ { MP_ROM_QSTR(MP_QSTR_PE06), MP_ROM_PTR(&pin_PE06) },
+ { MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13) },
+ { MP_ROM_QSTR(MP_QSTR_PF02), MP_ROM_PTR(&pin_PF02) },
+ { MP_ROM_QSTR(MP_QSTR_PF03), MP_ROM_PTR(&pin_PF03) },
+ { MP_ROM_QSTR(MP_QSTR_PF10), MP_ROM_PTR(&pin_PF10) },
+ { MP_ROM_QSTR(MP_QSTR_PC00), MP_ROM_PTR(&pin_PC00) },
+ { MP_ROM_QSTR(MP_QSTR_PC01), MP_ROM_PTR(&pin_PC01) },
+ { MP_ROM_QSTR(MP_QSTR_PC02), MP_ROM_PTR(&pin_PC02) },
+ { MP_ROM_QSTR(MP_QSTR_PC03), MP_ROM_PTR(&pin_PC03) },
+ { MP_ROM_QSTR(MP_QSTR_PA01), MP_ROM_PTR(&pin_PA01) },
+ { MP_ROM_QSTR(MP_QSTR_PA02), MP_ROM_PTR(&pin_PA02) },
+ { MP_ROM_QSTR(MP_QSTR_PA03), MP_ROM_PTR(&pin_PA03) },
+ { MP_ROM_QSTR(MP_QSTR_PA04), MP_ROM_PTR(&pin_PA04) },
+ { MP_ROM_QSTR(MP_QSTR_PA05), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR_PA06), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_PA07), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR_PC04), MP_ROM_PTR(&pin_PC04) },
+ { MP_ROM_QSTR(MP_QSTR_PC05), MP_ROM_PTR(&pin_PC05) },
+ { MP_ROM_QSTR(MP_QSTR_PB00), MP_ROM_PTR(&pin_PB00) },
+ { MP_ROM_QSTR(MP_QSTR_PB01), MP_ROM_PTR(&pin_PB01) },
+ { MP_ROM_QSTR(MP_QSTR_PF11), MP_ROM_PTR(&pin_PF11) },
+ { MP_ROM_QSTR(MP_QSTR_PF13), MP_ROM_PTR(&pin_PF13) },
+ { MP_ROM_QSTR(MP_QSTR_PB10), MP_ROM_PTR(&pin_PB10) },
+ { MP_ROM_QSTR(MP_QSTR_PB11), MP_ROM_PTR(&pin_PB11) },
+ { MP_ROM_QSTR(MP_QSTR_PB12), MP_ROM_PTR(&pin_PB12) },
+ { MP_ROM_QSTR(MP_QSTR_PB13), MP_ROM_PTR(&pin_PB13) },
+ { MP_ROM_QSTR(MP_QSTR_PB14), MP_ROM_PTR(&pin_PB14) },
+ { MP_ROM_QSTR(MP_QSTR_PB15), MP_ROM_PTR(&pin_PB15) },
+ { MP_ROM_QSTR(MP_QSTR_PD12), MP_ROM_PTR(&pin_PD12) },
+ { MP_ROM_QSTR(MP_QSTR_PD13), MP_ROM_PTR(&pin_PD13) },
+ { MP_ROM_QSTR(MP_QSTR_PG02), MP_ROM_PTR(&pin_PG02) },
+ { MP_ROM_QSTR(MP_QSTR_PC06), MP_ROM_PTR(&pin_PC06) },
+ { MP_ROM_QSTR(MP_QSTR_PC07), MP_ROM_PTR(&pin_PC07) },
+ { MP_ROM_QSTR(MP_QSTR_PC09), MP_ROM_PTR(&pin_PC09) },
+ { MP_ROM_QSTR(MP_QSTR_PA08), MP_ROM_PTR(&pin_PA08) },
+ { MP_ROM_QSTR(MP_QSTR_PA10), MP_ROM_PTR(&pin_PA10) },
+ { MP_ROM_QSTR(MP_QSTR_PA13), MP_ROM_PTR(&pin_PA13) },
+ { MP_ROM_QSTR(MP_QSTR_PA14), MP_ROM_PTR(&pin_PA14) },
+ { MP_ROM_QSTR(MP_QSTR_PA15), MP_ROM_PTR(&pin_PA15) },
+ { MP_ROM_QSTR(MP_QSTR_PD06), MP_ROM_PTR(&pin_PD06) },
+ { MP_ROM_QSTR(MP_QSTR_PG09), MP_ROM_PTR(&pin_PG09) },
+ { MP_ROM_QSTR(MP_QSTR_PG10), MP_ROM_PTR(&pin_PG10) },
+ { MP_ROM_QSTR(MP_QSTR_PG11), MP_ROM_PTR(&pin_PG11) },
+ { MP_ROM_QSTR(MP_QSTR_PG12), MP_ROM_PTR(&pin_PG12) },
+ { MP_ROM_QSTR(MP_QSTR_PG13), MP_ROM_PTR(&pin_PG13) },
+ { MP_ROM_QSTR(MP_QSTR_PG14), MP_ROM_PTR(&pin_PG14) },
+ { MP_ROM_QSTR(MP_QSTR_PB03), MP_ROM_PTR(&pin_PB03) },
+ { MP_ROM_QSTR(MP_QSTR_PB04), MP_ROM_PTR(&pin_PB04) },
+ { MP_ROM_QSTR(MP_QSTR_PB05), MP_ROM_PTR(&pin_PB05) },
+ { MP_ROM_QSTR(MP_QSTR_PB06), MP_ROM_PTR(&pin_PB06) },
+ { MP_ROM_QSTR(MP_QSTR_PB07), MP_ROM_PTR(&pin_PB07) },
+ { MP_ROM_QSTR(MP_QSTR_PB08), MP_ROM_PTR(&pin_PB08) },
+ { MP_ROM_QSTR(MP_QSTR_PB09), MP_ROM_PTR(&pin_PB09) },
+ { MP_ROM_QSTR(MP_QSTR_PE00), MP_ROM_PTR(&pin_PE00) },
+ { MP_ROM_QSTR(MP_QSTR_PE01), MP_ROM_PTR(&pin_PE01) },
+ { MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PB10) },
+ { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PB09) },
+ { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA15) },
+ { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PB08) },
+ { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PG10) },
+ { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PG11) },
+ { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PF03) },
+ { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PF10) },
+ { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PG12) },
+ { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PF04) },
+ { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PG13) },
+ { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PG14) },
+ { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PG09) },
+ { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA01) },
+ { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PC01) },
+ { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PC03) },
+ { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PC04) },
+ { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PC05) }, //alt PB09, see F401ZG-DISCO manual
+ { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PB00) }, //alt PB10, see F401ZG-DISCO manual
+ { MP_ROM_QSTR(MP_QSTR_LED1), MP_ROM_PTR(&pin_PE00) },
+ { MP_ROM_QSTR(MP_QSTR_LED2), MP_ROM_PTR(&pin_PE01) },
+ { MP_ROM_QSTR(MP_QSTR_LED3), MP_ROM_PTR(&pin_PE02) },
+ { MP_ROM_QSTR(MP_QSTR_LED4), MP_ROM_PTR(&pin_PE03) },
+};
+MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
diff --git a/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c b/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c
index d44ec593d..032a55472 100644
--- a/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c
+++ b/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c
@@ -205,7 +205,7 @@ void PendSV_Handler(void)
// /* USER CODE BEGIN OTG_FS_IRQn 0 */
// /* USER CODE END OTG_FS_IRQn 0 */
-// HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
+// // HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
// /* USER CODE BEGIN OTG_FS_IRQn 1 */
// /* USER CODE END OTG_FS_IRQn 1 */
diff --git a/ports/stm32f4/common-hal/digitalio/DigitalInOut.c b/ports/stm32f4/common-hal/digitalio/DigitalInOut.c
index 452144d7e..d50caee2b 100644
--- a/ports/stm32f4/common-hal/digitalio/DigitalInOut.c
+++ b/ports/stm32f4/common-hal/digitalio/DigitalInOut.c
@@ -27,134 +27,131 @@
#include "shared-bindings/digitalio/DigitalInOut.h"
#include "py/runtime.h"
#include "supervisor/shared/translate.h"
-
-//#include "nrf_gpio.h"
+#include "stm32f4xx_hal.h"
+#include "stm32f4xx_ll_gpio.h"
void common_hal_digitalio_digitalinout_never_reset(
- // digitalio_digitalinout_obj_t *self) {
- // never_reset_pin_number(self->pin->number);
+ digitalio_digitalinout_obj_t *self) {
+ never_reset_pin_number(self->pin->port_number, self->pin->number);
}
digitalinout_result_t common_hal_digitalio_digitalinout_construct(
- // digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
- // claim_pin(pin);
- // self->pin = pin;
+ digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
+
+ claim_pin(pin);
+ self->pin = pin;
- // nrf_gpio_cfg_input(pin->number, NRF_GPIO_PIN_NOPULL);
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ GPIO_InitStruct.Pin = (1 << pin->number);
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(pin->port, &GPIO_InitStruct);
return DIGITALINOUT_OK;
}
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) {
- // return self->pin == mp_const_none;
- return false;
+ return self->pin == mp_const_none;
}
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self) {
- // if (common_hal_digitalio_digitalinout_deinited(self)) {
- // return;
- // }
- // nrf_gpio_cfg_default(self->pin->number);
+ if (common_hal_digitalio_digitalinout_deinited(self)) {
+ return;
+ }
- // reset_pin_number(self->pin->number);
- // self->pin = mp_const_none;
+ reset_pin_number(self->pin->port_number, self->pin->number);
+ self->pin = mp_const_none;
}
void common_hal_digitalio_digitalinout_switch_to_input(
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
- nrf_gpio_cfg_input(self->pin->number, NRF_GPIO_PIN_NOPULL);
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ GPIO_InitStruct.Pin = (1 << self->pin->number);
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(self->pin->port, &GPIO_InitStruct);
+
common_hal_digitalio_digitalinout_set_pull(self, pull);
}
void common_hal_digitalio_digitalinout_switch_to_output(
- // digitalio_digitalinout_obj_t *self, bool value,
- // digitalio_drive_mode_t drive_mode) {
+ digitalio_digitalinout_obj_t *self, bool value,
+ digitalio_drive_mode_t drive_mode) {
- // common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
- // common_hal_digitalio_digitalinout_set_value(self, value);
+ common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
+ common_hal_digitalio_digitalinout_set_value(self, value);
}
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
- // digitalio_digitalinout_obj_t *self) {
+ digitalio_digitalinout_obj_t *self) {
- // return (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_INPUT)
- // ? DIRECTION_INPUT : DIRECTION_OUTPUT;
- return DIRECTION_OUTPUT;
+ return (LL_GPIO_GetPinMode(self->pin->port, (1 << self->pin->number))
+ == LL_GPIO_MODE_INPUT) ? DIRECTION_INPUT : DIRECTION_OUTPUT;
}
void common_hal_digitalio_digitalinout_set_value(
- // digitalio_digitalinout_obj_t *self, bool value) {
- // nrf_gpio_pin_write(self->pin->number, value);
+ digitalio_digitalinout_obj_t *self, bool value) {
+ HAL_GPIO_WritePin(self->pin->port, 1 << self->pin->number, value);
}
bool common_hal_digitalio_digitalinout_get_value(
- // digitalio_digitalinout_obj_t *self) {
- // return (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_INPUT)
- // ? nrf_gpio_pin_read(self->pin->number)
- // : nrf_gpio_pin_out_read(self->pin->number);
- return false;
+ digitalio_digitalinout_obj_t *self) {
+ return (LL_GPIO_GetPinMode(self->pin->port, (1 << self->pin->number)) == LL_GPIO_MODE_INPUT)
+ ? HAL_GPIO_ReadPin(self->pin->port, (1 << self->pin->number))
+ : LL_GPIO_IsOutputPinSet(self->pin->port, (1 << self->pin->number));
}
void common_hal_digitalio_digitalinout_set_drive_mode(
- // digitalio_digitalinout_obj_t *self,
- // digitalio_drive_mode_t drive_mode) {
- // nrf_gpio_cfg(self->pin->number,
- // NRF_GPIO_PIN_DIR_OUTPUT,
- // NRF_GPIO_PIN_INPUT_DISCONNECT,
- // NRF_GPIO_PIN_NOPULL,
- // drive_mode == DRIVE_MODE_OPEN_DRAIN ? NRF_GPIO_PIN_H0D1 : NRF_GPIO_PIN_H0H1,
- // NRF_GPIO_PIN_NOSENSE);
+ digitalio_digitalinout_obj_t *self,
+ digitalio_drive_mode_t drive_mode) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ GPIO_InitStruct.Pin = (1 << self->pin->number);
+ GPIO_InitStruct.Mode = (drive_mode == DRIVE_MODE_OPEN_DRAIN ?
+ GPIO_MODE_OUTPUT_OD : GPIO_MODE_OUTPUT_PP);
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(self->pin->port, &GPIO_InitStruct);
}
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
- // digitalio_digitalinout_obj_t *self) {
- // uint32_t pin = self->pin->number;
- // // Changes pin to be a relative pin number in port.
- // NRF_GPIO_Type *reg = nrf_gpio_pin_port_decode(&pin);
-
- // switch ((reg->PIN_CNF[pin] & GPIO_PIN_CNF_DRIVE_Msk) >> GPIO_PIN_CNF_DRIVE_Pos) {
- // case NRF_GPIO_PIN_S0D1:
- // case NRF_GPIO_PIN_H0D1:
- // return DRIVE_MODE_OPEN_DRAIN;
- // default:
- // return DRIVE_MODE_PUSH_PULL;
- // }
+ digitalio_digitalinout_obj_t *self) {
+
+ return LL_GPIO_GetPinOutputType(self->pin->port, (1 << self->pin->port_number))
+ == LL_GPIO_OUTPUT_OPENDRAIN ? DRIVE_MODE_OPEN_DRAIN : DRIVE_MODE_PUSH_PULL;
}
void common_hal_digitalio_digitalinout_set_pull(
- // digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
- // nrf_gpio_pin_pull_t hal_pull = NRF_GPIO_PIN_NOPULL;
-
- // switch (pull) {
- // case PULL_UP:
- // hal_pull = NRF_GPIO_PIN_PULLUP;
- // break;
- // case PULL_DOWN:
- // hal_pull = NRF_GPIO_PIN_PULLDOWN;
- // break;
- // case PULL_NONE:
- // default:
- // break;
- // }
-
- // nrf_gpio_cfg_input(self->pin->number, hal_pull);
+ digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
+
+ switch (pull) {
+ case PULL_UP:
+ LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_UP);
+ break;
+ case PULL_DOWN:
+ LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_DOWN);
+ break;
+ case PULL_NONE:
+ LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_NO);
+ break;
+ default:
+ break;
+ }
}
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
digitalio_digitalinout_obj_t *self) {
- uint32_t pin = self->pin->number;
- // Changes pin to be a relative pin number in port.
- NRF_GPIO_Type *reg = nrf_gpio_pin_port_decode(&pin);
-
- if (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_OUTPUT) {
- mp_raise_AttributeError(translate("Cannot get pull while in output mode"));
- }
+
- switch ((reg->PIN_CNF[pin] & GPIO_PIN_CNF_PULL_Msk) >> GPIO_PIN_CNF_PULL_Pos) {
- case NRF_GPIO_PIN_PULLUP:
+ switch (LL_GPIO_GetPinPull(self->pin->port,(1 << self->pin->number))) {
+ case LL_GPIO_PULL_UP:
return PULL_UP;
- case NRF_GPIO_PIN_PULLDOWN:
+ case LL_GPIO_PULL_DOWN:
return PULL_DOWN;
+ case LL_GPIO_PULL_NO:
+ return PULL_NONE;
default:
return PULL_NONE;
}
diff --git a/ports/stm32f4/common-hal/microcontroller/Pin.c b/ports/stm32f4/common-hal/microcontroller/Pin.c
index ade0c952c..38e73cb66 100644
--- a/ports/stm32f4/common-hal/microcontroller/Pin.c
+++ b/ports/stm32f4/common-hal/microcontroller/Pin.c
@@ -26,157 +26,55 @@
#include "shared-bindings/microcontroller/Pin.h"
-//#include "nrf_gpio.h"
#include "py/mphal.h"
+#include "stm32f4/pins.h"
+#include "stm32f4xx_hal.h"
-#include "stm32/pins.h"
-#include "supervisor/shared/rgb_led_status.h"
+#define GPIO_PORT_COUNT 5
-#ifdef MICROPY_HW_NEOPIXEL
-bool neopixel_in_use;
-#endif
-#ifdef MICROPY_HW_APA102_MOSI
-bool apa102_sck_in_use;
-bool apa102_mosi_in_use;
-#endif
-#ifdef SPEAKER_ENABLE_PIN
-bool speaker_enable_in_use;
-#endif
-
-// Bit mask of claimed pins on each of up to two ports. nrf52832 has one port; nrf52840 has two.
-STATIC uint32_t claimed_pins[GPIO_COUNT];
-STATIC uint32_t never_reset_pins[GPIO_COUNT];
+STATIC uint16_t claimed_pins[GPIO_PORT_COUNT];
+STATIC uint16_t never_reset_pins[GPIO_PORT_COUNT];
+GPIO_TypeDef * ports[GPIO_PORT_COUNT] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE};
void reset_all_pins(void) {
- for (size_t i = 0; i < GPIO_COUNT; i++) {
+ // Reset claimed pins
+ for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) {
claimed_pins[i] = never_reset_pins[i];
}
-
- for (uint32_t pin = 0; pin < NUMBER_OF_PINS; ++pin) {
- if ((never_reset_pins[nrf_pin_port(pin)] & (1 << nrf_relative_pin_number(pin))) != 0) {
- continue;
- }
- nrf_gpio_cfg_default(pin);
+ for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) {
+ HAL_GPIO_DeInit(ports[i], ~never_reset_pins[i]);
}
-
- #ifdef MICROPY_HW_NEOPIXEL
- neopixel_in_use = false;
- #endif
- #ifdef MICROPY_HW_APA102_MOSI
- apa102_sck_in_use = false;
- apa102_mosi_in_use = false;
- #endif
-
- // After configuring SWD because it may be shared.
- #ifdef SPEAKER_ENABLE_PIN
- speaker_enable_in_use = false;
- // TODO set pin to out and turn off.
- #endif
}
// Mark pin as free and return it to a quiescent state.
-void reset_pin_number(uint8_t pin_number) {
+void reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
if (pin_number == NO_PIN) {
return;
}
// Clear claimed bit.
- claimed_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number));
-
- #ifdef MICROPY_HW_NEOPIXEL
- if (pin_number == MICROPY_HW_NEOPIXEL->number) {
- neopixel_in_use = false;
- rgb_led_status_init();
- return;
- }
- #endif
- #ifdef MICROPY_HW_APA102_MOSI
- if (pin == MICROPY_HW_APA102_MOSI->number ||
- pin == MICROPY_HW_APA102_SCK->number) {
- apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
- apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
- if (!apa102_sck_in_use && !apa102_mosi_in_use) {
- rgb_led_status_init();
- }
- return;
- }
- #endif
-
- #ifdef SPEAKER_ENABLE_PIN
- if (pin_number == SPEAKER_ENABLE_PIN->number) {
- speaker_enable_in_use = false;
- common_hal_digitalio_digitalinout_switch_to_output(
- nrf_gpio_pin_dir_set(pin_number, NRF_GPIO_PIN_DIR_OUTPUT);
- nrf_gpio_pin_write(pin_number, false);
- }
- #endif
+ claimed_pins[pin_port] &= ~(1 << pin_number);
+ // Reset the pin
+ HAL_GPIO_DeInit(ports[pin_port], (1 << pin_number));
}
-void never_reset_pin_number(uint8_t pin_number) {
- never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number);
+void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
+ never_reset_pins[pin_port] |= 1 << pin_number;
}
void claim_pin(const mcu_pin_obj_t* pin) {
// Set bit in claimed_pins bitmask.
- claimed_pins[nrf_pin_port(pin->number)] |= 1 << nrf_relative_pin_number(pin->number);
-
- #ifdef MICROPY_HW_NEOPIXEL
- if (pin == MICROPY_HW_NEOPIXEL) {
- neopixel_in_use = true;
- }
- #endif
- #ifdef MICROPY_HW_APA102_MOSI
- if (pin == MICROPY_HW_APA102_MOSI) {
- apa102_mosi_in_use = true;
- }
- if (pin == MICROPY_HW_APA102_SCK) {
- apa102_sck_in_use = true;
- }
- #endif
-
- #ifdef SPEAKER_ENABLE_PIN
- if (pin == SPEAKER_ENABLE_PIN) {
- speaker_enable_in_use = true;
- }
- #endif
+ claimed_pins[pin->port_number] |= 1 << pin->number;
}
-bool pin_number_is_free(uint8_t pin_number) {
- return !(claimed_pins[nrf_pin_port(pin_number)] & (1 << nrf_relative_pin_number(pin_number)));
+bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number) {
+ return !(claimed_pins[pin_port] & (1 << pin_number));
}
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
- #ifdef MICROPY_HW_NEOPIXEL
- if (pin == MICROPY_HW_NEOPIXEL) {
- return !neopixel_in_use;
- }
- #endif
- #ifdef MICROPY_HW_APA102_MOSI
- if (pin == MICROPY_HW_APA102_MOSI) {
- return !apa102_mosi_in_use;
- }
- if (pin == MICROPY_HW_APA102_SCK) {
- return !apa102_sck_in_use;
- }
- #endif
-
- #ifdef SPEAKER_ENABLE_PIN
- if (pin == SPEAKER_ENABLE_PIN) {
- return !speaker_enable_in_use;
- }
- #endif
-
- #ifdef NRF52840
- // If NFC pins are enabled for NFC, don't allow them to be used for GPIO.
- if (((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) ==
- (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)) &&
- (pin->number == 9 || pin->number == 10)) {
- return false;
- }
- #endif
- return pin_number_is_free(pin->number);
+ return pin_number_is_free(pin->port_number, pin->number);
}
diff --git a/ports/stm32f4/common-hal/microcontroller/Pin.h b/ports/stm32f4/common-hal/microcontroller/Pin.h
index 1e88cf20f..e5b1b9ceb 100644
--- a/ports/stm32f4/common-hal/microcontroller/Pin.h
+++ b/ports/stm32f4/common-hal/microcontroller/Pin.h
@@ -24,38 +24,19 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
-#define MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
+#ifndef MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
+#define MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
#include "py/mphal.h"
-#include "peripherals/stm32/pins.h"
-
-#ifdef MICROPY_HW_NEOPIXEL
-extern bool neopixel_in_use;
-#endif
-#ifdef MICROPY_HW_APA102_MOSI
-extern bool apa102_sck_in_use;
-extern bool apa102_mosi_in_use;
-#endif
+#include "peripherals/stm32f4/pins.h"
void reset_all_pins(void);
// reset_pin_number takes the pin number instead of the pointer so that objects don't
// need to store a full pointer.
-void reset_pin_number(uint8_t pin);
+void reset_pin_number(uint8_t pin_port, uint8_t pin);
void claim_pin(const mcu_pin_obj_t* pin);
-bool pin_number_is_free(uint8_t pin_number);
-void never_reset_pin_number(uint8_t pin_number);
-
-// Lower 5 bits of a pin number are the pin number in a port.
-// upper bits (just one bit for current chips) is port number.
-
-static inline uint8_t nrf_pin_port(uint8_t absolute_pin) {
- return absolute_pin >> 5;
-}
-
-static inline uint8_t nrf_relative_pin_number(uint8_t absolute_pin) {
- return absolute_pin & 0x1f;
-}
+bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number);
+void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number);
-#endif // MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
+#endif // MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
diff --git a/ports/stm32f4/common-hal/microcontroller/__init__.c b/ports/stm32f4/common-hal/microcontroller/__init__.c
index ab7b5d5d6..871caa018 100644
--- a/ports/stm32f4/common-hal/microcontroller/__init__.c
+++ b/ports/stm32f4/common-hal/microcontroller/__init__.c
@@ -37,12 +37,11 @@
#include "shared-bindings/microcontroller/Processor.h"
#include "supervisor/filesystem.h"
-#include "nrfx_glue.h"
// This routine should work even when interrupts are disabled. Used by OneWire
// for precise timing.
void common_hal_mcu_delay_us(uint32_t delay) {
- NRFX_DELAY_US(delay);
+ //NRFX_DELAY_US(delay);
}
void common_hal_mcu_disable_interrupts() {
@@ -56,8 +55,8 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
}
void common_hal_mcu_reset(void) {
- filesystem_flush();
- NVIC_SystemReset();
+ // filesystem_flush();
+ // NVIC_SystemReset();
}
// The singleton microcontroller.Processor object, bound to microcontroller.cpu
@@ -78,55 +77,115 @@ const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
#endif
STATIC const mp_rom_map_elem_t mcu_pin_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR_P0_00), MP_ROM_PTR(&pin_P0_00) },
- { MP_ROM_QSTR(MP_QSTR_P0_01), MP_ROM_PTR(&pin_P0_01) },
- { MP_ROM_QSTR(MP_QSTR_P0_02), MP_ROM_PTR(&pin_P0_02) },
- { MP_ROM_QSTR(MP_QSTR_P0_03), MP_ROM_PTR(&pin_P0_03) },
- { MP_ROM_QSTR(MP_QSTR_P0_04), MP_ROM_PTR(&pin_P0_04) },
- { MP_ROM_QSTR(MP_QSTR_P0_05), MP_ROM_PTR(&pin_P0_05) },
- { MP_ROM_QSTR(MP_QSTR_P0_06), MP_ROM_PTR(&pin_P0_06) },
- { MP_ROM_QSTR(MP_QSTR_P0_07), MP_ROM_PTR(&pin_P0_07) },
- { MP_ROM_QSTR(MP_QSTR_P0_08), MP_ROM_PTR(&pin_P0_08) },
- { MP_ROM_QSTR(MP_QSTR_P0_09), MP_ROM_PTR(&pin_P0_09) },
- { MP_ROM_QSTR(MP_QSTR_P0_10), MP_ROM_PTR(&pin_P0_10) },
- { MP_ROM_QSTR(MP_QSTR_P0_11), MP_ROM_PTR(&pin_P0_11) },
- { MP_ROM_QSTR(MP_QSTR_P0_12), MP_ROM_PTR(&pin_P0_12) },
- { MP_ROM_QSTR(MP_QSTR_P0_13), MP_ROM_PTR(&pin_P0_13) },
- { MP_ROM_QSTR(MP_QSTR_P0_14), MP_ROM_PTR(&pin_P0_14) },
- { MP_ROM_QSTR(MP_QSTR_P0_15), MP_ROM_PTR(&pin_P0_15) },
- { MP_ROM_QSTR(MP_QSTR_P0_16), MP_ROM_PTR(&pin_P0_16) },
- { MP_ROM_QSTR(MP_QSTR_P0_17), MP_ROM_PTR(&pin_P0_17) },
- { MP_ROM_QSTR(MP_QSTR_P0_18), MP_ROM_PTR(&pin_P0_18) },
- { MP_ROM_QSTR(MP_QSTR_P0_19), MP_ROM_PTR(&pin_P0_19) },
- { MP_ROM_QSTR(MP_QSTR_P0_20), MP_ROM_PTR(&pin_P0_20) },
- { MP_ROM_QSTR(MP_QSTR_P0_21), MP_ROM_PTR(&pin_P0_21) },
- { MP_ROM_QSTR(MP_QSTR_P0_22), MP_ROM_PTR(&pin_P0_22) },
- { MP_ROM_QSTR(MP_QSTR_P0_23), MP_ROM_PTR(&pin_P0_23) },
- { MP_ROM_QSTR(MP_QSTR_P0_24), MP_ROM_PTR(&pin_P0_24) },
- { MP_ROM_QSTR(MP_QSTR_P0_25), MP_ROM_PTR(&pin_P0_25) },
- { MP_ROM_QSTR(MP_QSTR_P0_26), MP_ROM_PTR(&pin_P0_26) },
- { MP_ROM_QSTR(MP_QSTR_P0_27), MP_ROM_PTR(&pin_P0_27) },
- { MP_ROM_QSTR(MP_QSTR_P0_28), MP_ROM_PTR(&pin_P0_28) },
- { MP_ROM_QSTR(MP_QSTR_P0_29), MP_ROM_PTR(&pin_P0_29) },
- { MP_ROM_QSTR(MP_QSTR_P0_30), MP_ROM_PTR(&pin_P0_30) },
- { MP_ROM_QSTR(MP_QSTR_P0_31), MP_ROM_PTR(&pin_P0_31) },
-#ifdef NRF52840
- { MP_ROM_QSTR(MP_QSTR_P1_00), MP_ROM_PTR(&pin_P1_00) },
- { MP_ROM_QSTR(MP_QSTR_P1_01), MP_ROM_PTR(&pin_P1_01) },
- { MP_ROM_QSTR(MP_QSTR_P1_02), MP_ROM_PTR(&pin_P1_02) },
- { MP_ROM_QSTR(MP_QSTR_P1_03), MP_ROM_PTR(&pin_P1_03) },
- { MP_ROM_QSTR(MP_QSTR_P1_04), MP_ROM_PTR(&pin_P1_04) },
- { MP_ROM_QSTR(MP_QSTR_P1_05), MP_ROM_PTR(&pin_P1_05) },
- { MP_ROM_QSTR(MP_QSTR_P1_06), MP_ROM_PTR(&pin_P1_06) },
- { MP_ROM_QSTR(MP_QSTR_P1_07), MP_ROM_PTR(&pin_P1_07) },
- { MP_ROM_QSTR(MP_QSTR_P1_08), MP_ROM_PTR(&pin_P1_08) },
- { MP_ROM_QSTR(MP_QSTR_P1_09), MP_ROM_PTR(&pin_P1_09) },
- { MP_ROM_QSTR(MP_QSTR_P1_10), MP_ROM_PTR(&pin_P1_10) },
- { MP_ROM_QSTR(MP_QSTR_P1_11), MP_ROM_PTR(&pin_P1_11) },
- { MP_ROM_QSTR(MP_QSTR_P1_12), MP_ROM_PTR(&pin_P1_12) },
- { MP_ROM_QSTR(MP_QSTR_P1_13), MP_ROM_PTR(&pin_P1_13) },
- { MP_ROM_QSTR(MP_QSTR_P1_14), MP_ROM_PTR(&pin_P1_14) },
- { MP_ROM_QSTR(MP_QSTR_P1_15), MP_ROM_PTR(&pin_P1_15) },
-#endif
+ { MP_ROM_QSTR(MP_QSTR_PE02), MP_ROM_PTR(&pin_PE02) },
+ { MP_ROM_QSTR(MP_QSTR_PE03), MP_ROM_PTR(&pin_PE03) },
+ { MP_ROM_QSTR(MP_QSTR_PE04), MP_ROM_PTR(&pin_PE04) },
+ { MP_ROM_QSTR(MP_QSTR_PE05), MP_ROM_PTR(&pin_PE05) },
+ { MP_ROM_QSTR(MP_QSTR_PE06), MP_ROM_PTR(&pin_PE06) },
+ { MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13) },
+ { MP_ROM_QSTR(MP_QSTR_PF00), MP_ROM_PTR(&pin_PF00) },
+ { MP_ROM_QSTR(MP_QSTR_PF01), MP_ROM_PTR(&pin_PF01) },
+ { MP_ROM_QSTR(MP_QSTR_PF02), MP_ROM_PTR(&pin_PF02) },
+ { MP_ROM_QSTR(MP_QSTR_PF03), MP_ROM_PTR(&pin_PF03) },
+ { MP_ROM_QSTR(MP_QSTR_PF04), MP_ROM_PTR(&pin_PF04) },
+ { MP_ROM_QSTR(MP_QSTR_PF05), MP_ROM_PTR(&pin_PF05) },
+ { MP_ROM_QSTR(MP_QSTR_PF06), MP_ROM_PTR(&pin_PF06) },
+ { MP_ROM_QSTR(MP_QSTR_PF07), MP_ROM_PTR(&pin_PF07) },
+ { MP_ROM_QSTR(MP_QSTR_PF08), MP_ROM_PTR(&pin_PF08) },
+ { MP_ROM_QSTR(MP_QSTR_PF09), MP_ROM_PTR(&pin_PF09) },
+ { MP_ROM_QSTR(MP_QSTR_PF10), MP_ROM_PTR(&pin_PF10) },
+ { MP_ROM_QSTR(MP_QSTR_PC00), MP_ROM_PTR(&pin_PC00) },
+ { MP_ROM_QSTR(MP_QSTR_PC01), MP_ROM_PTR(&pin_PC01) },
+ { MP_ROM_QSTR(MP_QSTR_PC02), MP_ROM_PTR(&pin_PC02) },
+ { MP_ROM_QSTR(MP_QSTR_PC03), MP_ROM_PTR(&pin_PC03) },
+ { MP_ROM_QSTR(MP_QSTR_PA00), MP_ROM_PTR(&pin_PA00) },
+ { MP_ROM_QSTR(MP_QSTR_PA01), MP_ROM_PTR(&pin_PA01) },
+ { MP_ROM_QSTR(MP_QSTR_PA02), MP_ROM_PTR(&pin_PA02) },
+ { MP_ROM_QSTR(MP_QSTR_PA03), MP_ROM_PTR(&pin_PA03) },
+ { MP_ROM_QSTR(MP_QSTR_PA04), MP_ROM_PTR(&pin_PA04) },
+ { MP_ROM_QSTR(MP_QSTR_PA05), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR_PA06), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_PA07), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR_PC04), MP_ROM_PTR(&pin_PC04) },
+ { MP_ROM_QSTR(MP_QSTR_PC05), MP_ROM_PTR(&pin_PC05) },
+ { MP_ROM_QSTR(MP_QSTR_PB00), MP_ROM_PTR(&pin_PB00) },
+ { MP_ROM_QSTR(MP_QSTR_PB01), MP_ROM_PTR(&pin_PB01) },
+ { MP_ROM_QSTR(MP_QSTR_PB02), MP_ROM_PTR(&pin_PB02) },
+ { MP_ROM_QSTR(MP_QSTR_PF11), MP_ROM_PTR(&pin_PF11) },
+ { MP_ROM_QSTR(MP_QSTR_PF12), MP_ROM_PTR(&pin_PF12) },
+ { MP_ROM_QSTR(MP_QSTR_PF13), MP_ROM_PTR(&pin_PF13) },
+ { MP_ROM_QSTR(MP_QSTR_PF14), MP_ROM_PTR(&pin_PF14) },
+ { MP_ROM_QSTR(MP_QSTR_PF15), MP_ROM_PTR(&pin_PF15) },
+ { MP_ROM_QSTR(MP_QSTR_PG00), MP_ROM_PTR(&pin_PG00) },
+ { MP_ROM_QSTR(MP_QSTR_PG01), MP_ROM_PTR(&pin_PG01) },
+ { MP_ROM_QSTR(MP_QSTR_PE07), MP_ROM_PTR(&pin_PE07) },
+ { MP_ROM_QSTR(MP_QSTR_PE08), MP_ROM_PTR(&pin_PE08) },
+ { MP_ROM_QSTR(MP_QSTR_PE09), MP_ROM_PTR(&pin_PE09) },
+ { MP_ROM_QSTR(MP_QSTR_PE10), MP_ROM_PTR(&pin_PE10) },
+ { MP_ROM_QSTR(MP_QSTR_PE11), MP_ROM_PTR(&pin_PE11) },
+ { MP_ROM_QSTR(MP_QSTR_PE12), MP_ROM_PTR(&pin_PE12) },
+ { MP_ROM_QSTR(MP_QSTR_PE13), MP_ROM_PTR(&pin_PE13) },
+ { MP_ROM_QSTR(MP_QSTR_PE14), MP_ROM_PTR(&pin_PE14) },
+ { MP_ROM_QSTR(MP_QSTR_PE15), MP_ROM_PTR(&pin_PE15) },
+ { MP_ROM_QSTR(MP_QSTR_PB10), MP_ROM_PTR(&pin_PB10) },
+ { MP_ROM_QSTR(MP_QSTR_PB11), MP_ROM_PTR(&pin_PB11) },
+ { MP_ROM_QSTR(MP_QSTR_PB12), MP_ROM_PTR(&pin_PB12) },
+ { MP_ROM_QSTR(MP_QSTR_PB13), MP_ROM_PTR(&pin_PB13) },
+ { MP_ROM_QSTR(MP_QSTR_PB14), MP_ROM_PTR(&pin_PB14) },
+ { MP_ROM_QSTR(MP_QSTR_PB15), MP_ROM_PTR(&pin_PB15) },
+ { MP_ROM_QSTR(MP_QSTR_PD08), MP_ROM_PTR(&pin_PD08) },
+ { MP_ROM_QSTR(MP_QSTR_PD09), MP_ROM_PTR(&pin_PD09) },
+ { MP_ROM_QSTR(MP_QSTR_PD10), MP_ROM_PTR(&pin_PD10) },
+ { MP_ROM_QSTR(MP_QSTR_PD11), MP_ROM_PTR(&pin_PD11) },
+ { MP_ROM_QSTR(MP_QSTR_PD12), MP_ROM_PTR(&pin_PD12) },
+ { MP_ROM_QSTR(MP_QSTR_PD13), MP_ROM_PTR(&pin_PD13) },
+ { MP_ROM_QSTR(MP_QSTR_PD14), MP_ROM_PTR(&pin_PD14) },
+ { MP_ROM_QSTR(MP_QSTR_PD15), MP_ROM_PTR(&pin_PD15) },
+ { MP_ROM_QSTR(MP_QSTR_PG02), MP_ROM_PTR(&pin_PG02) },
+ { MP_ROM_QSTR(MP_QSTR_PG03), MP_ROM_PTR(&pin_PG03) },
+ { MP_ROM_QSTR(MP_QSTR_PG04), MP_ROM_PTR(&pin_PG04) },
+ { MP_ROM_QSTR(MP_QSTR_PG05), MP_ROM_PTR(&pin_PG05) },
+ { MP_ROM_QSTR(MP_QSTR_PG06), MP_ROM_PTR(&pin_PG06) },
+ { MP_ROM_QSTR(MP_QSTR_PG07), MP_ROM_PTR(&pin_PG07) },
+ { MP_ROM_QSTR(MP_QSTR_PG08), MP_ROM_PTR(&pin_PG08) },
+ { MP_ROM_QSTR(MP_QSTR_PC06), MP_ROM_PTR(&pin_PC06) },
+ { MP_ROM_QSTR(MP_QSTR_PC07), MP_ROM_PTR(&pin_PC07) },
+ { MP_ROM_QSTR(MP_QSTR_PC08), MP_ROM_PTR(&pin_PC08) },
+ { MP_ROM_QSTR(MP_QSTR_PC09), MP_ROM_PTR(&pin_PC09) },
+ { MP_ROM_QSTR(MP_QSTR_PA08), MP_ROM_PTR(&pin_PA08) },
+ { MP_ROM_QSTR(MP_QSTR_PA09), MP_ROM_PTR(&pin_PA09) },
+ { MP_ROM_QSTR(MP_QSTR_PA10), MP_ROM_PTR(&pin_PA10) },
+ { MP_ROM_QSTR(MP_QSTR_PA11), MP_ROM_PTR(&pin_PA11) },
+ { MP_ROM_QSTR(MP_QSTR_PA12), MP_ROM_PTR(&pin_PA12) },
+ { MP_ROM_QSTR(MP_QSTR_PA13), MP_ROM_PTR(&pin_PA13) },
+ { MP_ROM_QSTR(MP_QSTR_PA14), MP_ROM_PTR(&pin_PA14) },
+ { MP_ROM_QSTR(MP_QSTR_PA15), MP_ROM_PTR(&pin_PA15) },
+ { MP_ROM_QSTR(MP_QSTR_PC10), MP_ROM_PTR(&pin_PC10) },
+ { MP_ROM_QSTR(MP_QSTR_PC11), MP_ROM_PTR(&pin_PC11) },
+ { MP_ROM_QSTR(MP_QSTR_PC12), MP_ROM_PTR(&pin_PC12) },
+ { MP_ROM_QSTR(MP_QSTR_PD00), MP_ROM_PTR(&pin_PD00) },
+ { MP_ROM_QSTR(MP_QSTR_PD01), MP_ROM_PTR(&pin_PD01) },
+ { MP_ROM_QSTR(MP_QSTR_PD02), MP_ROM_PTR(&pin_PD02) },
+ { MP_ROM_QSTR(MP_QSTR_PD03), MP_ROM_PTR(&pin_PD03) },
+ { MP_ROM_QSTR(MP_QSTR_PD04), MP_ROM_PTR(&pin_PD04) },
+ { MP_ROM_QSTR(MP_QSTR_PD05), MP_ROM_PTR(&pin_PD05) },
+ { MP_ROM_QSTR(MP_QSTR_PD06), MP_ROM_PTR(&pin_PD06) },
+ { MP_ROM_QSTR(MP_QSTR_PD07), MP_ROM_PTR(&pin_PD07) },
+ { MP_ROM_QSTR(MP_QSTR_PG09), MP_ROM_PTR(&pin_PG09) },
+ { MP_ROM_QSTR(MP_QSTR_PG10), MP_ROM_PTR(&pin_PG10) },
+ { MP_ROM_QSTR(MP_QSTR_PG11), MP_ROM_PTR(&pin_PG11) },
+ { MP_ROM_QSTR(MP_QSTR_PG12), MP_ROM_PTR(&pin_PG12) },
+ { MP_ROM_QSTR(MP_QSTR_PG13), MP_ROM_PTR(&pin_PG13) },
+ { MP_ROM_QSTR(MP_QSTR_PG14), MP_ROM_PTR(&pin_PG14) },
+ { MP_ROM_QSTR(MP_QSTR_PG15), MP_ROM_PTR(&pin_PG15) },
+ { MP_ROM_QSTR(MP_QSTR_PB03), MP_ROM_PTR(&pin_PB03) },
+ { MP_ROM_QSTR(MP_QSTR_PB04), MP_ROM_PTR(&pin_PB04) },
+ { MP_ROM_QSTR(MP_QSTR_PB05), MP_ROM_PTR(&pin_PB05) },
+ { MP_ROM_QSTR(MP_QSTR_PB06), MP_ROM_PTR(&pin_PB06) },
+ { MP_ROM_QSTR(MP_QSTR_PB07), MP_ROM_PTR(&pin_PB07) },
+ { MP_ROM_QSTR(MP_QSTR_PB08), MP_ROM_PTR(&pin_PB08) },
+ { MP_ROM_QSTR(MP_QSTR_PB09), MP_ROM_PTR(&pin_PB09) },
+ { MP_ROM_QSTR(MP_QSTR_PE00), MP_ROM_PTR(&pin_PE00) },
+ { MP_ROM_QSTR(MP_QSTR_PE01), MP_ROM_PTR(&pin_PE01) },
};
MP_DEFINE_CONST_DICT(mcu_pin_globals, mcu_pin_globals_table);
diff --git a/ports/stm32f4/mpconfigport.mk b/ports/stm32f4/mpconfigport.mk
index aec0996be..de8cec321 100644
--- a/ports/stm32f4/mpconfigport.mk
+++ b/ports/stm32f4/mpconfigport.mk
@@ -34,16 +34,16 @@ CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_AUDIOIO = 0
CIRCUITPY_BITBANGIO = 0
CIRCUITPY_BLEIO = 0
-CIRCUITPY_BOARD = 0
+CIRCUITPY_BOARD = 1
CIRCUITPY_BUSIO = 0
-CIRCUITPY_DIGITALIO = 0
+CIRCUITPY_DIGITALIO = 1
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_GAMEPAD = 0
CIRCUITPY_GAMEPADSHIFT = 0
CIRCUITPY_I2CSLAVE = 0
CIRCUITPY_MATH = 0
-CIRCUITPY_MICROCONTROLLER = 0
+CIRCUITPY_MICROCONTROLLER = 1
CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_NETWORK = 0
CIRCUITPY_NVM = 0
diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c b/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c
deleted file mode 100644
index 070758a79..000000000
--- a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 Dan Halbert 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 "stm32/pins.h"
-
-const mcu_pin_obj_t pin_P0_00 = PIN(P0_00, 0, 0, 0);
-const mcu_pin_obj_t pin_P0_01 = PIN(P0_01, 0, 1, 0);
-const mcu_pin_obj_t pin_P0_02 = PIN(P0_02, 0, 2, 0);
-const mcu_pin_obj_t pin_P0_03 = PIN(P0_03, 0, 3, 0);
-const mcu_pin_obj_t pin_P0_04 = PIN(P0_04, 0, 4, 0);
-const mcu_pin_obj_t pin_P0_05 = PIN(P0_05, 0, 5, 0);
-const mcu_pin_obj_t pin_P0_06 = PIN(P0_06, 0, 6, 0);
-const mcu_pin_obj_t pin_P0_07 = PIN(P0_07, 0, 7, 0);
-const mcu_pin_obj_t pin_P0_08 = PIN(P0_08, 0, 8, 0);
-const mcu_pin_obj_t pin_P0_09 = PIN(P0_09, 0, 9, 0);
-const mcu_pin_obj_t pin_P0_10 = PIN(P0_10, 0, 10, 0);
-const mcu_pin_obj_t pin_P0_11 = PIN(P0_11, 0, 11, 0);
-const mcu_pin_obj_t pin_P0_12 = PIN(P0_12, 0, 12, 0);
-const mcu_pin_obj_t pin_P0_13 = PIN(P0_13, 0, 13, 0);
-const mcu_pin_obj_t pin_P0_14 = PIN(P0_14, 0, 14, 0);
-const mcu_pin_obj_t pin_P0_15 = PIN(P0_15, 0, 15, 0);
-const mcu_pin_obj_t pin_P0_16 = PIN(P0_16, 0, 16, 0);
-const mcu_pin_obj_t pin_P0_17 = PIN(P0_17, 0, 17, 0);
-const mcu_pin_obj_t pin_P0_18 = PIN(P0_18, 0, 18, 0);
-const mcu_pin_obj_t pin_P0_19 = PIN(P0_19, 0, 19, 0);
-const mcu_pin_obj_t pin_P0_20 = PIN(P0_20, 0, 20, 0);
-const mcu_pin_obj_t pin_P0_21 = PIN(P0_21, 0, 21, 0);
-const mcu_pin_obj_t pin_P0_22 = PIN(P0_22, 0, 22, 0);
-const mcu_pin_obj_t pin_P0_23 = PIN(P0_23, 0, 23, 0);
-const mcu_pin_obj_t pin_P0_24 = PIN(P0_24, 0, 24, 0);
-const mcu_pin_obj_t pin_P0_25 = PIN(P0_25, 0, 25, 0);
-const mcu_pin_obj_t pin_P0_26 = PIN(P0_26, 0, 26, 0);
-const mcu_pin_obj_t pin_P0_27 = PIN(P0_27, 0, 27, 0);
-const mcu_pin_obj_t pin_P0_28 = PIN(P0_28, 0, 28, 0);
-const mcu_pin_obj_t pin_P0_29 = PIN(P0_29, 0, 29, 0);
-const mcu_pin_obj_t pin_P0_30 = PIN(P0_30, 0, 30, 0);
-const mcu_pin_obj_t pin_P0_31 = PIN(P0_31, 0, 31, 0);
-const mcu_pin_obj_t pin_P1_00 = PIN(P1_00, 1, 0, 0);
-const mcu_pin_obj_t pin_P1_01 = PIN(P1_01, 1, 1, 0);
-const mcu_pin_obj_t pin_P1_02 = PIN(P1_02, 1, 2, 0);
-const mcu_pin_obj_t pin_P1_03 = PIN(P1_03, 1, 3, 0);
-const mcu_pin_obj_t pin_P1_04 = PIN(P1_04, 1, 4, 0);
-const mcu_pin_obj_t pin_P1_05 = PIN(P1_05, 1, 5, 0);
-const mcu_pin_obj_t pin_P1_06 = PIN(P1_06, 1, 6, 0);
-const mcu_pin_obj_t pin_P1_07 = PIN(P1_07, 1, 7, 0);
-const mcu_pin_obj_t pin_P1_08 = PIN(P1_08, 1, 8, 0);
-const mcu_pin_obj_t pin_P1_09 = PIN(P1_09, 1, 9, 0);
-const mcu_pin_obj_t pin_P1_10 = PIN(P1_10, 1, 10, 0);
-const mcu_pin_obj_t pin_P1_11 = PIN(P1_11, 1, 11, 0);
-const mcu_pin_obj_t pin_P1_12 = PIN(P1_12, 1, 12, 0);
-const mcu_pin_obj_t pin_P1_13 = PIN(P1_13, 1, 13, 0);
-const mcu_pin_obj_t pin_P1_14 = PIN(P1_14, 1, 14, 0);
-const mcu_pin_obj_t pin_P1_15 = PIN(P1_15, 1, 15, 0);
diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h b/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h
deleted file mode 100644
index 3ad72ff63..000000000
--- a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 by Dan Halbert 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_NRF_PERIPHERALS_NRF52840_PINS_H
-#define MICROPY_INCLUDED_NRF_PERIPHERALS_NRF52840_PINS_H
-
-extern const mcu_pin_obj_t pin_P0_00;
-extern const mcu_pin_obj_t pin_P0_01;
-extern const mcu_pin_obj_t pin_P0_02;
-extern const mcu_pin_obj_t pin_P0_03;
-extern const mcu_pin_obj_t pin_P0_04;
-extern const mcu_pin_obj_t pin_P0_05;
-extern const mcu_pin_obj_t pin_P0_06;
-extern const mcu_pin_obj_t pin_P0_07;
-extern const mcu_pin_obj_t pin_P0_08;
-extern const mcu_pin_obj_t pin_P0_09;
-extern const mcu_pin_obj_t pin_P0_10;
-extern const mcu_pin_obj_t pin_P0_11;
-extern const mcu_pin_obj_t pin_P0_12;
-extern const mcu_pin_obj_t pin_P0_13;
-extern const mcu_pin_obj_t pin_P0_14;
-extern const mcu_pin_obj_t pin_P0_15;
-extern const mcu_pin_obj_t pin_P0_16;
-extern const mcu_pin_obj_t pin_P0_17;
-extern const mcu_pin_obj_t pin_P0_18;
-extern const mcu_pin_obj_t pin_P0_19;
-extern const mcu_pin_obj_t pin_P0_20;
-extern const mcu_pin_obj_t pin_P0_21;
-extern const mcu_pin_obj_t pin_P0_22;
-extern const mcu_pin_obj_t pin_P0_23;
-extern const mcu_pin_obj_t pin_P0_24;
-extern const mcu_pin_obj_t pin_P0_25;
-extern const mcu_pin_obj_t pin_P0_26;
-extern const mcu_pin_obj_t pin_P0_27;
-extern const mcu_pin_obj_t pin_P0_28;
-extern const mcu_pin_obj_t pin_P0_29;
-extern const mcu_pin_obj_t pin_P0_30;
-extern const mcu_pin_obj_t pin_P0_31;
-extern const mcu_pin_obj_t pin_P1_00;
-extern const mcu_pin_obj_t pin_P1_01;
-extern const mcu_pin_obj_t pin_P1_02;
-extern const mcu_pin_obj_t pin_P1_03;
-extern const mcu_pin_obj_t pin_P1_04;
-extern const mcu_pin_obj_t pin_P1_05;
-extern const mcu_pin_obj_t pin_P1_06;
-extern const mcu_pin_obj_t pin_P1_07;
-extern const mcu_pin_obj_t pin_P1_08;
-extern const mcu_pin_obj_t pin_P1_09;
-extern const mcu_pin_obj_t pin_P1_10;
-extern const mcu_pin_obj_t pin_P1_11;
-extern const mcu_pin_obj_t pin_P1_12;
-extern const mcu_pin_obj_t pin_P1_13;
-extern const mcu_pin_obj_t pin_P1_14;
-extern const mcu_pin_obj_t pin_P1_15;
-
-#endif // MICROPY_INCLUDED_NRF_PERIPHERALS_NRF52840_PINS_H
diff --git a/ports/stm32f4/peripherals/stm32/cache.c b/ports/stm32f4/peripherals/stm32f4/cache.c
index 02e11c461..02e11c461 100644
--- a/ports/stm32f4/peripherals/stm32/cache.c
+++ b/ports/stm32f4/peripherals/stm32f4/cache.c
diff --git a/ports/stm32f4/peripherals/stm32/cache.h b/ports/stm32f4/peripherals/stm32f4/cache.h
index d9ba63f3d..d9ba63f3d 100644
--- a/ports/stm32f4/peripherals/stm32/cache.h
+++ b/ports/stm32f4/peripherals/stm32f4/cache.h
diff --git a/ports/stm32f4/peripherals/stm32/clocks.c b/ports/stm32f4/peripherals/stm32f4/clocks.c
index 4acb878db..4acb878db 100644
--- a/ports/stm32f4/peripherals/stm32/clocks.c
+++ b/ports/stm32f4/peripherals/stm32f4/clocks.c
diff --git a/ports/stm32f4/peripherals/stm32/clocks.h b/ports/stm32f4/peripherals/stm32f4/clocks.h
index e815d849f..e815d849f 100644
--- a/ports/stm32f4/peripherals/stm32/clocks.h
+++ b/ports/stm32f4/peripherals/stm32f4/clocks.h
diff --git a/ports/stm32f4/peripherals/stm32/nvm.c b/ports/stm32f4/peripherals/stm32f4/nvm.c
index d8fddc4dc..d8fddc4dc 100644
--- a/ports/stm32f4/peripherals/stm32/nvm.c
+++ b/ports/stm32f4/peripherals/stm32f4/nvm.c
diff --git a/ports/stm32f4/peripherals/stm32/nvm.h b/ports/stm32f4/peripherals/stm32f4/nvm.h
index 4eac3d728..4eac3d728 100644
--- a/ports/stm32f4/peripherals/stm32/nvm.h
+++ b/ports/stm32f4/peripherals/stm32f4/nvm.h
diff --git a/ports/stm32f4/peripherals/stm32/pins.h b/ports/stm32f4/peripherals/stm32f4/pins.h
index db63b54ec..0a8a0c3dc 100644
--- a/ports/stm32f4/peripherals/stm32/pins.h
+++ b/ports/stm32f4/peripherals/stm32f4/pins.h
@@ -27,38 +27,46 @@
// 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_NRF_PERIPHERALS_PINS_H__
-#define __MICROPY_INCLUDED_NRF_PERIPHERALS_PINS_H__
+#ifndef __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
+#define __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
#include <stdint.h>
#include <stdbool.h>
-//#include "nrf_gpio.h"
+#include "stm32f4xx_hal.h"
typedef struct {
mp_obj_base_t base;
- // These could be squeezed to fewer bits if more fields are needed.
- uint8_t number; // port << 5 | pin number in port (0-31): 6 bits needed
- uint8_t adc_channel; // 0 is no ADC, ADC channel from 1 to 8:
- // 4 bits needed here; 5 bits used in periph registers
+ //uint8_t number; //(3)port,(5)pin
+ uint8_t port_number;
+ GPIO_TypeDef * port;
+ uint8_t number;
} mcu_pin_obj_t;
+// extern GPIO_TypeDef *port_lookup_table[];
+
+// static inline GPIO_TypeDef * get_GPIO_ptr(const mcu_pin_obj_t *p)
+// {
+// return port_lookup_table[0x7&( (p->number) >> 5)];
+// }
+
extern const mp_obj_type_t mcu_pin_type;
// Used in device-specific pins.c
-#define PIN(p_name, p_port, p_pin, p_adc_channel) \
+#define PIN(p_port_num, p_port, p_number) \
{ \
{ &mcu_pin_type }, \
- .number = NRF_GPIO_PIN_MAP(p_port, p_pin), \
- .adc_channel = (p_adc_channel), \
+ .port_number = (p_port_num), \
+ .port = (p_port), \
+ .number = (p_number), \
}
// Use illegal pin value to mark unassigned pins.
#define NO_PIN 0xff
-// Choose based on chip, but not specifically revision (e.g., not NRF52840_XXAA)
-#ifdef NRF52840
-#include "nrf52840/pins.h"
-#endif
+// Choose based on chip
+//#ifdef STM32F412ZG
+#include "stm32f412zg/pins.h"
+//#endif
-#endif // __MICROPY_INCLUDED_NRF_PERIPHERALS_PINS_H__
+#endif // __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
diff --git a/ports/stm32f4/peripherals/stm32/power.h b/ports/stm32f4/peripherals/stm32f4/power.h
index c3744618c..c3744618c 100644
--- a/ports/stm32f4/peripherals/stm32/power.h
+++ b/ports/stm32f4/peripherals/stm32f4/power.h
diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c
new file mode 100644
index 000000000..0a30845cf
--- /dev/null
+++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c
@@ -0,0 +1,159 @@
+ /*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2018 Dan Halbert 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 "stm32f4/pins.h"
+
+const mcu_pin_obj_t pin_PE02 = PIN(4, GPIOE, 2);
+const mcu_pin_obj_t pin_PE03 = PIN(4, GPIOE, 3);
+const mcu_pin_obj_t pin_PE04 = PIN(4, GPIOE, 4);
+const mcu_pin_obj_t pin_PE05 = PIN(4, GPIOE, 5);
+const mcu_pin_obj_t pin_PE06 = PIN(4, GPIOE, 6);
+
+const mcu_pin_obj_t pin_PC13 = PIN(2, GPIOC, 13);
+
+const mcu_pin_obj_t pin_PF00 = PIN(5, GPIOF, 0); // 144 only
+const mcu_pin_obj_t pin_PF01 = PIN(5, GPIOF, 1); // 144 only
+const mcu_pin_obj_t pin_PF02 = PIN(5, GPIOF, 2); // 144 only
+const mcu_pin_obj_t pin_PF03 = PIN(5, GPIOF, 3); // 144 only
+const mcu_pin_obj_t pin_PF04 = PIN(5, GPIOF, 4); // 144 only
+const mcu_pin_obj_t pin_PF05 = PIN(5, GPIOF, 5); // 144 only
+const mcu_pin_obj_t pin_PF06 = PIN(5, GPIOF, 6); // 144 only
+const mcu_pin_obj_t pin_PF07 = PIN(5, GPIOF, 7); // 144 only
+const mcu_pin_obj_t pin_PF08 = PIN(5, GPIOF, 8); // 144 only
+const mcu_pin_obj_t pin_PF09 = PIN(5, GPIOF, 9); // 144 only
+const mcu_pin_obj_t pin_PF10 = PIN(5, GPIOF, 10); // 144 only
+
+const mcu_pin_obj_t pin_PC00 = PIN(2, GPIOC, 0);
+const mcu_pin_obj_t pin_PC01 = PIN(2, GPIOC, 1);
+const mcu_pin_obj_t pin_PC02 = PIN(2, GPIOC, 2);
+const mcu_pin_obj_t pin_PC03 = PIN(2, GPIOC, 3);
+
+const mcu_pin_obj_t pin_PA00 = PIN(0, GPIOA, 0);
+const mcu_pin_obj_t pin_PA01 = PIN(0, GPIOA, 1);
+const mcu_pin_obj_t pin_PA02 = PIN(0, GPIOA, 2);
+const mcu_pin_obj_t pin_PA03 = PIN(0, GPIOA, 3);
+const mcu_pin_obj_t pin_PA04 = PIN(0, GPIOA, 4);
+const mcu_pin_obj_t pin_PA05 = PIN(0, GPIOA, 5);
+const mcu_pin_obj_t pin_PA06 = PIN(0, GPIOA, 6);
+const mcu_pin_obj_t pin_PA07 = PIN(0, GPIOA, 7);
+
+const mcu_pin_obj_t pin_PC04 = PIN(2, GPIOC, 4);
+const mcu_pin_obj_t pin_PC05 = PIN(2, GPIOC, 5);
+
+const mcu_pin_obj_t pin_PB00 = PIN(1, GPIOB, 0);
+const mcu_pin_obj_t pin_PB01 = PIN(1, GPIOB, 1);
+const mcu_pin_obj_t pin_PB02 = PIN(1, GPIOB, 2);
+
+const mcu_pin_obj_t pin_PF11 = PIN(5, GPIOF, 11); // 144 only
+const mcu_pin_obj_t pin_PF12 = PIN(5, GPIOF, 12); // 144 only
+const mcu_pin_obj_t pin_PF13 = PIN(5, GPIOF, 13); // 144 only
+const mcu_pin_obj_t pin_PF14 = PIN(5, GPIOF, 14); // 144 only
+const mcu_pin_obj_t pin_PF15 = PIN(5, GPIOF, 15); // 144 only
+
+const mcu_pin_obj_t pin_PG00 = PIN(6, GPIOG, 0); // 144 only
+const mcu_pin_obj_t pin_PG01 = PIN(6, GPIOG, 1); // 144 only
+
+const mcu_pin_obj_t pin_PE07 = PIN(4, GPIOE, 7);
+const mcu_pin_obj_t pin_PE08 = PIN(4, GPIOE, 8);
+const mcu_pin_obj_t pin_PE09 = PIN(4, GPIOE, 9);
+const mcu_pin_obj_t pin_PE10 = PIN(4, GPIOE, 10);
+const mcu_pin_obj_t pin_PE11 = PIN(4, GPIOE, 11);
+const mcu_pin_obj_t pin_PE12 = PIN(4, GPIOE, 12);
+const mcu_pin_obj_t pin_PE13 = PIN(4, GPIOE, 13);
+const mcu_pin_obj_t pin_PE14 = PIN(4, GPIOE, 14);
+const mcu_pin_obj_t pin_PE15 = PIN(4, GPIOE, 15);
+
+const mcu_pin_obj_t pin_PB10 = PIN(1, GPIOB, 10);
+const mcu_pin_obj_t pin_PB12 = PIN(1, GPIOB, 12);
+const mcu_pin_obj_t pin_PB11 = PIN(1, GPIOB, 11); // 144 only
+const mcu_pin_obj_t pin_PB13 = PIN(1, GPIOB, 13);
+const mcu_pin_obj_t pin_PB14 = PIN(1, GPIOB, 14);
+const mcu_pin_obj_t pin_PB15 = PIN(1, GPIOB, 15);
+
+const mcu_pin_obj_t pin_PD08 = PIN(3, GPIOD, 8);
+const mcu_pin_obj_t pin_PD09 = PIN(3, GPIOD, 9);
+const mcu_pin_obj_t pin_PD10 = PIN(3, GPIOD, 10);
+const mcu_pin_obj_t pin_PD11 = PIN(3, GPIOD, 11);
+const mcu_pin_obj_t pin_PD12 = PIN(3, GPIOD, 12);
+const mcu_pin_obj_t pin_PD13 = PIN(3, GPIOD, 13);
+const mcu_pin_obj_t pin_PD14 = PIN(3, GPIOD, 14);
+const mcu_pin_obj_t pin_PD15 = PIN(3, GPIOD, 15);
+
+const mcu_pin_obj_t pin_PG02 = PIN(6, GPIOG, 2); // 144 only
+const mcu_pin_obj_t pin_PG03 = PIN(6, GPIOG, 3); // 144 only
+const mcu_pin_obj_t pin_PG04 = PIN(6, GPIOG, 4); // 144 only
+const mcu_pin_obj_t pin_PG05 = PIN(6, GPIOG, 5); // 144 only
+const mcu_pin_obj_t pin_PG06 = PIN(6, GPIOG, 6); // 144 only
+const mcu_pin_obj_t pin_PG07 = PIN(6, GPIOG, 7); // 144 only
+const mcu_pin_obj_t pin_PG08 = PIN(6, GPIOG, 8); // 144 only
+
+const mcu_pin_obj_t pin_PC06 = PIN(2, GPIOC, 6);
+const mcu_pin_obj_t pin_PC07 = PIN(2, GPIOC, 7);
+const mcu_pin_obj_t pin_PC08 = PIN(2, GPIOC, 8);
+const mcu_pin_obj_t pin_PC09 = PIN(2, GPIOC, 9);
+
+const mcu_pin_obj_t pin_PA08 = PIN(0, GPIOA, 8);
+const mcu_pin_obj_t pin_PA09 = PIN(0, GPIOA, 9);
+const mcu_pin_obj_t pin_PA10 = PIN(0, GPIOA, 10);
+const mcu_pin_obj_t pin_PA11 = PIN(0, GPIOA, 11);
+const mcu_pin_obj_t pin_PA12 = PIN(0, GPIOA, 12);
+const mcu_pin_obj_t pin_PA13 = PIN(0, GPIOA, 13);
+const mcu_pin_obj_t pin_PA14 = PIN(0, GPIOA, 14);
+const mcu_pin_obj_t pin_PA15 = PIN(0, GPIOA, 15);
+
+const mcu_pin_obj_t pin_PC10 = PIN(2, GPIOC, 10);
+const mcu_pin_obj_t pin_PC11 = PIN(2, GPIOC, 11);
+const mcu_pin_obj_t pin_PC12 = PIN(2, GPIOC, 12);
+
+const mcu_pin_obj_t pin_PD00 = PIN(3, GPIOD, 0);
+const mcu_pin_obj_t pin_PD01 = PIN(3, GPIOD, 1);
+const mcu_pin_obj_t pin_PD02 = PIN(3, GPIOD, 2);
+const mcu_pin_obj_t pin_PD03 = PIN(3, GPIOD, 3);
+const mcu_pin_obj_t pin_PD04 = PIN(3, GPIOD, 4);
+const mcu_pin_obj_t pin_PD05 = PIN(3, GPIOD, 5);
+const mcu_pin_obj_t pin_PD06 = PIN(3, GPIOD, 6);
+const mcu_pin_obj_t pin_PD07 = PIN(3, GPIOD, 7);
+
+const mcu_pin_obj_t pin_PG09 = PIN(6, GPIOG, 9); // 144 only
+const mcu_pin_obj_t pin_PG10 = PIN(6, GPIOG, 10); // 144 only
+const mcu_pin_obj_t pin_PG11 = PIN(6, GPIOG, 11); // 144 only
+const mcu_pin_obj_t pin_PG12 = PIN(6, GPIOG, 12); // 144 only
+const mcu_pin_obj_t pin_PG13 = PIN(6, GPIOG, 13); // 144 only
+const mcu_pin_obj_t pin_PG14 = PIN(6, GPIOG, 14); // 144 only
+const mcu_pin_obj_t pin_PG15 = PIN(6, GPIOG, 15); // 144 only
+
+const mcu_pin_obj_t pin_PB03 = PIN(1, GPIOB, 3);
+const mcu_pin_obj_t pin_PB04 = PIN(1, GPIOB, 4);
+const mcu_pin_obj_t pin_PB05 = PIN(1, GPIOB, 5);
+const mcu_pin_obj_t pin_PB06 = PIN(1, GPIOB, 6);
+const mcu_pin_obj_t pin_PB07 = PIN(1, GPIOB, 7);
+const mcu_pin_obj_t pin_PB08 = PIN(1, GPIOB, 8);
+const mcu_pin_obj_t pin_PB09 = PIN(1, GPIOB, 9);
+
+const mcu_pin_obj_t pin_PE00 = PIN(4, GPIOE, 0);
+const mcu_pin_obj_t pin_PE01 = PIN(4, GPIOE, 1); \ No newline at end of file
diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h
new file mode 100644
index 000000000..d526f0863
--- /dev/null
+++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h
@@ -0,0 +1,156 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2018 by Dan Halbert 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_STM32F412ZG_PINS_H
+#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_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;
+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_PC13;
+//pg 51
+extern const mcu_pin_obj_t pin_PF00; // 144 only
+extern const mcu_pin_obj_t pin_PF01; // 144 only
+extern const mcu_pin_obj_t pin_PF02; // 144 only
+extern const mcu_pin_obj_t pin_PF03; // 144 only
+extern const mcu_pin_obj_t pin_PF04; // 144 only
+extern const mcu_pin_obj_t pin_PF05; // 144 only
+extern const mcu_pin_obj_t pin_PF06; // 144 only
+extern const mcu_pin_obj_t pin_PF07; // 144 only
+extern const mcu_pin_obj_t pin_PF08; // 144 only
+extern const mcu_pin_obj_t pin_PF09; // 144 only
+extern const mcu_pin_obj_t pin_PF10; // 144 only
+//pg 52
+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_PA00;
+extern const mcu_pin_obj_t pin_PA01;
+extern const mcu_pin_obj_t pin_PA02;
+//pg 53
+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_PC04;
+//pg 54
+extern const mcu_pin_obj_t pin_PC05;
+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_PF11; // 144 only
+extern const mcu_pin_obj_t pin_PF12; // 144 only
+extern const mcu_pin_obj_t pin_PF13; // 144 only
+extern const mcu_pin_obj_t pin_PF14; // 144 only
+extern const mcu_pin_obj_t pin_PF15; // 144 only
+extern const mcu_pin_obj_t pin_PG00; // 144 only
+extern const mcu_pin_obj_t pin_PG01; // 144 only
+//pg 55
+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;
+//pg 56
+extern const mcu_pin_obj_t pin_PE15;
+extern const mcu_pin_obj_t pin_PB10;
+extern const mcu_pin_obj_t pin_PB11; // 144 only
+extern const mcu_pin_obj_t pin_PB12;
+extern const mcu_pin_obj_t pin_PB13;
+//pg 57
+extern const mcu_pin_obj_t pin_PB14;
+extern const mcu_pin_obj_t pin_PB15;
+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;
+//pg 58
+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_PG02; // 144 only
+extern const mcu_pin_obj_t pin_PG03; // 144 only
+extern const mcu_pin_obj_t pin_PG04; // 144 only
+extern const mcu_pin_obj_t pin_PG05; // 144 only
+extern const mcu_pin_obj_t pin_PG06; // 144 only
+extern const mcu_pin_obj_t pin_PG07; // 144 only
+extern const mcu_pin_obj_t pin_PG08; // 144 only
+//pg 59
+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_PA08;
+extern const mcu_pin_obj_t pin_PA09;
+extern const mcu_pin_obj_t pin_PA10;
+//pg 60
+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_PC10;
+extern const mcu_pin_obj_t pin_PC11;
+//pg 61
+extern const mcu_pin_obj_t pin_PC12;
+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;
+//pg 62
+extern const mcu_pin_obj_t pin_PG09; // 144 only
+extern const mcu_pin_obj_t pin_PG10; // 144 only
+extern const mcu_pin_obj_t pin_PG11; // 144 only
+extern const mcu_pin_obj_t pin_PG12; // 144 only
+extern const mcu_pin_obj_t pin_PG13; // 144 only
+extern const mcu_pin_obj_t pin_PG14; // 144 only
+extern const mcu_pin_obj_t pin_PG15; // 144 only
+extern const mcu_pin_obj_t pin_PB03;
+extern const mcu_pin_obj_t pin_PB04;
+//pg 63
+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_PE00;
+extern const mcu_pin_obj_t pin_PE01;
+
+#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/power.c b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c
index 9f7a9fa17..634a7f023 100644
--- a/ports/stm32f4/peripherals/stm32/stm32f411re/power.c
+++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c
@@ -24,17 +24,17 @@
* THE SOFTWARE.
*/
-#include "nrfx.h"
-#include "nrf_nvmc.h"
+// #include "nrfx.h"
+// #include "nrf_nvmc.h"
void nrf_peripherals_power_init(void) {
// Set GPIO reference voltage to 3.3V if it isn't already. REGOUT0 will get reset to 0xfffffff
// if flash is erased, which sets the default to 1.8V
// This matters only when "high voltage mode" is enabled, which is true on the PCA10059,
// and might be true on other boards.
- if (NRF_UICR->REGOUT0 == 0xffffffff) {
- nrf_nvmc_write_word((uint32_t) &NRF_UICR->REGOUT0, UICR_REGOUT0_VOUT_3V3 << UICR_REGOUT0_VOUT_Pos);
- // Must reset to make enable change.
- NVIC_SystemReset();
- }
+ // if (NRF_UICR->REGOUT0 == 0xffffffff) {
+ // nrf_nvmc_write_word((uint32_t) &NRF_UICR->REGOUT0, UICR_REGOUT0_VOUT_3V3 << UICR_REGOUT0_VOUT_Pos);
+ // // Must reset to make enable change.
+ // NVIC_SystemReset();
+ // }
}
diff --git a/ports/stm32f4/peripherals/stm32/timers.c b/ports/stm32f4/peripherals/stm32f4/timers.c
index 7f7a003d3..7f7a003d3 100644
--- a/ports/stm32f4/peripherals/stm32/timers.c
+++ b/ports/stm32f4/peripherals/stm32f4/timers.c
diff --git a/ports/stm32f4/peripherals/stm32/timers.h b/ports/stm32f4/peripherals/stm32f4/timers.h
index 7d3815579..7d3815579 100644
--- a/ports/stm32f4/peripherals/stm32/timers.h
+++ b/ports/stm32f4/peripherals/stm32f4/timers.h
diff --git a/ports/stm32f4/supervisor/serial.c b/ports/stm32f4/supervisor/serial.c
index 94dbf9c13..54977a4df 100644
--- a/ports/stm32f4/supervisor/serial.c
+++ b/ports/stm32f4/supervisor/serial.c
@@ -33,7 +33,7 @@ UART_HandleTypeDef huart2;
void serial_init(void) {
huart2.Instance = USART2;
- huart2.Init.BaudRate = 115200;
+ huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
@@ -44,7 +44,7 @@ void serial_init(void) {
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
}
- HAL_UART_Transmit(&huart2, (uint8_t*)"helloworld", 10, 5000);
+ //HAL_UART_Transmit(&huart2, (uint8_t*)"Serial On", 9, 5000);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_RESET);
}
@@ -60,7 +60,6 @@ char serial_read(void) {
bool serial_bytes_available(void) {
return __HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE);
-
}
void serial_write(const char* text) {
diff --git a/ports/stm32f4/supervisor/usb.c b/ports/stm32f4/supervisor/usb.c
index 4128f6ceb..09429a15b 100644
--- a/ports/stm32f4/supervisor/usb.c
+++ b/ports/stm32f4/supervisor/usb.c
@@ -29,57 +29,37 @@
#include "supervisor/usb.h"
#include "lib/utils/interrupt_char.h"
#include "lib/mp-readline/readline.h"
-#include "stm32f4xx.h"
+#include "stm32f4xx_hal.h"
+#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
-void init_usb_hardware(void) {
- // Init the LED on PD14
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
- GPIOD->MODER |= GPIO_MODER_MODE14_0;
-
- // USB Clock init
- // PLL input- 8 MHz (External oscillator clock; HSI clock tolerance isn't
- // tight enough- 1%, need 0.25%)
- // VCO input- 1 to 2 MHz (2 MHz, M = 4)
- // VCO output- 100 to 432 MHz (144 MHz, N = 72)
- // Main PLL out- <= 180 MHz (18 MHz, P = 3- divides by 8)
- // USB PLL out- 48 MHz (Q = 3)
- RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE | (3 << RCC_PLLCFGR_PLLQ_Pos) | \
- (3 << RCC_PLLCFGR_PLLP_Pos) | (72 << RCC_PLLCFGR_PLLN_Pos) | \
- (4 << RCC_PLLCFGR_PLLM_Pos);
-
- // Wait for external clock to become ready
- RCC->CR |= RCC_CR_HSEON;
- while(!(RCC->CR & RCC_CR_HSERDY_Msk));
-
- // Wait for PLL to become ready
- RCC->CR |= RCC_CR_PLLON;
- while(!(RCC->CR & RCC_CR_PLLRDY_Msk));
- // Switch clocks!
- RCC->CFGR |= RCC_CFGR_SW_1;
-
- // Notify runtime of frequency change.
- SystemCoreClockUpdate();
-
- #if CFG_TUSB_OS == OPT_OS_NONE
- // 1ms tick timer
- SysTick_Config(SystemCoreClock / 1000);
- #endif
-
- RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
+void init_usb_hardware(void) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**USB_OTG_FS GPIO Configuration
+ PA10 ------> USB_OTG_FS_ID
+ PA11 ------> USB_OTG_FS_DM
+ PA12 ------> USB_OTG_FS_DP
+ */
+ GPIO_InitStruct.Pin = USB_OTGFS_ID_Pin|USB_OTGFS_DM_Pin|USB_OTGFS_DP_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- // USB Pin Init
- // PA9- VUSB, PA10- ID, PA11- DM, PA12- DP
- // PC0- Power on
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- GPIOA->MODER |= GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1 | \
- GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1;
- GPIOA->AFR[1] |= (10 << GPIO_AFRH_AFSEL9_Pos) | \
- (10 << GPIO_AFRH_AFSEL10_Pos) | (10 << GPIO_AFRH_AFSEL11_Pos) | \
- (10 << GPIO_AFRH_AFSEL12_Pos);
+ /* Peripheral clock enable */
+ __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
- // Pullup required on ID, despite the manual claiming there's an
- // internal pullup already (page 1245, Rev 17)
- GPIOA->PUPDR |= GPIO_PUPDR_PUPD10_0;
+ /* Peripheral interrupt init */
+ HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
}