From 2eda5138701d6a7d36f8d8e3700d136b3c1161b7 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 15:57:02 +1000 Subject: [PATCH 01/20] py/mkrules.mk: Add rule for compiling auto-generated source files. This prevents each port Makefile from having to add an explicit rule for `build-BOARD/pins_BOARD.c`. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/cc3200/application.mk | 3 --- ports/mimxrt/Makefile | 3 --- ports/nrf/Makefile | 3 --- ports/renesas-ra/Makefile | 3 --- ports/stm32/Makefile | 3 --- py/mkrules.mk | 4 ++++ shared/memzip/README.md | 3 --- 7 files changed, 4 insertions(+), 18 deletions(-) diff --git a/ports/cc3200/application.mk b/ports/cc3200/application.mk index deee201eefaba..7a8fb8d943978 100644 --- a/ports/cc3200/application.mk +++ b/ports/cc3200/application.mk @@ -241,6 +241,3 @@ $(OBJ): | $(GEN_PINS_HDR) $(GEN_PINS_SRC) $(GEN_PINS_HDR) $(GEN_PINS_QSTR): $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) > $(GEN_PINS_SRC) - -$(BUILD)/pins.o: $(BUILD)/pins.c - $(call compile_c) diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile index 6131a509d8944..c22c5442a9d08 100644 --- a/ports/mimxrt/Makefile +++ b/ports/mimxrt/Makefile @@ -510,7 +510,4 @@ $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h: $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PR --iomux $(abspath $(TOP)/$(MCU_DIR)/drivers/fsl_iomuxc.h) \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) > $(GEN_PINS_SRC) -$(GEN_PINS_SRC:.c=.o): $(GEN_PINS_SRC) - $(call compile_c) - include $(TOP)/py/mkrules.mk diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index ac86ad2b155f0..abc1ed497d6a8 100644 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -547,9 +547,6 @@ $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qst $(ECHO) "Create $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) -$(GEN_PINS_SRC:.c=.o): $(GEN_PINS_SRC) - $(call compile_c) - $(PY_BUILD)/nlr%.o: CFLAGS += -Os -fno-lto include ../../py/mkrules.mk diff --git a/ports/renesas-ra/Makefile b/ports/renesas-ra/Makefile index fb7bb67e48ad3..943ed6d9bf6bb 100644 --- a/ports/renesas-ra/Makefile +++ b/ports/renesas-ra/Makefile @@ -586,9 +586,6 @@ $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_ $(ECHO) "GEN $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --ad-const $(GEN_PINS_AD_CONST) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) -#$(BUILD)/pins_$(BOARD).o: $(BUILD)/pins_$(BOARD).c -# $(call compile_c) - CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h include $(TOP)/py/mkrules.mk diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index d3b80ab5b1466..8d920ae95308a 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -684,9 +684,6 @@ $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_ --af-defs $(GEN_PINS_AF_DEFS) --af-defs-cmp-strings \ --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) -$(GEN_PINS_SRC:.c=.o): $(GEN_PINS_SRC) - $(call compile_c) - modmachine.c: $(GEN_PLLFREQTABLE_HDR) $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) $(ECHO) "GEN $@" diff --git a/py/mkrules.mk b/py/mkrules.mk index 8b21c7974dce9..5076559328343 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -97,6 +97,10 @@ $(BUILD)/%.pp: %.c $(ECHO) "PreProcess $<" $(Q)$(CPP) $(CFLAGS) -Wp,-C,-dD,-dI -o $@ $< +# Special case for compiling auto-generated source files. +$(BUILD)/%.o: $(BUILD)/%.c + $(call compile_c) + # The following rule uses | to create an order only prerequisite. Order only # prerequisites only get built if they don't exist. They don't cause timestamp # checking to be performed. diff --git a/shared/memzip/README.md b/shared/memzip/README.md index 3938e3198c953..6ffe1d2c6fb82 100644 --- a/shared/memzip/README.md +++ b/shared/memzip/README.md @@ -18,9 +18,6 @@ OBJ += $(BUILD)/memzip-files.o MAKE_MEMZIP = ../shared/memzip/make-memzip.py -$(BUILD)/memzip-files.o: $(BUILD)/memzip-files.c - $(call compile_c) - $(BUILD)/memzip-files.c: $(shell find ${MEMZIP_DIR} -type f) @$(ECHO) "Creating $@" $(Q)$(PYTHON) $(MAKE_MEMZIP) --zip-file $(BUILD)/memzip-files.zip --c-file $@ $(MEMZIP_DIR) From c3c7c602da724b697a71c19ebce3e49c67e760f6 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 14:41:25 +1000 Subject: [PATCH 02/20] rp2/boards/make-pins.py: Don't generate qstrs. Also remove af-const header, as this is left over from the STM32 version and unused. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/rp2/CMakeLists.txt | 5 ++- ports/rp2/boards/make-pins.py | 65 ----------------------------------- 2 files changed, 2 insertions(+), 68 deletions(-) diff --git a/ports/rp2/CMakeLists.txt b/ports/rp2/CMakeLists.txt index 16f2d8a247752..4a0d2fbad73ce 100644 --- a/ports/rp2/CMakeLists.txt +++ b/ports/rp2/CMakeLists.txt @@ -479,7 +479,6 @@ set(GEN_PINS_PREFIX "${MICROPY_BOARDS_DIR}/rp2_prefix.c") set(GEN_PINS_MKPINS "${MICROPY_BOARDS_DIR}/make-pins.py") set(GEN_PINS_SRC "${CMAKE_BINARY_DIR}/pins_${MICROPY_BOARD}.c") set(GEN_PINS_HDR "${MICROPY_GENHDR_DIR}/pins.h") -set(GEN_PINS_QSTR "${CMAKE_BINARY_DIR}/pins_qstr.h") set(GEN_PINS_AF_CONST "${MICROPY_GENHDR_DIR}/pins_af_const.h") set(GEN_PINS_AF_PY "${CMAKE_BINARY_DIR}/pins_af.py") @@ -494,9 +493,9 @@ target_sources(${MICROPY_TARGET} PRIVATE # Generate pins add_custom_command( - OUTPUT ${GEN_PINS_HDR} ${GEN_PINS_SRC} ${GEN_PINS_QSTR} + OUTPUT ${GEN_PINS_HDR} ${GEN_PINS_SRC} COMMAND ${Python3_EXECUTABLE} ${GEN_PINS_MKPINS} ${GEN_PINS_CSV_ARG} --af ${GEN_PINS_AF_CSV} --prefix ${GEN_PINS_PREFIX} - --hdr ${GEN_PINS_HDR} --qstr ${GEN_PINS_QSTR} --af-const ${GEN_PINS_AF_CONST} --af-py ${GEN_PINS_AF_PY} > ${GEN_PINS_SRC} + --hdr ${GEN_PINS_HDR} --af-py ${GEN_PINS_AF_PY} > ${GEN_PINS_SRC} DEPENDS ${GEN_PINS_AF_CSV} ${GEN_PINS_BOARD_CSV} diff --git a/ports/rp2/boards/make-pins.py b/ports/rp2/boards/make-pins.py index 97c0ff6384bb3..4029d7b1cfca7 100755 --- a/ports/rp2/boards/make-pins.py +++ b/ports/rp2/boards/make-pins.py @@ -68,15 +68,6 @@ def __init__(self, idx, af_str): def is_supported(self): return self.supported - def ptr(self): - """Returns the numbered function (i.e. USART6) for this AF.""" - if self.fn_num is None: - return self.func - return "{:s}{:d}".format(self.func, self.fn_num) - - def mux_name(self): - return "AF{:d}_{:s}".format(self.idx, self.ptr()) - def print(self): """Prints the C representation of this AF.""" if self.supported: @@ -88,9 +79,6 @@ def print(self): fn_num = 0 print("({:d}, {:4s}, {:d}), // {:s}".format(self.idx, self.func, fn_num, self.af_str)) - def qstr_list(self): - return [self.mux_name()] - class Pin(object): """Holds the information associated with a pin.""" @@ -164,13 +152,6 @@ def print_header(self, hdr_file): if self.alt_fn_count > 0: hdr_file.write("extern const machine_pin_af_obj_t pin_{:s}_af[];\n".format(n)) - def qstr_list(self): - result = [] - for alt_fn in self.alt_fn: - if alt_fn.is_supported(): - result += alt_fn.qstr_list() - return result - class NamedPin(object): def __init__(self, name, pin): @@ -303,37 +284,6 @@ def print_header(self, hdr_filename, obj_decls): ) ) - 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(pin.qstr_list()) - 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 print_af_hdr(self, af_const_filename): - with open(af_const_filename, "wt") as af_const_file: - af_hdr_set = set([]) - mux_name_width = 0 - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - for af in pin.alt_fn: - if af.is_supported(): - mux_name = af.mux_name() - af_hdr_set |= set([mux_name]) - if len(mux_name) > mux_name_width: - mux_name_width = len(mux_name) - for mux_name in sorted(af_hdr_set): - key = "MP_OBJ_NEW_QSTR(MP_QSTR_{}),".format(mux_name) - val = "MP_OBJ_NEW_SMALL_INT(GPIO_{})".format(mux_name) - print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=af_const_file) - def print_af_py(self, af_py_filename): with open(af_py_filename, "wt") as af_py_file: print("PINS_AF = (", file=af_py_file) @@ -359,12 +309,6 @@ def main(): help="Specifies the alternate function file for the chip", default="rp2_af.csv", ) - parser.add_argument( - "--af-const", - dest="af_const_filename", - help="Specifies header file for alternate function constants.", - default="build/pins_af_const.h", - ) parser.add_argument( "--af-py", dest="af_py_filename", @@ -384,13 +328,6 @@ def main(): help="Specifies beginning portion of generated pins file", default="rp2_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", @@ -419,8 +356,6 @@ def main(): print(prefix_file.read()) pins.print() pins.print_header(args.hdr_filename, True) - pins.print_qstr(args.qstr_filename) - pins.print_af_hdr(args.af_const_filename) pins.print_af_py(args.af_py_filename) From fc54d25a456359fdf044f28d2700b658e323c6e5 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 15:21:32 +1000 Subject: [PATCH 03/20] stm32/boards/make-pins.py: Don't generate qstrs. Qstrs are picked up from the generated pin source files in the usual qstr processing stage. Similarly for the stm constant qstrs. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/stm32/Makefile | 26 +++++++++------------- ports/stm32/boards/make-pins.py | 38 --------------------------------- ports/stm32/make-stmconst.py | 30 ++++++-------------------- ports/stm32/mboot/Makefile | 3 +-- 4 files changed, 17 insertions(+), 80 deletions(-) diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index 8d920ae95308a..3bb18ee3cbe48 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -25,12 +25,11 @@ include ../../py/mkenv.mk -include mpconfigport.mk include $(BOARD_DIR)/mpconfigboard.mk -# Files that are generated and needed before the QSTR build. -QSTR_GENERATED_HEADERS = $(GEN_PINS_QSTR) $(GEN_STMCONST_QSTR) - # qstr definitions (must come before including py.mk) -QSTR_DEFS += qstrdefsport.h $(QSTR_GENERATED_HEADERS) -QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h $(QSTR_GENERATED_HEADERS) +QSTR_DEFS += qstrdefsport.h + +# Files that are generated and needed before the QSTR build. +QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h $(GEN_STMCONST_HDR) # MicroPython feature configurations MICROPY_ROM_TEXT_COMPRESSION ?= 1 @@ -71,7 +70,6 @@ BOARD_PINS = $(BOARD_DIR)/pins.csv PREFIX_FILE = boards/stm32f4xx_prefix.c GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -GEN_PINS_QSTR = $(BUILD)/pins_qstr.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h GEN_PINS_AF_PY = $(BUILD)/pins_af.py @@ -86,7 +84,6 @@ GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h GEN_PLLFREQTABLE_HDR = $(HEADER_BUILD)/pllfreqtable.h GEN_STMCONST_HDR = $(HEADER_BUILD)/modstm_const.h -GEN_STMCONST_QSTR = $(BUILD)/modstm_qstr.h GEN_STMCONST_MPZ = $(HEADER_BUILD)/modstm_mpz.h CMSIS_MCU_HDR = $(STM32LIB_CMSIS_ABS)/Include/$(CMSIS_MCU_LOWER).h @@ -655,7 +652,7 @@ $(BUILD)/firmware.elf: $(OBJ) $(call GENERATE_ELF,$@,$^) # List of sources for qstr extraction -SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) +SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) $(GEN_PINS_SRC) # Append any auto-generated sources that are needed by sources listed in # SRC_QSTR SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER) @@ -676,13 +673,12 @@ main.c: $(GEN_CDCINF_HEADER) # Use a pattern rule here so that make will only call make-pins.py once to make # both pins_$(BOARD).c and pins.h -$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h $(BUILD)/%_qstr.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) +$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --hdr-obj-decls \ - --qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) \ - --af-defs $(GEN_PINS_AF_DEFS) --af-defs-cmp-strings \ - --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ + --af-defs-cmp-strings --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) modmachine.c: $(GEN_PLLFREQTABLE_HDR) $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) @@ -690,11 +686,9 @@ $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) $(Q)$(PYTHON) $(PLLVALUES) -c -m $(CMSIS_MCU_LOWER) file:$(BOARD_DIR)/stm32$(MCU_SERIES)xx_hal_conf.h > $@ $(BUILD)/modstm.o: $(GEN_STMCONST_HDR) -# Use a pattern rule here so that make will only call make-stmconst.py once to -# make both modstm_const.h and modstm_qstr.h -$(HEADER_BUILD)/%_const.h $(BUILD)/%_qstr.h: $(CMSIS_MCU_HDR) make-stmconst.py | $(HEADER_BUILD) +$(HEADER_BUILD)/modstm_const.h: $(CMSIS_MCU_HDR) make-stmconst.py | $(HEADER_BUILD) $(ECHO) "GEN stmconst $@" - $(Q)$(PYTHON) make-stmconst.py --qstr $(GEN_STMCONST_QSTR) --mpz $(GEN_STMCONST_MPZ) $(CMSIS_MCU_HDR) > $(GEN_STMCONST_HDR) + $(Q)$(PYTHON) make-stmconst.py --mpz $(GEN_STMCONST_MPZ) $(CMSIS_MCU_HDR) > $(GEN_STMCONST_HDR) $(GEN_CDCINF_HEADER): $(GEN_CDCINF_FILE) $(FILE2H) | $(HEADER_BUILD) $(ECHO) "GEN $@" diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index a3e6ee0669d01..f0fcb824375c8 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -188,9 +188,6 @@ def print(self): ) print_conditional_endif(cond_var) - def qstr_list(self): - return [self.mux_name()] - class Pin(object): """Holds the information associated with a pin.""" @@ -301,13 +298,6 @@ def print_header(self, hdr_file): if self.alt_fn_count > 0: hdr_file.write("extern const pin_af_obj_t pin_{:s}_af[];\n".format(n)) - def qstr_list(self): - result = [] - for alt_fn in self.alt_fn: - if alt_fn.is_supported(): - result += alt_fn.qstr_list() - return result - class NamedPin(object): def __init__(self, name, pin): @@ -462,26 +452,6 @@ def print_header(self, hdr_filename, obj_decls): ) ) - 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(pin.qstr_list()) - qstr_set |= set([named_pin.name()]) - for named_pin in self.board_pins: - if not named_pin.is_hidden(): - qstr_set |= set([named_pin.name()]) - for qstr in sorted(qstr_set): - cond_var = None - if qstr.startswith("AF"): - af_words = qstr.split("_") - cond_var = conditional_var(af_words[1]) - print_conditional_if(cond_var, file=qstr_file) - print("Q({})".format(qstr), file=qstr_file) - print_conditional_endif(cond_var, file=qstr_file) - def print_af_hdr(self, af_const_filename): with open(af_const_filename, "wt") as af_const_file: af_hdr_set = set([]) @@ -597,13 +567,6 @@ def main(): help="Specifies beginning portion of generated pins file", default="stm32f4xx_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", @@ -640,7 +603,6 @@ def main(): for i in range(1, 4): pins.print_adc(i) pins.print_header(args.hdr_filename, args.hdr_obj_decls) - pins.print_qstr(args.qstr_filename) pins.print_af_hdr(args.af_const_filename) pins.print_af_py(args.af_py_filename) pins.print_af_defs(args.af_defs_filename, args.af_defs_cmp_strings) diff --git a/ports/stm32/make-stmconst.py b/ports/stm32/make-stmconst.py index 4e4f2d7155f87..6d64fe3cfaf4f 100644 --- a/ports/stm32/make-stmconst.py +++ b/ports/stm32/make-stmconst.py @@ -183,22 +183,20 @@ def print_int_obj(val, needed_mpzs): needed_mpzs.add(val) -def print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs): +def print_periph(periph_name, periph_val, needed_mpzs): qstr = periph_name.upper() print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="") print_int_obj(periph_val, needed_mpzs) print(" },") - needed_qstrs.add(qstr) -def print_regs(reg_name, reg_defs, needed_qstrs, needed_mpzs): +def print_regs(reg_name, reg_defs, needed_mpzs): reg_name = reg_name.upper() for r in reg_defs: qstr = reg_name + "_" + r[0] print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="") print_int_obj(r[1], needed_mpzs) print(" }, // %s-bits, %s" % (r[2], r[3])) - needed_qstrs.add(qstr) # This version of print regs groups registers together into submodules (eg GPIO submodule). @@ -208,7 +206,7 @@ def print_regs(reg_name, reg_defs, needed_qstrs, needed_mpzs): # As such, we don't use this version. # And for the number of constants we have, this function seems to use about the same amount # of ROM as print_regs. -def print_regs_as_submodules(reg_name, reg_defs, modules, needed_qstrs): +def print_regs_as_submodules(reg_name, reg_defs, modules): mod_name_lower = reg_name.lower() + "_" mod_name_upper = mod_name_lower.upper() modules.append((mod_name_lower, mod_name_upper)) @@ -220,14 +218,12 @@ def print_regs_as_submodules(reg_name, reg_defs, modules, needed_qstrs): """ % (mod_name_lower, mod_name_upper) ) - needed_qstrs.add(mod_name_upper) for r in reg_defs: print( " { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_INT(%#x) }, // %s-bits, %s" % (r[0], r[1], r[2], r[3]) ) - needed_qstrs.add(r[0]) print( """}; @@ -247,13 +243,6 @@ def print_regs_as_submodules(reg_name, reg_defs, modules, needed_qstrs): def main(): cmd_parser = argparse.ArgumentParser(description="Extract ST constants from a C header file.") cmd_parser.add_argument("file", nargs=1, help="input file") - cmd_parser.add_argument( - "-q", - "--qstr", - dest="qstr_filename", - default="build/stmconst_qstr.h", - help="Specified the name of the generated qstr header file", - ) cmd_parser.add_argument( "--mpz", dest="mpz_filename", @@ -269,14 +258,13 @@ def main(): reg_defs["GPIO"].append(["BSRRL", 0x18, 16, "legacy register"]) reg_defs["GPIO"].append(["BSRRH", 0x1A, 16, "legacy register"]) - needed_qstrs = set() needed_mpzs = set() print("// Automatically generated from %s by make-stmconst.py" % args.file[0]) print("") for periph_name, periph_val in periphs: - print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs) + print_periph(periph_name, periph_val, needed_mpzs) for reg in ( "ADC", @@ -309,8 +297,8 @@ def main(): "IPCC", ): if reg in reg_defs: - print_regs(reg, reg_defs[reg], needed_qstrs, needed_mpzs) - # print_regs_as_submodules(reg, reg_defs[reg], modules, needed_qstrs) + print_regs(reg, reg_defs[reg], needed_mpzs) + # print_regs_as_submodules(reg, reg_defs[reg], modules) # print("#define MOD_STM_CONST_MODULES \\") # for mod_lower, mod_upper in modules: @@ -318,12 +306,6 @@ def main(): print("") - with open(args.qstr_filename, "wt") as qstr_file: - print("#if MICROPY_PY_STM_CONST", file=qstr_file) - for qstr in sorted(needed_qstrs): - print("Q({})".format(qstr), file=qstr_file) - print("#endif // MICROPY_PY_STM_CONST", file=qstr_file) - with open(args.mpz_filename, "wt") as mpz_file: for mpz in sorted(needed_mpzs): assert 0 <= mpz <= 0xFFFFFFFF diff --git a/ports/stm32/mboot/Makefile b/ports/stm32/mboot/Makefile index 54fc8f4830828..a37b046ca564b 100755 --- a/ports/stm32/mboot/Makefile +++ b/ports/stm32/mboot/Makefile @@ -227,7 +227,6 @@ GEN_QSTRDEFS_GENERATED = $(HEADER_BUILD)/qstrdefs.generated.h GEN_ROOT_POINTERS = $(HEADER_BUILD)/root_pointers.h GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -GEN_PINS_QSTR = $(HEADER_BUILD)/pins_qstr.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h GEN_PINS_AF_PY = $(BUILD)/pins_af.py @@ -246,7 +245,7 @@ $(GEN_ROOT_POINTERS): | $(HEADER_BUILD) $(GEN_PINS_AF_DEFS): $(BOARD_PINS) $(MAKE_PINS) ../$(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af ../$(AF_FILE) \ - --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) \ + --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) \ --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) From 3f99dbd634f728e98ef5b14f838ecb62ff946d0a Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 15:25:44 +1000 Subject: [PATCH 04/20] nrf/boards/make-pins.py: Don't generate qstrs. The output pins.c can be processed for qstrs like any other C file. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/nrf/Makefile | 9 ++++----- ports/nrf/boards/make-pins.py | 31 ------------------------------- 2 files changed, 4 insertions(+), 36 deletions(-) diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index abc1ed497d6a8..7d7589cc20a74 100644 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -51,7 +51,7 @@ endif -include boards/$(BOARD)/modules/boardmodules.mk # qstr definitions (must come before including py.mk) -QSTR_DEFS = qstrdefsport.h $(GEN_PINS_QSTR) +QSTR_DEFS = qstrdefsport.h # MicroPython feature configurations ifeq ($(DEBUG), 0) @@ -118,7 +118,6 @@ AF_FILE = $(MCU_VARIANT)_af.csv PREFIX_FILE = boards/$(MCU_VARIANT)_prefix.c GEN_PINS_SRC = $(BUILD)/pins_gen.c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -GEN_PINS_QSTR = $(BUILD)/pins_qstr.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_PY = $(BUILD)/pins_af.py @@ -528,7 +527,7 @@ $(BUILD)/$(OUTPUT_FILENAME).elf: $(OBJ) $(Q)$(SIZE) $@ # List of sources for qstr extraction -SRC_QSTR += $(SRC_C) $(SRC_SHARED_C) $(DRIVERS_SRC_C) $(SRC_BOARD_MODULES) +SRC_QSTR += $(SRC_C) $(SRC_SHARED_C) $(DRIVERS_SRC_C) $(SRC_BOARD_MODULES) $(GEN_PINS_SRC) # Append any auto-generated sources that are needed by sources listed in # SRC_QSTR @@ -543,9 +542,9 @@ $(OBJ): | $(HEADER_BUILD)/pins.h # Use a pattern rule here so that make will only call make-pins.py once to make # both pins_gen.c and pins.h -$(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qstr.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) +$(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) $(PY_BUILD)/nlr%.o: CFLAGS += -Os -fno-lto diff --git a/ports/nrf/boards/make-pins.py b/ports/nrf/boards/make-pins.py index 720df6e49ee86..b535e2418bbb1 100644 --- a/ports/nrf/boards/make-pins.py +++ b/ports/nrf/boards/make-pins.py @@ -82,9 +82,6 @@ def print(self): ) ) - def qstr_list(self): - return [self.mux_name()] - class Pin(object): """Holds the information associated with a pin.""" @@ -182,13 +179,6 @@ def print_header(self, hdr_file): "extern const pin_af_obj_t pin_{:s}_af[];\n".format(self.cpu_pin_name()) ) - def qstr_list(self): - result = [] - for alt_fn in self.alt_fn: - if alt_fn.is_supported(): - result += alt_fn.qstr_list() - return result - class NamedPin(object): def __init__(self, name, pin): @@ -312,19 +302,6 @@ def print_header(self, hdr_filename): hdr_file.write("extern const pin_obj_t * const pin_adc2[];\n") hdr_file.write("extern const pin_obj_t * const pin_adc3[];\n") - 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(pin.qstr_list()) - 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 print_af_hdr(self, af_const_filename): with open(af_const_filename, "wt") as af_const_file: af_hdr_set = set([]) @@ -393,13 +370,6 @@ def main(): 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", @@ -430,7 +400,6 @@ def main(): pins.print_const_table() pins.print() pins.print_header(args.hdr_filename) - pins.print_qstr(args.qstr_filename) pins.print_af_hdr(args.af_const_filename) pins.print_af_py(args.af_py_filename) From df28aa1a595afcefaa164e61af38b9b17d83fa6b Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 15:36:33 +1000 Subject: [PATCH 05/20] renesas-ra/boards/make-pins.py: Don't generate qstrs. The output pins.c can be processed for qstrs like any other C file. Also remove af_const from Makefile (unimplemented in make-pins.py) and fix target dependency on ad_const. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/renesas-ra/Makefile | 19 ++++++-------- ports/renesas-ra/boards/make-pins.py | 39 ---------------------------- 2 files changed, 8 insertions(+), 50 deletions(-) diff --git a/ports/renesas-ra/Makefile b/ports/renesas-ra/Makefile index 943ed6d9bf6bb..e77843b1e31b6 100644 --- a/ports/renesas-ra/Makefile +++ b/ports/renesas-ra/Makefile @@ -27,12 +27,11 @@ USE_FSP_LPM ?= 1 USE_FSP_QSPI ?= 0 FSP_BOARD_NAME ?= $(shell echo $(BOARD) | tr '[:upper:]' '[:lower:]') -# Files that are generated and needed before the QSTR build. -#QSTR_GENERATED_HEADERS = $(BUILD)/pins_qstr.h $(BUILD)/modstm_qstr.h -QSTR_GENERATED_HEADERS = $(BUILD)/pins_qstr.h # qstr definitions (must come before including py.mk) -QSTR_DEFS += qstrdefsport.h $(QSTR_GENERATED_HEADERS) -QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h $(QSTR_GENERATED_HEADERS) +QSTR_DEFS += qstrdefsport.h + +# Files that are generated and needed before the QSTR build. +QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h # MicroPython feature configurations MICROPY_ROM_TEXT_COMPRESSION ?= 1 @@ -557,16 +556,14 @@ AF_FILE = boards/ra6m5_af.csv endif GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -GEN_PINS_QSTR = $(BUILD)/pins_qstr.h +# Currently unused. GEN_PINS_AD_CONST = $(HEADER_BUILD)/pins_ad_const.h -GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h -#GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h GEN_PINS_AF_PY = $(BUILD)/pins_af.py FILE2H = $(TOP)/tools/file2h.py # List of sources for qstr extraction -SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) +SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) $(GEN_PINS_SRC) # Making OBJ use an order-only depenedency on the generated pins.h file # has the side effect of making the pins.h file before we actually compile @@ -582,9 +579,9 @@ $(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h # Use a pattern rule here so that make will only call make-pins.py once to make # both pins_$(BOARD).c and pins.h .PRECIOUS: $(GEN_PINS_SRC) -$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h $(BUILD)/%_qstr.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) +$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_ad_const.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --ad-const $(GEN_PINS_AD_CONST) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --ad-const $(GEN_PINS_AD_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h diff --git a/ports/renesas-ra/boards/make-pins.py b/ports/renesas-ra/boards/make-pins.py index 5147d27940bdb..4127c9ff1151e 100644 --- a/ports/renesas-ra/boards/make-pins.py +++ b/ports/renesas-ra/boards/make-pins.py @@ -41,9 +41,6 @@ def print_header(self, hdr_file): hdr_file.write("extern const pin_ad_obj_t pin_{:s}_ad_obj;\n".format(n)) hdr_file.write("#define pin_{:s}_ad (&pin_{:s}_ad_obj)\n".format(n, n)) - def qstr_list(self): - return [self._name] - class Pin(object): def __init__(self, name, port, bit): @@ -98,15 +95,6 @@ def print_header(self, hdr_file): hdr_file.write("extern const machine_pin_obj_t pin_{:s}_obj;\n".format(n)) hdr_file.write("#define pin_{:s} (&pin_{:s}_obj)\n".format(n, n)) - def qstr_list(self): - result = [] - for pin_ad in self._pin_ad: - result += pin_ad.qstr_list() - # for alt_fn in self.alt_fn: - # if alt_fn.is_supported(): - # result += alt_fn.qstr_list() - return result - class NamedPin(object): def __init__(self, name, pin): @@ -209,19 +197,6 @@ def print_header(self, hdr_filename): ) ) - 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(pin.qstr_list()) - 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 print_ad_hdr(self, ad_const_filename): with open(ad_const_filename, "wt") as ad_const_file: for named_pin in self.cpu_pins: @@ -265,12 +240,6 @@ def main(): help="Specifies header file for AD function constants.", default="build/pins_ad_const.h", ) - parser.add_argument( - "--af-const", - dest="af_const_filename", - help="Specifies header file for alternate function constants.", - default="build/pins_af_const.h", - ) parser.add_argument( "--af-py", dest="af_py_filename", @@ -283,13 +252,6 @@ def main(): help="Specifies the filename for the alternate function defines.", default="build/pins_af_defs.h", ) - 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", @@ -319,7 +281,6 @@ def main(): pins.print() pins.print_header(args.hdr_filename) - pins.print_qstr(args.qstr_filename) pins.print_ad_hdr(args.ad_const_filename) From cb37b7bba756115029d9b973c753eb4b81be5ab7 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Fri, 4 Aug 2023 23:15:25 +1000 Subject: [PATCH 06/20] cc3200/boards/make-pins.py: Don't generate qstrs. The output pins.c can be processed for qstrs like any other C file. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/cc3200/Makefile | 2 +- ports/cc3200/application.mk | 7 +++---- ports/cc3200/boards/make-pins.py | 24 ------------------------ 3 files changed, 4 insertions(+), 29 deletions(-) diff --git a/ports/cc3200/Makefile b/ports/cc3200/Makefile index f89a927c0e43e..099fa295c5906 100644 --- a/ports/cc3200/Makefile +++ b/ports/cc3200/Makefile @@ -36,7 +36,7 @@ FLASH_SIZE_LAUNCHXL = 1M ifeq ($(BTARGET), application) # qstr definitions (must come before including py.mk) -QSTR_DEFS = qstrdefsport.h $(BUILD)/pins_qstr.h +QSTR_DEFS = qstrdefsport.h # MicroPython feature configurations MICROPY_ROM_TEXT_COMPRESSION ?= 1 diff --git a/ports/cc3200/application.mk b/ports/cc3200/application.mk index 7a8fb8d943978..15a5824c3675c 100644 --- a/ports/cc3200/application.mk +++ b/ports/cc3200/application.mk @@ -164,7 +164,7 @@ OBJ += $(BUILD)/shared/runtime/gchelper_thumb2.o OBJ += $(BUILD)/pins.o # List of sources for qstr extraction -SRC_QSTR += $(APP_MODS_SRC_C) $(APP_MISC_SRC_C) $(APP_STM_SRC_C) $(APP_SHARED_SRC_C) $(APP_HAL_SRC_C) +SRC_QSTR += $(APP_MODS_SRC_C) $(APP_MISC_SRC_C) $(APP_STM_SRC_C) $(APP_SHARED_SRC_C) $(APP_HAL_SRC_C) $(GEN_PINS_SRC) # Append any auto-generated sources that are needed by sources listed in # SRC_QSTR SRC_QSTR_AUTO_DEPS += @@ -228,7 +228,6 @@ AF_FILE = boards/cc3200_af.csv PREFIX_FILE = boards/cc3200_prefix.c GEN_PINS_SRC = $(BUILD)/pins.c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -GEN_PINS_QSTR = $(BUILD)/pins_qstr.h # Making OBJ use an order-only dependency on the generated pins.h file # has the side effect of making the pins.h file before we actually compile @@ -238,6 +237,6 @@ GEN_PINS_QSTR = $(BUILD)/pins_qstr.h $(OBJ): | $(GEN_PINS_HDR) # Call make-pins.py to generate both pins_gen.c and pins.h -$(GEN_PINS_SRC) $(GEN_PINS_HDR) $(GEN_PINS_QSTR): $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) +$(GEN_PINS_SRC) $(GEN_PINS_HDR): $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) > $(GEN_PINS_SRC) diff --git a/ports/cc3200/boards/make-pins.py b/ports/cc3200/boards/make-pins.py index 6608be438a218..cd4abb93d2a6b 100644 --- a/ports/cc3200/boards/make-pins.py +++ b/ports/cc3200/boards/make-pins.py @@ -185,22 +185,6 @@ def print_header(self, hdr_filename): if pin.board_pin: pin.print_header(hdr_file) - def print_qstr(self, qstr_filename): - with open(qstr_filename, "wt") as qstr_file: - pin_qstr_set = set([]) - af_qstr_set = set([]) - for pin in self.board_pins: - if pin.board_pin: - pin_qstr_set |= set([pin.name]) - for af in pin.afs: - af_qstr_set |= set([af.name]) - print("// Board pins", file=qstr_file) - for qstr in sorted(pin_qstr_set): - print("Q({})".format(qstr), file=qstr_file) - print("\n// Pin AFs", file=qstr_file) - for qstr in sorted(af_qstr_set): - print("Q({})".format(qstr), file=qstr_file) - def main(): parser = argparse.ArgumentParser( @@ -228,13 +212,6 @@ def main(): help="Specifies beginning portion of generated pins file", default="cc3200_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", @@ -262,7 +239,6 @@ def main(): with open(args.prefix_filename, "r") as prefix_file: print(prefix_file.read()) pins.print() - pins.print_qstr(args.qstr_filename) pins.print_header(args.hdr_filename) From 59f3c7facbb6100108750efa857f1550f23f2482 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 15:02:41 +1000 Subject: [PATCH 07/20] examples/pins.py: Remove this pins printing example. It's not supported on all ports, adds complexity to the build to generate pins_af.py, and can mostly be replicated just by printing the pin objects. Remove support for generating pins_af.py from all ports (nrf, stm32, renesas-ra, mimxrt, rp2). This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- examples/pins.py | 60 ---------------------------- ports/mimxrt/Makefile | 1 - ports/nrf/Makefile | 3 +- ports/nrf/boards/make-pins.py | 18 --------- ports/renesas-ra/Makefile | 3 +- ports/renesas-ra/boards/make-pins.py | 6 --- ports/rp2/CMakeLists.txt | 3 +- ports/rp2/boards/make-pins.py | 18 --------- ports/stm32/Makefile | 3 +- ports/stm32/boards/make-pins.py | 20 ---------- ports/stm32/mboot/Makefile | 3 +- 11 files changed, 5 insertions(+), 133 deletions(-) delete mode 100644 examples/pins.py diff --git a/examples/pins.py b/examples/pins.py deleted file mode 100644 index 3a8472e8a6849..0000000000000 --- a/examples/pins.py +++ /dev/null @@ -1,60 +0,0 @@ -# Print a nice list of pins, their current settings, and available afs. -# Requires pins_af.py from ports/stm32/build-PYBV10/ directory. - -import pyb -import pins_af - - -def af(): - max_name_width = 0 - max_af_width = 0 - for pin_entry in pins_af.PINS_AF: - max_name_width = max(max_name_width, len(pin_entry[0])) - for af_entry in pin_entry[1:]: - max_af_width = max(max_af_width, len(af_entry[1])) - for pin_entry in pins_af.PINS_AF: - pin_name = pin_entry[0] - print("%-*s " % (max_name_width, pin_name), end="") - for af_entry in pin_entry[1:]: - print("%2d: %-*s " % (af_entry[0], max_af_width, af_entry[1]), end="") - print("") - - -def pins(): - mode_str = { - pyb.Pin.IN: "IN", - pyb.Pin.OUT_PP: "OUT_PP", - pyb.Pin.OUT_OD: "OUT_OD", - pyb.Pin.AF_PP: "AF_PP", - pyb.Pin.AF_OD: "AF_OD", - pyb.Pin.ANALOG: "ANALOG", - } - pull_str = {pyb.Pin.PULL_NONE: "", pyb.Pin.PULL_UP: "PULL_UP", pyb.Pin.PULL_DOWN: "PULL_DOWN"} - width = [0, 0, 0, 0] - rows = [] - for pin_entry in pins_af.PINS_AF: - row = [] - pin_name = pin_entry[0] - pin = pyb.Pin(pin_name) - pin_mode = pin.mode() - row.append(pin_name) - row.append(mode_str[pin_mode]) - row.append(pull_str[pin.pull()]) - if pin_mode == pyb.Pin.AF_PP or pin_mode == pyb.Pin.AF_OD: - pin_af = pin.af() - for af_entry in pin_entry[1:]: - if pin_af == af_entry[0]: - af_str = "%d: %s" % (pin_af, af_entry[1]) - break - else: - af_str = "%d" % pin_af - else: - af_str = "" - row.append(af_str) - for col in range(len(width)): - width[col] = max(width[col], len(row[col])) - rows.append(row) - for row in rows: - for col in range(len(width)): - print("%-*s " % (width[col], row[col]), end="") - print("") diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile index c22c5442a9d08..51cf5178bac2a 100644 --- a/ports/mimxrt/Makefile +++ b/ports/mimxrt/Makefile @@ -62,7 +62,6 @@ BOARD_PINS = $(BOARD_DIR)/pins.csv PREFIX_FILE = boards/mimxrt_prefix.c GEN_FLEXRAM_CONFIG_SRC = $(BUILD)/flexram_config.s GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h -GEN_PINS_AF_PY = $(BUILD)/pins_af.py GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_SRC = $(BUILD)/pins_gen.c diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 7d7589cc20a74..cb81ad847f35b 100644 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -119,7 +119,6 @@ PREFIX_FILE = boards/$(MCU_VARIANT)_prefix.c GEN_PINS_SRC = $(BUILD)/pins_gen.c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h -GEN_PINS_AF_PY = $(BUILD)/pins_af.py CFLAGS_CORTEX_M = -mthumb -mabi=aapcs -fsingle-precision-constant -Wdouble-promotion @@ -544,7 +543,7 @@ $(OBJ): | $(HEADER_BUILD)/pins.h # both pins_gen.c and pins.h $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --af-const $(GEN_PINS_AF_CONST) > $(GEN_PINS_SRC) $(PY_BUILD)/nlr%.o: CFLAGS += -Os -fno-lto diff --git a/ports/nrf/boards/make-pins.py b/ports/nrf/boards/make-pins.py index b535e2418bbb1..6bfb662514426 100644 --- a/ports/nrf/boards/make-pins.py +++ b/ports/nrf/boards/make-pins.py @@ -320,17 +320,6 @@ def print_af_hdr(self, af_const_filename): val = "MP_ROM_INT(GPIO_{})".format(mux_name) print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=af_const_file) - def print_af_py(self, af_py_filename): - with open(af_py_filename, "wt") as af_py_file: - print("PINS_AF = (", file=af_py_file) - for named_pin in self.board_pins: - print(" ('%s', " % named_pin.name(), end="", file=af_py_file) - for af in named_pin.pin().alt_fn: - if af.is_supported(): - print("(%d, '%s'), " % (af.idx, af.af_str), end="", file=af_py_file) - print("),", file=af_py_file) - print(")", file=af_py_file) - def main(): parser = argparse.ArgumentParser( @@ -351,12 +340,6 @@ def main(): help="Specifies header file for alternate function constants.", default="build/pins_af_const.h", ) - parser.add_argument( - "--af-py", - dest="af_py_filename", - help="Specifies the filename for the python alternate function mappings.", - default="build/pins_af.py", - ) parser.add_argument( "-b", "--board", @@ -401,7 +384,6 @@ def main(): pins.print() pins.print_header(args.hdr_filename) pins.print_af_hdr(args.af_const_filename) - pins.print_af_py(args.af_py_filename) if __name__ == "__main__": diff --git a/ports/renesas-ra/Makefile b/ports/renesas-ra/Makefile index e77843b1e31b6..8c09dc91bd0a1 100644 --- a/ports/renesas-ra/Makefile +++ b/ports/renesas-ra/Makefile @@ -558,7 +558,6 @@ GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h # Currently unused. GEN_PINS_AD_CONST = $(HEADER_BUILD)/pins_ad_const.h -GEN_PINS_AF_PY = $(BUILD)/pins_af.py FILE2H = $(TOP)/tools/file2h.py @@ -581,7 +580,7 @@ $(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h .PRECIOUS: $(GEN_PINS_SRC) $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_ad_const.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --ad-const $(GEN_PINS_AD_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --ad-const $(GEN_PINS_AD_CONST) > $(GEN_PINS_SRC) CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h diff --git a/ports/renesas-ra/boards/make-pins.py b/ports/renesas-ra/boards/make-pins.py index 4127c9ff1151e..43267a1fa3d7f 100644 --- a/ports/renesas-ra/boards/make-pins.py +++ b/ports/renesas-ra/boards/make-pins.py @@ -240,12 +240,6 @@ def main(): help="Specifies header file for AD function constants.", default="build/pins_ad_const.h", ) - parser.add_argument( - "--af-py", - dest="af_py_filename", - help="Specifies the filename for the python alternate function mappings.", - default="build/pins_af.py", - ) parser.add_argument( "--af-defs", dest="af_defs_filename", diff --git a/ports/rp2/CMakeLists.txt b/ports/rp2/CMakeLists.txt index 4a0d2fbad73ce..f643b66793475 100644 --- a/ports/rp2/CMakeLists.txt +++ b/ports/rp2/CMakeLists.txt @@ -480,7 +480,6 @@ set(GEN_PINS_MKPINS "${MICROPY_BOARDS_DIR}/make-pins.py") set(GEN_PINS_SRC "${CMAKE_BINARY_DIR}/pins_${MICROPY_BOARD}.c") set(GEN_PINS_HDR "${MICROPY_GENHDR_DIR}/pins.h") set(GEN_PINS_AF_CONST "${MICROPY_GENHDR_DIR}/pins_af_const.h") -set(GEN_PINS_AF_PY "${CMAKE_BINARY_DIR}/pins_af.py") if(EXISTS "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") set(GEN_PINS_BOARD_CSV "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") @@ -495,7 +494,7 @@ target_sources(${MICROPY_TARGET} PRIVATE add_custom_command( OUTPUT ${GEN_PINS_HDR} ${GEN_PINS_SRC} COMMAND ${Python3_EXECUTABLE} ${GEN_PINS_MKPINS} ${GEN_PINS_CSV_ARG} --af ${GEN_PINS_AF_CSV} --prefix ${GEN_PINS_PREFIX} - --hdr ${GEN_PINS_HDR} --af-py ${GEN_PINS_AF_PY} > ${GEN_PINS_SRC} + --hdr ${GEN_PINS_HDR} > ${GEN_PINS_SRC} DEPENDS ${GEN_PINS_AF_CSV} ${GEN_PINS_BOARD_CSV} diff --git a/ports/rp2/boards/make-pins.py b/ports/rp2/boards/make-pins.py index 4029d7b1cfca7..9c66248885c62 100755 --- a/ports/rp2/boards/make-pins.py +++ b/ports/rp2/boards/make-pins.py @@ -284,17 +284,6 @@ def print_header(self, hdr_filename, obj_decls): ) ) - def print_af_py(self, af_py_filename): - with open(af_py_filename, "wt") as af_py_file: - print("PINS_AF = (", file=af_py_file) - for named_pin in self.board_pins: - print(" ('%s', " % named_pin.name(), end="", file=af_py_file) - for af in named_pin.pin().alt_fn: - if af.is_supported(): - print("(%d, '%s'), " % (af.idx, af.af_str), end="", file=af_py_file) - print("),", file=af_py_file) - print(")", file=af_py_file) - def main(): parser = argparse.ArgumentParser( @@ -309,12 +298,6 @@ def main(): help="Specifies the alternate function file for the chip", default="rp2_af.csv", ) - parser.add_argument( - "--af-py", - dest="af_py_filename", - help="Specifies the filename for the python alternate function mappings.", - default="build/pins_af.py", - ) parser.add_argument( "-b", "--board", @@ -356,7 +339,6 @@ def main(): print(prefix_file.read()) pins.print() pins.print_header(args.hdr_filename, True) - pins.print_af_py(args.af_py_filename) if __name__ == "__main__": diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index 3bb18ee3cbe48..5b853592c9a0d 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -72,7 +72,6 @@ GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h -GEN_PINS_AF_PY = $(BUILD)/pins_af.py INSERT_USB_IDS = $(TOP)/tools/insert-usb-ids.py FILE2H = $(TOP)/tools/file2h.py @@ -678,7 +677,7 @@ $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_ $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --hdr-obj-decls \ --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ - --af-defs-cmp-strings --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + --af-defs-cmp-strings > $(GEN_PINS_SRC) modmachine.c: $(GEN_PLLFREQTABLE_HDR) $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index f0fcb824375c8..99b507a3a870a 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -503,19 +503,6 @@ def print_af_defs(self, af_defs_filename, cmp_strings): print("\n".join(sorted(pins)), file=af_defs_file) print(" (0xffffffffffffffffULL))\n", file=af_defs_file) - def print_af_py(self, af_py_filename): - with open(af_py_filename, "wt") as af_py_file: - print("PINS_AF = (", file=af_py_file) - for named_pin in self.board_pins: - if named_pin.is_hidden(): - continue - print(" ('%s', " % named_pin.name(), end="", file=af_py_file) - for af in named_pin.pin().alt_fn: - if af.is_supported(): - print("(%d, '%s'), " % (af.idx, af.af_str), end="", file=af_py_file) - print("),", file=af_py_file) - print(")", file=af_py_file) - def main(): parser = argparse.ArgumentParser( @@ -536,12 +523,6 @@ def main(): help="Specifies header file for alternate function constants.", default="build/pins_af_const.h", ) - parser.add_argument( - "--af-py", - dest="af_py_filename", - help="Specifies the filename for the python alternate function mappings.", - default="build/pins_af.py", - ) parser.add_argument( "--af-defs", dest="af_defs_filename", @@ -604,7 +585,6 @@ def main(): pins.print_adc(i) pins.print_header(args.hdr_filename, args.hdr_obj_decls) pins.print_af_hdr(args.af_const_filename) - pins.print_af_py(args.af_py_filename) pins.print_af_defs(args.af_defs_filename, args.af_defs_cmp_strings) diff --git a/ports/stm32/mboot/Makefile b/ports/stm32/mboot/Makefile index a37b046ca564b..fab8ce2159012 100755 --- a/ports/stm32/mboot/Makefile +++ b/ports/stm32/mboot/Makefile @@ -229,7 +229,6 @@ GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h -GEN_PINS_AF_PY = $(BUILD)/pins_af.py $(OBJ): $(GEN_QSTRDEFS_GENERATED) $(GEN_ROOT_POINTERS) $(GEN_PINS_AF_DEFS) @@ -247,7 +246,7 @@ $(GEN_PINS_AF_DEFS): $(BOARD_PINS) $(MAKE_PINS) ../$(AF_FILE) $(PREFIX_FILE) | $ $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af ../$(AF_FILE) \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) \ --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ - --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) + > $(GEN_PINS_SRC) ######################################### From 1ee5731122ba1c43705c1287da85de800b283036 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 16:20:50 +1000 Subject: [PATCH 08/20] ports: Remove SRC_QSTR_AUTO_DEPS from all ports' Makefiles. It's unused. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/cc3200/application.mk | 3 --- ports/esp8266/Makefile | 2 -- ports/nrf/Makefile | 4 ---- ports/pic16bit/Makefile | 3 --- ports/stm32/Makefile | 5 ++--- ports/unix/Makefile | 3 --- ports/windows/Makefile | 3 --- 7 files changed, 2 insertions(+), 21 deletions(-) diff --git a/ports/cc3200/application.mk b/ports/cc3200/application.mk index 15a5824c3675c..7c6773ef4be4c 100644 --- a/ports/cc3200/application.mk +++ b/ports/cc3200/application.mk @@ -165,9 +165,6 @@ OBJ += $(BUILD)/pins.o # List of sources for qstr extraction SRC_QSTR += $(APP_MODS_SRC_C) $(APP_MISC_SRC_C) $(APP_STM_SRC_C) $(APP_SHARED_SRC_C) $(APP_HAL_SRC_C) $(GEN_PINS_SRC) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += # Add the linker script LINKER_SCRIPT = application.lds diff --git a/ports/esp8266/Makefile b/ports/esp8266/Makefile index b29df9fd2223c..cea0e789c63f8 100644 --- a/ports/esp8266/Makefile +++ b/ports/esp8266/Makefile @@ -187,8 +187,6 @@ OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o)) # List of sources for qstr extraction SRC_QSTR += $(SRC_C) $(SHARED_SRC_C) -# Append any auto-generated sources that are needed by sources listed in SRC_QSTR -SRC_QSTR_AUTO_DEPS += all: $(FWBIN) diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index cb81ad847f35b..2f9b93d7ffdfd 100644 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -528,10 +528,6 @@ $(BUILD)/$(OUTPUT_FILENAME).elf: $(OBJ) # List of sources for qstr extraction SRC_QSTR += $(SRC_C) $(SRC_SHARED_C) $(DRIVERS_SRC_C) $(SRC_BOARD_MODULES) $(GEN_PINS_SRC) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += - # Making OBJ use an order-only dependency on the generated pins.h file # has the side effect of making the pins.h file before we actually compile # any of the objects. The normal dependency generation will deal with the diff --git a/ports/pic16bit/Makefile b/ports/pic16bit/Makefile index d2c8df4707e0d..6d061514f9583 100644 --- a/ports/pic16bit/Makefile +++ b/ports/pic16bit/Makefile @@ -51,9 +51,6 @@ OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(SRC_S:.s=.o)) # List of sources for qstr extraction SRC_QSTR += $(SRC_C) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += all: $(BUILD)/firmware.hex diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index 5b853592c9a0d..8d521182ffe7d 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -652,9 +652,6 @@ $(BUILD)/firmware.elf: $(OBJ) # List of sources for qstr extraction SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) $(GEN_PINS_SRC) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER) # Making OBJ use an order-only dependency on the generated pins.h file # has the side effect of making the pins.h file before we actually compile @@ -668,6 +665,8 @@ $(OBJ): | $(GEN_PINS_HDR) $(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h # main.c can't be even preprocessed without $(GEN_CDCINF_HEADER) +# As main.c is in SRC_QSTR this will also ensure that GEN_CDCINF_HEADER +# will be run before QSTR extraction. main.c: $(GEN_CDCINF_HEADER) # Use a pattern rule here so that make will only call make-pins.py once to make diff --git a/ports/unix/Makefile b/ports/unix/Makefile index 52ae8314eb4ce..9f5e01a5ff9b7 100644 --- a/ports/unix/Makefile +++ b/ports/unix/Makefile @@ -229,9 +229,6 @@ OBJ += $(addprefix $(BUILD)/, $(SHARED_SRC_C:.c=.o)) # List of sources for qstr extraction SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += ifneq ($(FROZEN_MANIFEST),) CFLAGS += -DMPZ_DIG_SIZE=16 # force 16 bits to work on both 32 and 64 bit archs diff --git a/ports/windows/Makefile b/ports/windows/Makefile index 31ac8d8b8847a..47ce664d7bde6 100644 --- a/ports/windows/Makefile +++ b/ports/windows/Makefile @@ -82,9 +82,6 @@ LIB += -lws2_32 # List of sources for qstr extraction SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) -# Append any auto-generated sources that are needed by sources listed in -# SRC_QSTR -SRC_QSTR_AUTO_DEPS += ifneq ($(FROZEN_MANIFEST),) CFLAGS += -DMPZ_DIG_SIZE=16 From 9cabee8252a01212651b52ea8c196d7effca1648 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 3 Aug 2023 16:48:52 +1000 Subject: [PATCH 09/20] ports: Standardise arguments and output for make-pins.py script. All ports now use `--board-csv`, `--prefix`, `--output-souce`, `--output-header` and no longer write to stdout. This matches the esp32 implementation. Ports that have an AF input use `--af-csv` (to match `--board-csv`). Any additional output files are now prefixed with `output-` (e.g. `--output-af-const`). Default arguments are removed (all makefiles should always specify all arguments, using default values is likely an error). Replaced the `af-defs-cmp-strings` and `hdr-obj-decls` args for stm32 with just `mboot-mode`. Previously they were set on the regular build, now the logic is reversed so mboot sets it. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/cc3200/application.mk | 3 +- ports/cc3200/boards/make-pins.py | 134 +++++------ ports/esp32/boards/make-pins.py | 6 +- ports/mimxrt/Makefile | 6 +- ports/mimxrt/boards/make-pins.py | 203 ++++++++-------- ports/nrf/Makefile | 3 +- ports/nrf/boards/make-pins.py | 250 +++++++++----------- ports/renesas-ra/Makefile | 3 +- ports/renesas-ra/boards/make-pins.py | 198 +++++++--------- ports/rp2/CMakeLists.txt | 5 +- ports/rp2/boards/make-pins.py | 206 ++++++++--------- ports/stm32/Makefile | 7 +- ports/stm32/boards/make-pins.py | 332 ++++++++++++--------------- ports/stm32/mboot/Makefile | 8 +- 14 files changed, 610 insertions(+), 754 deletions(-) diff --git a/ports/cc3200/application.mk b/ports/cc3200/application.mk index 7c6773ef4be4c..6959c64b666e8 100644 --- a/ports/cc3200/application.mk +++ b/ports/cc3200/application.mk @@ -236,4 +236,5 @@ $(OBJ): | $(GEN_PINS_HDR) # Call make-pins.py to generate both pins_gen.c and pins.h $(GEN_PINS_SRC) $(GEN_PINS_HDR): $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) diff --git a/ports/cc3200/boards/make-pins.py b/ports/cc3200/boards/make-pins.py index cd4abb93d2a6b..da04d8e36cee9 100644 --- a/ports/cc3200/boards/make-pins.py +++ b/ports/cc3200/boards/make-pins.py @@ -44,11 +44,12 @@ def __init__(self, name, idx, fn, unit, type): self.unit = unit self.type = type - def print(self): + def print(self, out_source): print( " AF({:16s}, {:4d}, {:8s}, {:4d}, {:8s}), // {}".format( self.name, self.idx, self.fn, self.unit, self.type, self.name - ) + ), + file=out_source, ) @@ -66,13 +67,13 @@ def __init__(self, name, port, gpio_bit, pin_num): def add_af(self, af): self.afs.append(af) - def print(self): - print("// {}".format(self.name)) + def print(self, out_source): + print("// {}".format(self.name), file=out_source) if len(self.afs): - print("const pin_af_t pin_{}_af[] = {{".format(self.name)) + print("const pin_af_t pin_{}_af[] = {{".format(self.name), file=out_source) for af in self.afs: - af.print() - print("};") + af.print(out_source) + print("};", file=out_source) print( "pin_obj_t pin_{:4s} = PIN({:6s}, {:1d}, {:3d}, {:2d}, pin_{}_af, {});\n".format( self.name, @@ -82,17 +83,19 @@ def print(self): self.pin_num, self.name, len(self.afs), - ) + ), + file=out_source, ) else: print( "pin_obj_t pin_{:4s} = PIN({:6s}, {:1d}, {:3d}, {:2d}, NULL, 0);\n".format( self.name, self.name, self.port, self.gpio_bit, self.pin_num - ) + ), + file=out_source, ) - def print_header(self, hdr_file): - hdr_file.write("extern pin_obj_t pin_{:s};\n".format(self.name)) + def print_header(self, out_header): + print("extern pin_obj_t pin_{:s};".format(self.name), file=out_header) class Pins: @@ -153,93 +156,72 @@ def parse_board_file(self, filename, cpu_pin_col): if pin: pin.board_pin = True - def print_named(self, label, pins): - print("") + def print_named(self, label, pins, out_source): + print("", file=out_source) print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for pin in pins: if pin.board_pin: print( " {{ MP_ROM_QSTR(MP_QSTR_{:6s}), MP_ROM_PTR(&pin_{:6s}) }},".format( pin.name, pin.name - ) + ), + file=out_source, ) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - def print(self): + def print(self, out_source): for pin in self.board_pins: if pin.board_pin: - pin.print() - self.print_named("board", self.board_pins) - print("") + pin.print(out_source) + self.print_named("board", self.board_pins, out_source) + print("", file=out_source) - def print_header(self, hdr_filename): - with open(hdr_filename, "wt") as hdr_file: - for pin in self.board_pins: - if pin.board_pin: - pin.print_header(hdr_file) + def print_header(self, out_header): + for pin in self.board_pins: + if pin.board_pin: + pin.print_header(out_header) 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="cc3200_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="cc3200_prefix.c", - ) - 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:]) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + args = parser.parse_args() 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, 0, 1, 3) - - if args.board_filename: - print("// --board {:s}".format(args.board_filename)) - pins.parse_board_file(args.board_filename, 1) - - 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) + with open(args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv, 0, 1, 3) + + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv, 1) + + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + print("", file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) + pins.print(out_source) + + with open(args.output_header, "w") as out_header: + pins.print_header(out_header) if __name__ == "__main__": diff --git a/ports/esp32/boards/make-pins.py b/ports/esp32/boards/make-pins.py index e0f988549b7f3..4813724dd6d88 100755 --- a/ports/esp32/boards/make-pins.py +++ b/ports/esp32/boards/make-pins.py @@ -154,20 +154,18 @@ def main(): parser.add_argument("--prefix") parser.add_argument("--output-source") parser.add_argument("--output-header") - args = parser.parse_args(sys.argv[1:]) + args = parser.parse_args() pins = Pins() pins.create_pins() - if args.board_csv: - pins.parse_board_file(args.board_csv) - with open(args.output_source, "w") as out_source: print("// This file was automatically generated by make-pins.py", file=out_source) print("//", file=out_source) if args.board_csv: print("// --board-csv {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) if args.prefix: print("// --prefix {:s}".format(args.prefix), file=out_source) diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile index 51cf5178bac2a..879ee05f4a448 100644 --- a/ports/mimxrt/Makefile +++ b/ports/mimxrt/Makefile @@ -505,8 +505,8 @@ $(GEN_FLEXRAM_CONFIG_SRC): # both pins_gen.c and pins.h $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h: $(BOARD_PINS) $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE)\ - --iomux $(abspath $(TOP)/$(MCU_DIR)/drivers/fsl_iomuxc.h) \ - --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) \ + --prefix $(PREFIX_FILE) --iomux $(abspath $(TOP)/$(MCU_DIR)/drivers/fsl_iomuxc.h) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) include $(TOP)/py/mkrules.mk diff --git a/ports/mimxrt/boards/make-pins.py b/ports/mimxrt/boards/make-pins.py index 5795e2f0421c1..d6752af1e910a 100644 --- a/ports/mimxrt/boards/make-pins.py +++ b/ports/mimxrt/boards/make-pins.py @@ -93,34 +93,36 @@ def parse_af(self, af_idx, af_strs_in): def add_af(self, af): self.alt_fn.append(af) - def print_pin_af(self): + def print_pin_af(self, out_source): if self.alt_fn: print( "static const machine_pin_af_obj_t pin_{0}_af[{1}] = {{".format( self.name, len(self.alt_fn) - ) + ), + file=out_source, ) for af in self.alt_fn: - af.print() - print("};") + af.print(out_source) + print("};", file=out_source) else: raise ValueError("Pin '{}' has no alternative functions".format(self.name)) - def print_pin_adc(self): + def print_pin_adc(self, out_source): if self.adc_fns: print( "static const machine_pin_adc_obj_t pin_{0}_adc[{1}] = {{".format( self.name, len(self.adc_fns) - ) + ), + file=out_source, ) for adc_fn in self.adc_fns: - adc_fn.print() - print("};") + adc_fn.print(out_source) + print("};", file=out_source) - def print(self): + def print(self, out_source): if self.alt_fn: - self.print_pin_af() - self.print_pin_adc() + self.print_pin_af(out_source) + self.print_pin_adc(out_source) options = { "GPIO_LPSR_00": "PIN_LPSR", @@ -165,12 +167,13 @@ def print(self): int(self.pin), len(self.adc_fns), "pin_{}_adc".format(self.name) if self.adc_fns else "NULL", - ) + ), + file=out_source, ) else: raise ValueError("Pin '{}' has no alternative functions".format(self.name)) - def print_header(self, hdr_file): + def print_header(self, out_header): pass @@ -182,9 +185,9 @@ def __init__(self, instance, channel, peripheral="ADC"): self.instance = instance self.channel = channel - def print(self): + def print(self, out_source): """Prints the C representation of this AF.""" - print(f" PIN_ADC({self.peripheral}{self.instance}, {self.channel}),") + print(f" PIN_ADC({self.peripheral}{self.instance}, {self.channel}),", file=out_source) class AlternateFunction(object): @@ -197,12 +200,13 @@ def __init__(self, idx, input_reg, input_daisy, af_str): self.input_daisy = input_daisy self.instance = self.af_str.split("_")[0] - def print(self): + def print(self, out_source): """Prints the C representation of this AF.""" print( " PIN_AF({0}, PIN_AF_MODE_ALT{1}, {2}, {3}, {4}, {5}),".format( self.af_str, self.idx, self.input_daisy, self.instance, self.input_reg, "0x10B0U" - ) + ), + file=out_source, ) @@ -292,54 +296,62 @@ def parse_af_file(self, filename, iomux_filename): self.cpu_pins.append(pin) @staticmethod - def print_named(label, pins): - print("") + def print_named(label, pins, out_source): + print("", file=out_source) print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for pin in pins: - print( - " {{ MP_ROM_QSTR(MP_QSTR_{}), MP_ROM_PTR(&pin_{}) }},".format(pin.name, pin.pad) + ( + print( + " {{ MP_ROM_QSTR(MP_QSTR_{}), MP_ROM_PTR(&pin_{}) }},".format( + pin.name, pin.pad + ), + file=out_source, + ), ) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(machine_pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - def print(self): + def print(self, out_source): # Print Pin Object declarations for pin in self.cpu_pins: - pin.print() + pin.print(out_source) - print("") - print("const machine_pin_obj_t* machine_pin_board_pins [] = {") + print("", file=out_source) + print("const machine_pin_obj_t* machine_pin_board_pins [] = {", file=out_source) for pin in self.board_pins: - print(" &pin_{},".format(pin.pad)) - print("};") - print("const uint32_t num_board_pins = {:d};".format(len(self.board_pins))) + print(" &pin_{},".format(pin.pad), file=out_source) + print("};", file=out_source) + print( + "const uint32_t num_board_pins = {:d};".format(len(self.board_pins)), file=out_source + ) # Print Pin mapping dictionaries - self.print_named("cpu", self.cpu_pins) - self.print_named("board", self.board_pins) - print("") - - def print_header(self, hdr_filename): - with open(hdr_filename, "w") as hdr_file: - for pin in self.cpu_pins: - hdr_file.write("extern const machine_pin_obj_t pin_{};\n".format(pin.name)) - hdr_file.write("extern const machine_pin_obj_t* machine_pin_board_pins[];\n") - hdr_file.write("extern const uint32_t num_board_pins;\n") - hdr_file.write("extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict;\n") - hdr_file.write("extern const mp_obj_dict_t machine_pin_board_pins_locals_dict;\n") - - hdr_file.write("\n// Defines\n") - module_instance_factory(self.cpu_pins, hdr_file, "USDHC") - module_instance_factory(self.cpu_pins, hdr_file, "FLEXPWM") - module_instance_factory(self.cpu_pins, hdr_file, "TMR") - - -def module_instance_factory(pins, output_file, name): + self.print_named("cpu", self.cpu_pins, out_source) + self.print_named("board", self.board_pins, out_source) + print("", file=out_source) + + def print_header(self, out_header): + for pin in self.cpu_pins: + print("extern const machine_pin_obj_t pin_{};".format(pin.name), file=out_header) + print("extern const machine_pin_obj_t* machine_pin_board_pins[];", file=out_header) + print("extern const uint32_t num_board_pins;", file=out_header) + print("extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict;", file=out_header) + print("extern const mp_obj_dict_t machine_pin_board_pins_locals_dict;", file=out_header) + print("", file=out_header) + print("// Defines", file=out_header) + module_instance_factory(self.cpu_pins, out_header, "USDHC") + module_instance_factory(self.cpu_pins, out_header, "FLEXPWM") + module_instance_factory(self.cpu_pins, out_header, "TMR") + + +def module_instance_factory(pins, out_header, name): module_pin = filter(lambda p: any([af for af in p.alt_fn if name in af.af_str]), pins) module_instances = dict() @@ -357,80 +369,47 @@ def module_instance_factory(pins, output_file, name): ) for k, v in module_instances.items(): - output_file.write(f"// {k}\n") - output_file.write(f"#define {k}_AVAIL (1)\n") + print(f"// {k}", file=out_header) + print(f"#define {k}_AVAIL (1)", file=out_header) if name == "FLEXPWM": - output_file.write(f"#define {k} {k[-4:]}\n") + print(f"#define {k} {k[-4:]}", file=out_header) for i in v: - output_file.write(i + "\n") + print(i, file=out_header) 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="mimxrt1021_af.csv", - ) - parser.add_argument( - "-i", - "--iomux", - dest="iomux_filename", - help="Specifies the fsl_iomuxc.h file for the chip", - default="fsl_iomuxc.h", - ) - parser.add_argument( - "-b", - "--board", - dest="board_filename", - help="Specifies the board file", - default="MIMXRT1020_EVK/pins.csv", - ) - parser.add_argument( - "-p", - "--prefix", - dest="prefix_filename", - help="Specifies beginning portion of generated pins file", - default="mimxrt_prefix.c", - ) - parser.add_argument( - "-r", - "--hdr", - dest="hdr_filename", - help="Specifies name of generated pin header file", - default="build/pins.h", - ) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--iomux-header") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + args = parser.parse_args() pins = Pins() - # test code - args = parser.parse_args() - # + with open(args.output_source, "w") as out_source: + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv, args.iomux_header) - if args.af_filename: - print("// --af {:s}".format(args.af_filename)) - pins.parse_af_file(args.af_filename, args.iomux_filename) + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) - if args.board_filename: - print("// --board {:s}".format(args.board_filename)) - pins.parse_board_file(args.board_filename) + if args.output_header: + print("// --hdr {:s}".format(args.output_header), file=out_source) - if args.hdr_filename: - print("// --hdr {:s}".format(args.hdr_filename)) + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) - if args.prefix_filename: - print("// --prefix {:s}".format(args.prefix_filename)) - with open(args.prefix_filename, "r") as prefix_file: - print(prefix_file.read()) + pins.print(out_source) - pins.print() - pins.print_header(args.hdr_filename) + with open(args.output_header, "w") as out_header: + pins.print_header(out_header) if __name__ == "__main__": diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 2f9b93d7ffdfd..d0ecddd6157a3 100644 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -539,7 +539,8 @@ $(OBJ): | $(HEADER_BUILD)/pins.h # both pins_gen.c and pins.h $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --af-const $(GEN_PINS_AF_CONST) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) --output-af-const $(GEN_PINS_AF_CONST) $(PY_BUILD)/nlr%.o: CFLAGS += -Os -fno-lto diff --git a/ports/nrf/boards/make-pins.py b/ports/nrf/boards/make-pins.py index 6bfb662514426..6932a18d648ac 100644 --- a/ports/nrf/boards/make-pins.py +++ b/ports/nrf/boards/make-pins.py @@ -67,19 +67,20 @@ def ptr(self): def mux_name(self): return "AF{:d}_{:s}".format(self.idx, self.ptr()) - def print(self): + def print(self, out_source): """Prints the C representation of this AF.""" if self.supported: - print(" AF", end="") + print(" AF", end="", file=out_source) else: - print(" //", end="") + print(" //", end="", file=out_source) fn_num = self.fn_num if fn_num is None: fn_num = 0 print( "({:2d}, {:8s}, {:2d}, {:10s}, {:8s}), // {:s}".format( self.idx, self.func, fn_num, self.pin_type, self.ptr(), self.af_str - ) + ), + file=out_source, ) @@ -144,23 +145,24 @@ def adc_num_str(self): str = "0" return str - def print_const_table_entry(self): + def print_const_table_entry(self, out_source): print( " PIN({:d}, {:s}, {:s}, {:d}),".format( self.pin, self.alt_fn_name(null_if_0=True), self.adc_num_str(), self.adc_channel - ) + ), + file=out_source, ) - def print(self): + def print(self, out_source): if self.alt_fn_count == 0: - print("// ", end="") - print("const pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name())) + print("// ", end="", file=out_source) + print("const pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name()), file=out_source) for alt_fn in self.alt_fn: - alt_fn.print() + alt_fn.print(out_source) if self.alt_fn_count == 0: - print("// ", end="") - print("};") - print("") + print("// ", end="", file=out_source) + print("};", file=out_source) + print("", file=out_source) print( "const pin_obj_t pin_{:s} = PIN({:d}, {:s}, {:s}, {:d});".format( self.cpu_pin_name(), @@ -168,15 +170,17 @@ def print(self): self.alt_fn_name(null_if_0=True), self.adc_num_str(), self.adc_channel, - ) + ), + file=out_source, ) - print("") + print("", file=out_source) - def print_header(self, hdr_file): - hdr_file.write("extern const pin_obj_t pin_{:s};\n".format(self.cpu_pin_name())) + def print_header(self, out_header): + print("extern const pin_obj_t pin_{:s};".format(self.cpu_pin_name()), file=out_header) if self.alt_fn_count > 0: - hdr_file.write( - "extern const pin_af_obj_t pin_{:s}_af[];\n".format(self.cpu_pin_name()) + print( + "extern const pin_af_obj_t pin_{:s}_af[];\n".format(self.cpu_pin_name()), + file=out_header, ) @@ -232,9 +236,10 @@ def parse_board_file(self, filename): pin.set_is_board_pin() self.board_pins.append(NamedPin(row[0], pin)) - def print_named(self, label, named_pins): + def print_named(self, label, named_pins, out_source): print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for named_pin in named_pins: pin = named_pin.pin() @@ -242,148 +247,109 @@ def print_named(self, label, named_pins): print( " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&machine_board_pin_obj[{:d}]) }},".format( named_pin.name(), pin.board_index - ) + ), + file=out_source, ) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - def print_const_table(self): + def print_const_table(self, out_source): num_board_pins = 0 for named_pin in self.cpu_pins: pin = named_pin.pin() if pin.is_board_pin(): pin.set_board_index(num_board_pins) num_board_pins += 1 - print("") - print("const uint8_t machine_pin_num_of_board_pins = {:d};".format(num_board_pins)) - print("") - print("const pin_obj_t machine_board_pin_obj[{:d}] = {{".format(num_board_pins)) + print("", file=out_source) + print( + "const uint8_t machine_pin_num_of_board_pins = {:d};".format(num_board_pins), + file=out_source, + ) + print("", file=out_source) + print( + "const pin_obj_t machine_board_pin_obj[{:d}] = {{".format(num_board_pins), + file=out_source, + ) for named_pin in self.cpu_pins: pin = named_pin.pin() if pin.is_board_pin(): - pin.print_const_table_entry() - print("};") - - def print(self): - self.print_named("cpu", self.cpu_pins) - print("") - self.print_named("board", self.board_pins) - - def print_adc(self, adc_num): - print("") - print("const pin_obj_t * const pin_adc{:d}[] = {{".format(adc_num)) - for channel in range(16): - adc_found = False - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if ( - pin.is_board_pin() - and (pin.adc_num & (1 << (adc_num - 1))) - and (pin.adc_channel == channel) - ): - print(" &pin_{:s}, // {:d}".format(pin.cpu_pin_name(), channel)) - adc_found = True - break - if not adc_found: - print(" NULL, // {:d}".format(channel)) - print("};") - - 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) - hdr_file.write("extern const pin_obj_t * const pin_adc1[];\n") - hdr_file.write("extern const pin_obj_t * const pin_adc2[];\n") - hdr_file.write("extern const pin_obj_t * const pin_adc3[];\n") - - def print_af_hdr(self, af_const_filename): - with open(af_const_filename, "wt") as af_const_file: - af_hdr_set = set([]) - mux_name_width = 0 - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - for af in pin.alt_fn: - if af.is_supported(): - mux_name = af.mux_name() - af_hdr_set |= set([mux_name]) - if len(mux_name) > mux_name_width: - mux_name_width = len(mux_name) - for mux_name in sorted(af_hdr_set): - key = "MP_ROM_QSTR(MP_QSTR_{}),".format(mux_name) - val = "MP_ROM_INT(GPIO_{})".format(mux_name) - print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=af_const_file) + pin.print_const_table_entry(out_source) + print("};", file=out_source) + + def print(self, out_source): + self.print_named("cpu", self.cpu_pins, out_source) + print("", file=out_source) + self.print_named("board", self.board_pins, out_source) + + def print_header(self, out_header): + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + pin.print_header(out_header) + print("extern const pin_obj_t * const pin_adc1[];", file=out_header) + print("extern const pin_obj_t * const pin_adc2[];", file=out_header) + print("extern const pin_obj_t * const pin_adc3[];", file=out_header) + + def print_af_hdr(self, out_af_const): + af_hdr_set = set([]) + mux_name_width = 0 + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + for af in pin.alt_fn: + if af.is_supported(): + mux_name = af.mux_name() + af_hdr_set |= set([mux_name]) + if len(mux_name) > mux_name_width: + mux_name_width = len(mux_name) + for mux_name in sorted(af_hdr_set): + key = "MP_ROM_QSTR(MP_QSTR_{}),".format(mux_name) + val = "MP_ROM_INT(GPIO_{})".format(mux_name) + print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=out_af_const) 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.csv", - ) - parser.add_argument( - "--af-const", - dest="af_const_filename", - help="Specifies header file for alternate function constants.", - default="build/pins_af_const.h", - ) - 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( - "-r", - "--hdr", - dest="hdr_filename", - help="Specifies name of generated pin header file", - default="build/pins.h", - ) - args = parser.parse_args(sys.argv[1:]) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + parser.add_argument("--output-af-const") + args = parser.parse_args() 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, 1, 2, 2) - - 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_const_table() - pins.print() - pins.print_header(args.hdr_filename) - pins.print_af_hdr(args.af_const_filename) + with open(args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv, 1, 2, 2) + + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) + + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + print("", file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) + + pins.print_const_table(out_source) + pins.print(out_source) + + with open(args.output_header, "w") as out_header: + pins.print_header(out_header) + + with open(args.output_af_const, "w") as out_af_const: + pins.print_af_hdr(out_af_const) if __name__ == "__main__": diff --git a/ports/renesas-ra/Makefile b/ports/renesas-ra/Makefile index 8c09dc91bd0a1..4e31029073085 100644 --- a/ports/renesas-ra/Makefile +++ b/ports/renesas-ra/Makefile @@ -580,7 +580,8 @@ $(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h .PRECIOUS: $(GEN_PINS_SRC) $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_ad_const.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --ad-const $(GEN_PINS_AD_CONST) > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) --output-ad-const $(GEN_PINS_AD_CONST) CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h diff --git a/ports/renesas-ra/boards/make-pins.py b/ports/renesas-ra/boards/make-pins.py index 43267a1fa3d7f..5eebbb49269ac 100644 --- a/ports/renesas-ra/boards/make-pins.py +++ b/ports/renesas-ra/boards/make-pins.py @@ -28,18 +28,19 @@ def bit(self): def channel(self): return self._channel - def print(self): + def print(self, out_source): print( "const pin_ad_obj_t pin_{:s}_ad_obj = PIN_AD({:s}, {:d}, {:d}, {:d});".format( self._cpu_pin_name, self._name, self._pin_idx, self._bit, self._channel - ) + ), + file=out_source, ) - print("") + print("", file=out_source) - def print_header(self, hdr_file): + def print_header(self, out_header): n = self.cpu_pin_name() - hdr_file.write("extern const pin_ad_obj_t pin_{:s}_ad_obj;\n".format(n)) - hdr_file.write("#define pin_{:s}_ad (&pin_{:s}_ad_obj)\n".format(n, n)) + print("extern const pin_ad_obj_t pin_{:s}_ad_obj;".format(n), file=out_header) + print("#define pin_{:s}_ad (&pin_{:s}_ad_obj)".format(n, n), file=out_header) class Pin(object): @@ -78,22 +79,23 @@ def parse_ad(self, ad_str): ad_channel = int(ad_str[2:4]) self._pin_ad.append(PinAD(ad_str, self._name, self._pin_idx, ad_bit, ad_channel)) - def print(self): + def print(self, out_source): pin_ad_name = "NULL" for pin_ad in self._pin_ad: - pin_ad.print() + pin_ad.print(out_source) pin_ad_name = "pin_{:s}_ad".format(pin_ad.cpu_pin_name()) print( "const machine_pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s});".format( self._name, self._name, self._pin_idx, pin_ad_name - ) + ), + file=out_source, ) - print("") + print("", file=out_source) - def print_header(self, hdr_file): + def print_header(self, out_header): n = self.cpu_pin_name() - hdr_file.write("extern const machine_pin_obj_t pin_{:s}_obj;\n".format(n)) - hdr_file.write("#define pin_{:s} (&pin_{:s}_obj)\n".format(n, n)) + print("extern const machine_pin_obj_t pin_{:s}_obj;".format(n), file=out_header) + print("#define pin_{:s} (&pin_{:s}_obj)".format(n, n), file=out_header) class NamedPin(object): @@ -152,9 +154,10 @@ def parse_board_file(self, filename): pin.set_is_board_pin() self.board_pins.append(NamedPin(board_pin_name, pin)) - def print_named(self, label, named_pins): + def print_named(self, label, named_pins, out_source): print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for named_pin in named_pins: pin = named_pin.pin() @@ -162,120 +165,93 @@ def print_named(self, label, named_pins): print( " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}_obj) }},".format( named_pin.name(), pin.cpu_pin_name() - ) + ), + file=out_source, ) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - def print(self): + def print(self, out_source): + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + pin.print(out_source) + self.print_named("cpu", self.cpu_pins, out_source) + print("", file=out_source) + self.print_named("board", self.board_pins, out_source) + + def print_header(self, out_header): + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + pin.print_header(out_header) + pin_ads = pin.pin_ad() + for pin_ad in pin_ads: + pin_ad.print_header(out_header) + # provide #define's mapping board to cpu name + for named_pin in self.board_pins: + print( + "#define pyb_pin_{:s} pin_{:s}".format( + named_pin.name(), named_pin.pin().cpu_pin_name() + ), + file=out_header, + ) + + def print_ad_hdr(self, out_ad_const): for named_pin in self.cpu_pins: pin = named_pin.pin() if pin.is_board_pin(): - pin.print() - self.print_named("cpu", self.cpu_pins) - print("") - self.print_named("board", 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) pin_ads = pin.pin_ad() for pin_ad in pin_ads: - pin_ad.print_header(hdr_file) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: - hdr_file.write( - "#define pyb_pin_{:s} pin_{:s}\n".format( - named_pin.name(), named_pin.pin().cpu_pin_name() + print( + " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_INT(GPIO_{:s}) }}, \n".format( + pin_ad.name(), pin_ad.name() + ), + file=out_ad_const, ) - ) - - def print_ad_hdr(self, ad_const_filename): - with open(ad_const_filename, "wt") as ad_const_file: - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin_ads = pin.pin_ad() - for pin_ad in pin_ads: - ad_const_file.write( - " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_INT(GPIO_{:s}) }}, \n".format( - pin_ad.name(), pin_ad.name() - ) - ) 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="ra4m1_af.csv", - ) - parser.add_argument( - "-b", "--board", dest="board_filename", help="Specifies the board file", default="pins.csv" - ) - parser.add_argument( - "-p", - "--prefix", - dest="prefix_filename", - help="Specifies beginning portion of generated pins file", - default="ra4m1_prefix.c", - ) - parser.add_argument( - "--ad-const", - dest="ad_const_filename", - help="Specifies header file for AD function constants.", - default="build/pins_ad_const.h", - ) - parser.add_argument( - "--af-defs", - dest="af_defs_filename", - help="Specifies the filename for the alternate function defines.", - default="build/pins_af_defs.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:]) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + parser.add_argument("--output-ad-const") + args = parser.parse_args() 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_ad_hdr(args.ad_const_filename) + with open(args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv) + + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) + + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + print("", file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) + + pins.print(out_source) + + with open(args.output_header, "w") as out_header: + pins.print_header(out_header) + + with open(args.output_ad_const, "w") as out_ad_const: + pins.print_ad_hdr(out_ad_const) if __name__ == "__main__": diff --git a/ports/rp2/CMakeLists.txt b/ports/rp2/CMakeLists.txt index f643b66793475..7b715c31faeb7 100644 --- a/ports/rp2/CMakeLists.txt +++ b/ports/rp2/CMakeLists.txt @@ -483,7 +483,7 @@ set(GEN_PINS_AF_CONST "${MICROPY_GENHDR_DIR}/pins_af_const.h") if(EXISTS "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") set(GEN_PINS_BOARD_CSV "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") - set(GEN_PINS_CSV_ARG --board "${GEN_PINS_BOARD_CSV}") + set(GEN_PINS_CSV_ARG --board-csv "${GEN_PINS_BOARD_CSV}") endif() target_sources(${MICROPY_TARGET} PRIVATE @@ -493,8 +493,7 @@ target_sources(${MICROPY_TARGET} PRIVATE # Generate pins add_custom_command( OUTPUT ${GEN_PINS_HDR} ${GEN_PINS_SRC} - COMMAND ${Python3_EXECUTABLE} ${GEN_PINS_MKPINS} ${GEN_PINS_CSV_ARG} --af ${GEN_PINS_AF_CSV} --prefix ${GEN_PINS_PREFIX} - --hdr ${GEN_PINS_HDR} > ${GEN_PINS_SRC} + COMMAND ${Python3_EXECUTABLE} ${GEN_PINS_MKPINS} ${GEN_PINS_CSV_ARG} --af-csv ${GEN_PINS_AF_CSV} --prefix ${GEN_PINS_PREFIX} --output-source ${GEN_PINS_SRC} --output-header ${GEN_PINS_HDR} DEPENDS ${GEN_PINS_AF_CSV} ${GEN_PINS_BOARD_CSV} diff --git a/ports/rp2/boards/make-pins.py b/ports/rp2/boards/make-pins.py index 9c66248885c62..4cf73d9900fb1 100755 --- a/ports/rp2/boards/make-pins.py +++ b/ports/rp2/boards/make-pins.py @@ -68,16 +68,19 @@ def __init__(self, idx, af_str): def is_supported(self): return self.supported - def print(self): + def print(self, out_source): """Prints the C representation of this AF.""" if self.supported: - print(" AF", end="") + print(" AF", end="", file=out_source) else: - print(" //", end="") + print(" //", end="", file=out_source) fn_num = self.fn_num if fn_num is None: fn_num = 0 - print("({:d}, {:4s}, {:d}), // {:s}".format(self.idx, self.func, fn_num, self.af_str)) + print( + "({:d}, {:4s}, {:d}), // {:s}".format(self.idx, self.func, fn_num, self.af_str), + file=out_source, + ) class Pin(object): @@ -116,19 +119,19 @@ def alt_fn_name(self, null_if_0=False): return "NULL" return "pin_{:s}_af".format(self.cpu_pin_name()) - def print(self): + def print(self, out_source): if self.is_ext: - print("#if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(self.pin)) + print("#if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(self.pin), file=out_source) if self.alt_fn_count == 0: - print("// ", end="") - print("const machine_pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name())) + print("// ", end="", file=out_source) + print("const machine_pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name()), file=out_source) for alt_fn in self.alt_fn: - alt_fn.print() + alt_fn.print(out_source) if self.alt_fn_count == 0: - print("// ", end="") - print("};") - print("") + print("// ", end="", file=out_source) + print("};", file=out_source) + print("", file=out_source) print( "{:s}machine_pin_obj_t pin_{:s} = PIN({:d}, {:s}, {:d}, {:d}, {:s});".format( "" if self.is_ext else "const ", @@ -138,19 +141,21 @@ def print(self): self.is_ext, self.alt_fn_count, self.alt_fn_name(null_if_0=True), - ) + ), + file=out_source, ) if self.is_ext: - print("#endif") - print("") + print("#endif", file=out_source) + print("", file=out_source) - def print_header(self, hdr_file): + def print_header(self, out_header): n = self.cpu_pin_name() - hdr_file.write( - "extern{:s}machine_pin_obj_t pin_{:s};\n".format(" " if self.is_ext else " const ", n) + print( + "extern{:s}machine_pin_obj_t pin_{:s};".format(" " if self.is_ext else " const ", n), + file=out_header, ) if self.alt_fn_count > 0: - hdr_file.write("extern const machine_pin_af_obj_t pin_{:s}_af[];\n".format(n)) + print("extern const machine_pin_af_obj_t pin_{:s}_af[];".format(n), file=out_header) class NamedPin(object): @@ -219,126 +224,107 @@ def parse_board_file(self, filename): if row[0]: # Only add board pins that have a name self.board_pins.append(NamedPin(row[0], pin)) - def print_table(self, label, named_pins): - print("") - print("const machine_pin_obj_t *machine_pin_{:s}_pins[] = {{".format(label)) + def print_table(self, label, named_pins, out_source): + print("", file=out_source) + print( + "const machine_pin_obj_t *machine_pin_{:s}_pins[] = {{".format(label), file=out_source + ) for pin in named_pins: if not pin.pin().is_ext: - print(" &pin_{},".format(pin.name())) - print("};") - print("") + print(" &pin_{},".format(pin.name()), file=out_source) + print("};", file=out_source) + print("", file=out_source) - def print_named(self, label, named_pins): - print("") + def print_named(self, label, named_pins, out_source): + print("", file=out_source) print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for named_pin in named_pins: pin = named_pin.pin() if pin.is_ext: - print(" #if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(pin.pin)) + print(" #if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(pin.pin), file=out_source) print( " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},".format( named_pin.name(), pin.cpu_pin_name() - ) + ), + file=out_source, ) if pin.is_ext: - print(" #endif") + print(" #endif", file=out_source) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - print("") + print("", file=out_source) - def print(self): + def print(self, out_source): for pin in self.cpu_pins: - pin.pin().print() + pin.pin().print(out_source) for pin in self.ext_pins: if pin.pin().is_ext: - pin.pin().print() - - self.print_table("cpu", self.cpu_pins) - self.print_named("cpu", self.cpu_pins + self.ext_pins) - self.print_named("board", self.board_pins) - - def print_header(self, hdr_filename, obj_decls): - with open(hdr_filename, "wt") as hdr_file: - if obj_decls: - for named_pin in self.cpu_pins: - pin = named_pin.pin() - pin.print_header(hdr_file) - for named_pin in self.board_pins: - pin = named_pin.pin() - if pin.is_ext: - pin.print_header(hdr_file) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: - if named_pin.pin().is_board_pin(): - hdr_file.write( - "#define pin_{:s} pin_{:s}\n".format( - named_pin.name(), named_pin.pin().cpu_pin_name() - ) - ) + pin.pin().print(out_source) + + self.print_table("cpu", self.cpu_pins, out_source) + self.print_named("cpu", self.cpu_pins + self.ext_pins, out_source) + self.print_named("board", self.board_pins, out_source) + + def print_header(self, out_header): + for named_pin in self.cpu_pins: + pin = named_pin.pin() + pin.print_header(out_header) + for named_pin in self.board_pins: + pin = named_pin.pin() + if pin.is_ext: + pin.print_header(out_header) + # provide #define's mapping board to cpu name + for named_pin in self.board_pins: + if named_pin.pin().is_board_pin(): + print( + "#define pin_{:s} pin_{:s}".format( + named_pin.name(), named_pin.pin().cpu_pin_name() + ), + file=out_header, + ) 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="rp2_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="rp2_prefix.c", - ) - 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:]) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + args = parser.parse_args() 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, 0, 1) - - 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, True) + with open(args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv, 0, 1) + + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) + + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + print("", file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) + pins.print(out_source) + + with open(args.output_header, "w") as out_header: + pins.print_header(out_header) if __name__ == "__main__": diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index 8d521182ffe7d..edebd2db9d8f0 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -673,10 +673,9 @@ main.c: $(GEN_CDCINF_HEADER) # both pins_$(BOARD).c and pins.h $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) \ - --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --hdr-obj-decls \ - --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ - --af-defs-cmp-strings > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) \ + --output-af-const $(GEN_PINS_AF_CONST) --output-af-defs $(GEN_PINS_AF_DEFS) modmachine.c: $(GEN_PLLFREQTABLE_HDR) $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index 99b507a3a870a..92e8d7673406a 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -116,7 +116,7 @@ def conditional_var(name_num): return var -def print_conditional_if(cond_var, file=None): +def print_conditional_if(cond_var, file): if cond_var: cond_str = [] for var in cond_var: @@ -127,7 +127,7 @@ def print_conditional_if(cond_var, file=None): print("#if " + " || ".join(cond_str), file=file) -def print_conditional_endif(cond_var, file=None): +def print_conditional_endif(cond_var, file): if cond_var: print("#endif", file=file) @@ -169,24 +169,25 @@ def ptr(self): def mux_name(self): return "AF{:d}_{:s}".format(self.idx, self.ptr()) - def print(self): + def print(self, out_source): """Prints the C representation of this AF.""" cond_var = None if self.supported: cond_var = conditional_var("{}{}".format(self.func, self.fn_num)) - print_conditional_if(cond_var) - print(" AF", end="") + print_conditional_if(cond_var, file=out_source) + print(" AF", end="", file=out_source) else: - print(" //", end="") + print(" //", end="", file=out_source) fn_num = self.fn_num if fn_num is None: fn_num = 0 print( "({:2d}, {:8s}, {:2d}, {:10s}, {:8s}), // {:s}".format( self.idx, self.func, fn_num, self.pin_type, self.ptr(), self.af_str - ) + ), + file=out_source, ) - print_conditional_endif(cond_var) + print_conditional_endif(cond_var, file=out_source) class Pin(object): @@ -269,16 +270,16 @@ def adc_num_str(self): str = "0" return str - def print(self): + def print(self, out_source): if self.alt_fn_count == 0: - print("// ", end="") - print("const pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name())) + print("// ", end="", file=out_source) + print("const pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name()), file=out_source) for alt_fn in self.alt_fn: - alt_fn.print() + alt_fn.print(out_source) if self.alt_fn_count == 0: - print("// ", end="") - print("};") - print("") + print("// ", end="", file=out_source) + print("};", file=out_source) + print("", file=out_source) print( "const pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s}, {:s}, {:d});".format( self.cpu_pin_name(), @@ -287,16 +288,17 @@ def print(self): self.alt_fn_name(null_if_0=True), self.adc_num_str(), self.adc_channel, - ) + ), + file=out_source, ) - print("") + print("", file=out_source) - def print_header(self, hdr_file): + def print_header(self, out_header): n = self.cpu_pin_name() - hdr_file.write("extern const pin_obj_t pin_{:s}_obj;\n".format(n)) - hdr_file.write("#define pin_{:s} (&pin_{:s}_obj)\n".format(n, n)) + print("extern const pin_obj_t pin_{:s}_obj;".format(n), file=out_header) + print("#define pin_{:s} (&pin_{:s}_obj)".format(n, n), file=out_header) if self.alt_fn_count > 0: - hdr_file.write("extern const pin_af_obj_t pin_{:s}_af[];\n".format(n)) + print("extern const pin_af_obj_t pin_{:s}_af[];".format(n), file=out_header) class NamedPin(object): @@ -377,9 +379,10 @@ def parse_board_file(self, filename): if row[0]: # Only add board pins that have a name self.board_pins.append(NamedPin(row[0], pin)) - def print_named(self, label, named_pins): + def print_named(self, label, named_pins, out_source): print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label) + "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + file=out_source, ) for named_pin in named_pins: pin = named_pin.pin() @@ -387,25 +390,27 @@ def print_named(self, label, named_pins): print( " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}_obj) }},".format( named_pin.name(), pin.cpu_pin_name() - ) + ), + file=out_source, ) - print("};") + print("};", file=out_source) print( "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( label, label - ) + ), + file=out_source, ) - def print(self): + def print(self, out_source): for named_pin in self.cpu_pins: pin = named_pin.pin() if pin.is_board_pin(): - pin.print() - self.print_named("cpu", self.cpu_pins) - print("") - self.print_named("board", self.board_pins) + pin.print(out_source) + self.print_named("cpu", self.cpu_pins, out_source) + print("", file=out_source) + self.print_named("board", self.board_pins, out_source) - def print_adc(self, adc_num): + def print_adc(self, adc_num, out_source): adc_pins = {} for named_pin in self.cpu_pins: pin = named_pin.pin() @@ -421,171 +426,134 @@ def print_adc(self, adc_num): # If ADCx pins are hidden, print an empty table to prevent linker errors. table_size = 0 self.adc_table_size[adc_num] = table_size - print("") - print("const pin_obj_t * const pin_adc{:d}[{:d}] = {{".format(adc_num, table_size)) + print("", file=out_source) + print( + "const pin_obj_t * const pin_adc{:d}[{:d}] = {{".format(adc_num, table_size), + file=out_source, + ) for channel in range(table_size): if channel in adc_pins: obj = "&pin_{:s}_obj".format(adc_pins[channel].cpu_pin_name()) else: obj = "NULL" - print(" [{:d}] = {},".format(channel, obj)) - print("};") + print(" [{:d}] = {},".format(channel, obj), file=out_source) + print("};", file=out_source) - def print_header(self, hdr_filename, obj_decls): - with open(hdr_filename, "wt") as hdr_file: - if obj_decls: - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin.print_header(hdr_file) - for adc_num, table_size in self.adc_table_size.items(): - hdr_file.write( - "extern const pin_obj_t * const pin_adc{:d}[{:d}];\n".format( - adc_num, table_size - ) - ) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: - hdr_file.write( - "#define pyb_pin_{:s} pin_{:s}\n".format( - named_pin.name(), named_pin.pin().cpu_pin_name() - ) - ) - - def print_af_hdr(self, af_const_filename): - with open(af_const_filename, "wt") as af_const_file: - af_hdr_set = set([]) - mux_name_width = 0 + def print_header(self, out_header, obj_decls): + if obj_decls: for named_pin in self.cpu_pins: pin = named_pin.pin() if pin.is_board_pin(): - for af in pin.alt_fn: - if af.is_supported(): - mux_name = af.mux_name() - af_hdr_set |= set([mux_name]) - if len(mux_name) > mux_name_width: - mux_name_width = len(mux_name) - for mux_name in sorted(af_hdr_set): - af_words = mux_name.split("_") # ex mux_name: AF9_I2C2 - cond_var = conditional_var(af_words[1]) - print_conditional_if(cond_var, file=af_const_file) - key = "MP_ROM_QSTR(MP_QSTR_{}),".format(mux_name) - val = "MP_ROM_INT(GPIO_{})".format(mux_name) - print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=af_const_file) - print_conditional_endif(cond_var, file=af_const_file) - - def print_af_defs(self, af_defs_filename, cmp_strings): - with open(af_defs_filename, "wt") as af_defs_file: - STATIC_AF_TOKENS = {} - for named_pin in self.cpu_pins: - for af in named_pin.pin().alt_fn: - func = "%s%d" % (af.func, af.fn_num) if af.fn_num else af.func - pin_type = (af.pin_type or "NULL").split("(")[0] - tok = "#define STATIC_AF_%s_%s(pin_obj) ( \\" % (func, pin_type) - if tok not in STATIC_AF_TOKENS: - STATIC_AF_TOKENS[tok] = [] - if cmp_strings: - pin_name = named_pin.pin().cpu_pin_name() - cmp_str = ( - ' ((strcmp( #pin_obj , "(&pin_%s_obj)") ' - ' & strcmp( #pin_obj , "((&pin_%s_obj))")) == 0) ? (%d) : \\' - % (pin_name, pin_name, af.idx) - ) - else: - cmp_str = " ((pin_obj) == (pin_%s)) ? (%d) : \\" % ( - named_pin.pin().cpu_pin_name(), - af.idx, - ) - STATIC_AF_TOKENS[tok].append(cmp_str) - - for tok, pins in STATIC_AF_TOKENS.items(): - print(tok, file=af_defs_file) - print("\n".join(sorted(pins)), file=af_defs_file) - print(" (0xffffffffffffffffULL))\n", file=af_defs_file) + pin.print_header(out_header) + for adc_num, table_size in self.adc_table_size.items(): + print( + "extern const pin_obj_t * const pin_adc{:d}[{:d}];".format( + adc_num, table_size + ), + file=out_header, + ) + # provide #define's mapping board to cpu name + for named_pin in self.board_pins: + print( + "#define pyb_pin_{:s} pin_{:s}".format( + named_pin.name(), named_pin.pin().cpu_pin_name() + ), + file=out_header, + ) + + def print_af_hdr(self, out_af_const): + af_hdr_set = set([]) + mux_name_width = 0 + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + for af in pin.alt_fn: + if af.is_supported(): + mux_name = af.mux_name() + af_hdr_set |= set([mux_name]) + if len(mux_name) > mux_name_width: + mux_name_width = len(mux_name) + for mux_name in sorted(af_hdr_set): + af_words = mux_name.split("_") # ex mux_name: AF9_I2C2 + cond_var = conditional_var(af_words[1]) + print_conditional_if(cond_var, file=out_af_const) + key = "MP_ROM_QSTR(MP_QSTR_{}),".format(mux_name) + val = "MP_ROM_INT(GPIO_{})".format(mux_name) + print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=out_af_const) + print_conditional_endif(cond_var, file=out_af_const) + + def print_af_defs(self, out_af_defs, cmp_strings): + STATIC_AF_TOKENS = {} + for named_pin in self.cpu_pins: + for af in named_pin.pin().alt_fn: + func = "%s%d" % (af.func, af.fn_num) if af.fn_num else af.func + pin_type = (af.pin_type or "NULL").split("(")[0] + tok = "#define STATIC_AF_%s_%s(pin_obj) ( \\" % (func, pin_type) + if tok not in STATIC_AF_TOKENS: + STATIC_AF_TOKENS[tok] = [] + if cmp_strings: + pin_name = named_pin.pin().cpu_pin_name() + cmp_str = ( + ' ((strcmp( #pin_obj , "(&pin_%s_obj)") ' + ' & strcmp( #pin_obj , "((&pin_%s_obj))")) == 0) ? (%d) : \\' + % (pin_name, pin_name, af.idx) + ) + else: + cmp_str = " ((pin_obj) == (pin_%s)) ? (%d) : \\" % ( + named_pin.pin().cpu_pin_name(), + af.idx, + ) + STATIC_AF_TOKENS[tok].append(cmp_str) + + for tok, pins in STATIC_AF_TOKENS.items(): + print(tok, file=out_af_defs) + print("\n".join(sorted(pins)), file=out_af_defs) + print(" (0xffffffffffffffffULL))\n", file=out_af_defs) 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="stm32f4xx_af.csv", - ) - parser.add_argument( - "--af-const", - dest="af_const_filename", - help="Specifies header file for alternate function constants.", - default="build/pins_af_const.h", - ) - parser.add_argument( - "--af-defs", - dest="af_defs_filename", - help="Specifies the filename for the alternate function defines.", - default="build/pins_af_defs.h", - ) - parser.add_argument( - "--af-defs-cmp-strings", - dest="af_defs_cmp_strings", - help="Whether to compare pin name strings for the alternate function defines instead of object values", - action="store_true", - ) - 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="stm32f4xx_prefix.c", - ) - parser.add_argument( - "-r", - "--hdr", - dest="hdr_filename", - help="Specifies name of generated pin header file", - default="build/pins.h", - ) - parser.add_argument( - "--hdr-obj-decls", - dest="hdr_obj_decls", - help="Whether to include declarations for pin objects in pin header file", - action="store_true", - ) - args = parser.parse_args(sys.argv[1:]) + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + parser.add_argument("--output-af-const") + parser.add_argument("--output-af-defs") + parser.add_argument("--mboot-mode", action="store_true") + args = parser.parse_args() 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, 1, 2) - - 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() - for i in range(1, 4): - pins.print_adc(i) - pins.print_header(args.hdr_filename, args.hdr_obj_decls) - pins.print_af_hdr(args.af_const_filename) - pins.print_af_defs(args.af_defs_filename, args.af_defs_cmp_strings) + with open(args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + if args.af_csv: + print("// --af {:s}".format(args.af_csv), file=out_source) + pins.parse_af_file(args.af_csv, 1, 2) + + if args.board_csv: + print("// --board {:s}".format(args.board_csv), file=out_source) + pins.parse_board_file(args.board_csv) + + if args.prefix: + print("// --prefix {:s}".format(args.prefix), file=out_source) + print("", file=out_source) + with open(args.prefix, "r") as prefix_file: + print(prefix_file.read(), file=out_source) + + pins.print(out_source) + for i in range(1, 4): + pins.print_adc(i, out_source) + + with open(args.output_header, "w") as out_header: + pins.print_header(out_header, not args.mboot_mode) + + with open(args.output_af_const, "w") as out_af_const: + pins.print_af_hdr(out_af_const) + + with open(args.output_af_defs, "w") as out_af_defs: + pins.print_af_defs(out_af_defs, not args.mboot_mode) if __name__ == "__main__": diff --git a/ports/stm32/mboot/Makefile b/ports/stm32/mboot/Makefile index fab8ce2159012..7be5cca69d7ad 100755 --- a/ports/stm32/mboot/Makefile +++ b/ports/stm32/mboot/Makefile @@ -243,10 +243,10 @@ $(GEN_ROOT_POINTERS): | $(HEADER_BUILD) $(GEN_PINS_AF_DEFS): $(BOARD_PINS) $(MAKE_PINS) ../$(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" - $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af ../$(AF_FILE) \ - --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) \ - --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ - > $(GEN_PINS_SRC) + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv ../$(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) \ + --output-af-const $(GEN_PINS_AF_CONST) --output-af-defs $(GEN_PINS_AF_DEFS) \ + --mboot-mode ######################################### From b0aec6a0ff71e6dc02495756c881593bc1bc90dc Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Mon, 7 Aug 2023 15:52:39 +1000 Subject: [PATCH 10/20] esp32/machine_pin: Make irq object a sub-field of pin object. This simplifies pin generation. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/esp32/boards/make-pins.py | 13 +++-- ports/esp32/machine_pin.c | 87 ++++++++++++++++++--------------- ports/esp32/machine_pin.h | 10 ++-- 3 files changed, 58 insertions(+), 52 deletions(-) diff --git a/ports/esp32/boards/make-pins.py b/ports/esp32/boards/make-pins.py index 4813724dd6d88..2054274690f59 100755 --- a/ports/esp32/boards/make-pins.py +++ b/ports/esp32/boards/make-pins.py @@ -78,17 +78,17 @@ def parse_board_file(self, filename): if row[0]: # Only add board pins that have a name self.board_pins.append(NamedPin(row[0], pin)) - def print_table(self, label, named_pins, out_source): + def print_cpu_table(self, out_source): print("", file=out_source) print( - "const machine_{}_obj_t machine_{}_obj_table[GPIO_NUM_MAX] = {{".format(label, label), + "const machine_pin_obj_t machine_pin_obj_table[GPIO_NUM_MAX] = {", file=out_source, ) - for pin in named_pins: + for pin in self.cpu_pins: print(" #if MICROPY_HW_ENABLE_{}".format(pin.name()), file=out_source) print( - " [GPIO_NUM_{}] = {{ .base = {{ .type = &machine_{}_type }} }},".format( - pin.pin().pin, label + " [GPIO_NUM_{}] = {{ .base = {{ .type = &machine_pin_type }}, .irq = {{ .base = {{ .type = &machine_pin_irq_type }} }} }},".format( + pin.pin().pin, ), file=out_source, ) @@ -121,8 +121,7 @@ def print_named(self, label, named_pins, out_source): ) def print_tables(self, out_source): - self.print_table("pin", self.cpu_pins, out_source) - self.print_table("pin_irq", self.cpu_pins, out_source) + self.print_cpu_table(out_source) self.print_named("board", self.board_pins, out_source) def print_header(self, out_header): diff --git a/ports/esp32/machine_pin.c b/ports/esp32/machine_pin.c index d521e08e5141d..34c6512c8da79 100644 --- a/ports/esp32/machine_pin.c +++ b/ports/esp32/machine_pin.c @@ -58,9 +58,10 @@ #define GPIO_FIRST_NON_OUTPUT (46) #endif -// Return the gpio_num_t index for a given pin or pin-irq object. -#define PIN_OBJ_INDEX(self) ((self) - &machine_pin_obj_table[0]) -#define PIN_IRQ_OBJ_INDEX(self) ((self) - &machine_pin_irq_obj_table[0]) +// Return the gpio_num_t index for a given machine_pin_obj_t pointer. +#define PIN_OBJ_PTR_INDEX(self) ((self) - &machine_pin_obj_table[0]) +// Return the machine_pin_obj_t pointer corresponding to a machine_pin_irq_obj_t pointer. +#define PIN_OBJ_PTR_FROM_IRQ_OBJ_PTR(self) ((machine_pin_obj_t *)((uintptr_t)(self) - offsetof(machine_pin_obj_t, irq))) STATIC const machine_pin_obj_t *machine_pin_find_named(const mp_obj_dict_t *named_pins, mp_obj_t name) { const mp_map_t *named_map = &named_pins->map; @@ -90,7 +91,7 @@ void machine_pins_deinit(void) { STATIC void machine_pin_isr_handler(void *arg) { machine_pin_obj_t *self = arg; - mp_obj_t handler = MP_STATE_PORT(machine_pin_irq_handler)[PIN_OBJ_INDEX(self)]; + mp_obj_t handler = MP_STATE_PORT(machine_pin_irq_handler)[PIN_OBJ_PTR_INDEX(self)]; mp_sched_schedule(handler, MP_OBJ_FROM_PTR(self)); mp_hal_wake_main_task_from_isr(); } @@ -124,12 +125,12 @@ STATIC const machine_pin_obj_t *machine_pin_find(mp_obj_t pin_in) { gpio_num_t machine_pin_get_id(mp_obj_t pin_in) { const machine_pin_obj_t *self = machine_pin_find(pin_in); - return PIN_OBJ_INDEX(self); + return PIN_OBJ_PTR_INDEX(self); } STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { machine_pin_obj_t *self = self_in; - mp_printf(print, "Pin(%u)", PIN_OBJ_INDEX(self)); + mp_printf(print, "Pin(%u)", PIN_OBJ_PTR_INDEX(self)); } // pin.init(mode=None, pull=-1, *, value, drive, hold) @@ -147,34 +148,36 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_ mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + gpio_num_t index = PIN_OBJ_PTR_INDEX(self); + // reset the pin to digital if this is a mode-setting init (grab it back from ADC) if (args[ARG_mode].u_obj != mp_const_none) { - if (rtc_gpio_is_valid_gpio(PIN_OBJ_INDEX(self))) { + if (rtc_gpio_is_valid_gpio(index)) { #if !CONFIG_IDF_TARGET_ESP32C3 - rtc_gpio_deinit(PIN_OBJ_INDEX(self)); + rtc_gpio_deinit(index); #endif } } #if CONFIG_IDF_TARGET_ESP32C3 - if (PIN_OBJ_INDEX(self) == 18 || PIN_OBJ_INDEX(self) == 19) { + if (index == 18 || index == 19) { CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_USB_PAD_ENABLE); } #endif // configure the pin for gpio - esp_rom_gpio_pad_select_gpio(PIN_OBJ_INDEX(self)); + esp_rom_gpio_pad_select_gpio(index); // set initial value (do this before configuring mode/pull) if (args[ARG_value].u_obj != MP_OBJ_NULL) { - gpio_set_level(PIN_OBJ_INDEX(self), mp_obj_is_true(args[ARG_value].u_obj)); + gpio_set_level(index, mp_obj_is_true(args[ARG_value].u_obj)); } // set drive capability (do this before configuring mode) - if (args[ARG_drive].u_obj != MP_OBJ_NULL && GPIO_IS_VALID_OUTPUT_GPIO(PIN_OBJ_INDEX(self))) { + if (args[ARG_drive].u_obj != MP_OBJ_NULL && GPIO_IS_VALID_OUTPUT_GPIO(index)) { mp_int_t strength = mp_obj_get_int(args[ARG_drive].u_obj); if (0 <= strength && strength < GPIO_DRIVE_CAP_MAX) { - gpio_set_drive_capability(PIN_OBJ_INDEX(self), strength); + gpio_set_drive_capability(index, strength); } } @@ -182,11 +185,11 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_ if (args[ARG_mode].u_obj != mp_const_none) { mp_int_t pin_io_mode = mp_obj_get_int(args[ARG_mode].u_obj); #ifdef GPIO_FIRST_NON_OUTPUT - if (PIN_OBJ_INDEX(self) >= GPIO_FIRST_NON_OUTPUT && (pin_io_mode & GPIO_MODE_DEF_OUTPUT)) { + if (index >= GPIO_FIRST_NON_OUTPUT && (pin_io_mode & GPIO_MODE_DEF_OUTPUT)) { mp_raise_ValueError(MP_ERROR_TEXT("pin can only be input")); } #endif - gpio_set_direction(PIN_OBJ_INDEX(self), pin_io_mode); + gpio_set_direction(index, pin_io_mode); } // configure pull @@ -196,24 +199,24 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_ mode = mp_obj_get_int(args[ARG_pull].u_obj); } if (mode & GPIO_PULL_DOWN) { - gpio_pulldown_en(PIN_OBJ_INDEX(self)); + gpio_pulldown_en(index); } else { - gpio_pulldown_dis(PIN_OBJ_INDEX(self)); + gpio_pulldown_dis(index); } if (mode & GPIO_PULL_UP) { - gpio_pullup_en(PIN_OBJ_INDEX(self)); + gpio_pullup_en(index); } else { - gpio_pullup_dis(PIN_OBJ_INDEX(self)); + gpio_pullup_dis(index); } } // configure pad hold - if (args[ARG_hold].u_obj != MP_OBJ_NULL && GPIO_IS_VALID_OUTPUT_GPIO(PIN_OBJ_INDEX(self))) { + if (args[ARG_hold].u_obj != MP_OBJ_NULL && GPIO_IS_VALID_OUTPUT_GPIO(index)) { // always disable pad hold to apply outstanding config changes - gpio_hold_dis(PIN_OBJ_INDEX(self)); + gpio_hold_dis(index); // (re-)enable pad hold if requested if (mp_obj_is_true(args[ARG_hold].u_obj)) { - gpio_hold_en(PIN_OBJ_INDEX(self)); + gpio_hold_en(index); } } @@ -241,12 +244,13 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, STATIC mp_obj_t machine_pin_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); machine_pin_obj_t *self = self_in; + gpio_num_t index = PIN_OBJ_PTR_INDEX(self); if (n_args == 0) { // get pin - return MP_OBJ_NEW_SMALL_INT(gpio_get_level(PIN_OBJ_INDEX(self))); + return MP_OBJ_NEW_SMALL_INT(gpio_get_level(index)); } else { // set pin - gpio_set_level(PIN_OBJ_INDEX(self), mp_obj_is_true(args[0])); + gpio_set_level(index, mp_obj_is_true(args[0])); return mp_const_none; } } @@ -266,7 +270,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_pin_value_obj, 1, 2, machine_ // pin.off() STATIC mp_obj_t machine_pin_off(mp_obj_t self_in) { machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); - gpio_set_level(PIN_OBJ_INDEX(self), 0); + gpio_set_level(PIN_OBJ_PTR_INDEX(self), 0); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_off_obj, machine_pin_off); @@ -274,7 +278,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_off_obj, machine_pin_off); // pin.on() STATIC mp_obj_t machine_pin_on(mp_obj_t self_in) { machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); - gpio_set_level(PIN_OBJ_INDEX(self), 1); + gpio_set_level(PIN_OBJ_PTR_INDEX(self), 1); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_on_obj, machine_pin_on); @@ -293,6 +297,7 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_ if (n_args > 1 || kw_args->used != 0) { // configure irq + gpio_num_t index = PIN_OBJ_PTR_INDEX(self); mp_obj_t handler = args[ARG_handler].u_obj; uint32_t trigger = args[ARG_trigger].u_int; mp_obj_t wake_obj = args[ARG_wake].u_obj; @@ -311,20 +316,20 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_ mp_raise_ValueError(MP_ERROR_TEXT("no resources")); } - if (!RTC_IS_VALID_EXT_PIN(PIN_OBJ_INDEX(self))) { + if (!RTC_IS_VALID_EXT_PIN(index)) { mp_raise_ValueError(MP_ERROR_TEXT("invalid pin for wake")); } if (machine_rtc_config.ext0_pin == -1) { - machine_rtc_config.ext0_pin = PIN_OBJ_INDEX(self); - } else if (machine_rtc_config.ext0_pin != PIN_OBJ_INDEX(self)) { + machine_rtc_config.ext0_pin = index; + } else if (machine_rtc_config.ext0_pin != index) { mp_raise_ValueError(MP_ERROR_TEXT("no resources")); } machine_rtc_config.ext0_level = trigger == GPIO_INTR_LOW_LEVEL ? 0 : 1; machine_rtc_config.ext0_wake_types = wake; } else { - if (machine_rtc_config.ext0_pin == PIN_OBJ_INDEX(self)) { + if (machine_rtc_config.ext0_pin == index) { machine_rtc_config.ext0_pin = -1; } @@ -332,15 +337,15 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_ handler = MP_OBJ_NULL; trigger = 0; } - gpio_isr_handler_remove(PIN_OBJ_INDEX(self)); - MP_STATE_PORT(machine_pin_irq_handler)[PIN_OBJ_INDEX(self)] = handler; - gpio_set_intr_type(PIN_OBJ_INDEX(self), trigger); - gpio_isr_handler_add(PIN_OBJ_INDEX(self), machine_pin_isr_handler, (void *)self); + gpio_isr_handler_remove(index); + MP_STATE_PORT(machine_pin_irq_handler)[index] = handler; + gpio_set_intr_type(index, trigger); + gpio_isr_handler_add(index, machine_pin_isr_handler, (void *)self); } } // return the irq object - return MP_OBJ_FROM_PTR(&machine_pin_irq_obj_table[PIN_OBJ_INDEX(self)]); + return MP_OBJ_FROM_PTR(&self->irq); } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_pin_irq_obj, 1, machine_pin_irq); @@ -381,13 +386,14 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = { STATIC mp_uint_t pin_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) { (void)errcode; machine_pin_obj_t *self = self_in; + gpio_num_t index = PIN_OBJ_PTR_INDEX(self); switch (request) { case MP_PIN_READ: { - return gpio_get_level(PIN_OBJ_INDEX(self)); + return gpio_get_level(index); } case MP_PIN_WRITE: { - gpio_set_level(PIN_OBJ_INDEX(self), arg); + gpio_set_level(index, arg); return 0; } } @@ -417,16 +423,17 @@ MP_DEFINE_CONST_OBJ_TYPE( STATIC mp_obj_t machine_pin_irq_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { machine_pin_irq_obj_t *self = self_in; mp_arg_check_num(n_args, n_kw, 0, 0, false); - machine_pin_isr_handler((void *)&machine_pin_obj_table[PIN_IRQ_OBJ_INDEX(self)]); + machine_pin_isr_handler((void *)PIN_OBJ_PTR_FROM_IRQ_OBJ_PTR(self)); return mp_const_none; } STATIC mp_obj_t machine_pin_irq_trigger(size_t n_args, const mp_obj_t *args) { machine_pin_irq_obj_t *self = args[0]; - uint32_t orig_trig = GPIO.pin[PIN_IRQ_OBJ_INDEX(self)].int_type; + gpio_num_t index = PIN_OBJ_PTR_INDEX(PIN_OBJ_PTR_FROM_IRQ_OBJ_PTR(self)); + uint32_t orig_trig = GPIO.pin[index].int_type; if (n_args == 2) { // set trigger - gpio_set_intr_type(PIN_IRQ_OBJ_INDEX(self), mp_obj_get_int(args[1])); + gpio_set_intr_type(index, mp_obj_get_int(args[1])); } // return original trigger value return MP_OBJ_NEW_SMALL_INT(orig_trig); diff --git a/ports/esp32/machine_pin.h b/ports/esp32/machine_pin.h index dbbaac2219be9..53f9c6bdad7cd 100644 --- a/ports/esp32/machine_pin.h +++ b/ports/esp32/machine_pin.h @@ -146,18 +146,18 @@ #endif -typedef struct _machine_pin_obj_t { - mp_obj_base_t base; -} machine_pin_obj_t; - typedef struct _machine_pin_irq_obj_t { mp_obj_base_t base; } machine_pin_irq_obj_t; +typedef struct _machine_pin_obj_t { + mp_obj_base_t base; + machine_pin_irq_obj_t irq; +} machine_pin_obj_t; + extern const mp_obj_type_t machine_pin_irq_type; extern const machine_pin_obj_t machine_pin_obj_table[GPIO_NUM_MAX]; -extern const machine_pin_irq_obj_t machine_pin_irq_obj_table[GPIO_NUM_MAX]; extern const mp_obj_dict_t machine_pin_board_pins_locals_dict; From 4bd6ec9ae40770c337b470293da078cc09ade0d5 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Mon, 7 Aug 2023 17:08:10 +1000 Subject: [PATCH 11/20] tools/boardgen.py: Add initial implementation of a common make-pins.py. For now, this implements the functionality required for esp32 and rp2, including support for numeric pins, rp2 alternate functions, and rp2 extended pins. This also updates the rp2 port to use the same structure for pins.h and pins.csv as for esp32, and moves the pin definitions directly into the table (rather than having a table of pointers), which is a small code size improvement. Support for "hidden" pins in pins.csv is added (matching the stm32 implementation). This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/esp32/boards/make-pins.py | 203 +++---------- ports/rp2/CMakeLists.txt | 1 - ports/rp2/boards/make-pins.py | 414 +++++++------------------- ports/rp2/machine_pin.c | 18 +- ports/rp2/machine_pin.h | 4 +- tools/boardgen.py | 506 ++++++++++++++++++++++++++++++++ 6 files changed, 669 insertions(+), 477 deletions(-) create mode 100644 tools/boardgen.py diff --git a/ports/esp32/boards/make-pins.py b/ports/esp32/boards/make-pins.py index 2054274690f59..49b10f0ce15c9 100755 --- a/ports/esp32/boards/make-pins.py +++ b/ports/esp32/boards/make-pins.py @@ -1,182 +1,67 @@ #!/usr/bin/env python -import argparse +import os import sys -import csv -import re -MAX_CPU_PINS = 49 +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen -def parse_pin(name_str): - """Parses a string and returns a pin number.""" - if len(name_str) < 2: - raise ValueError("Expecting pin name to be at least 2 characters.") - if not name_str.startswith("GPIO"): - raise ValueError("Expecting pin name to start with GPIO") - return int(re.findall(r"\d+$", name_str)[0]) +# Pins start at zero, and the highest pin index on any ESP32* chip is 48. +NUM_GPIOS = 49 -class Pin: - def __init__(self, pin): - self.pin = pin - self.is_board = False +class Esp32Pin(boardgen.Pin): + # Required by NumericPinGenerator. + def index(self): + return int(self._cpu_pin_name[4:]) - def cpu_pin_name(self): - return "GPIO{:d}".format(self.pin) + # The IDF provides `GPIO_NUM_x = x` as an enum. + def index_name(self): + return "GPIO_NUM_{:d}".format(self.index()) - def is_board_pin(self): - return self.is_board + # Emit the combined struct which contains both the pin and irq instances. + def definition(self): + return "{ .base = { .type = &machine_pin_type }, .irq = { .base = { .type = &machine_pin_irq_type } } }" - def set_is_board_pin(self): - self.is_board = True + # This script isn't family-aware, so we always emit the maximum number of + # pins and rely on the `MICROPY_HW_ENABLE_GPIOn` macros defined in + # machine_pin.h to figure out which ones are actually available. + def enable_macro(self): + return "MICROPY_HW_ENABLE_{}".format(self._cpu_pin_name) + # ESP32 cpu names must be "GPIOn". + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) -class NamedPin: - 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: - def __init__(self): - self.cpu_pins = [] # list of NamedPin objects - self.board_pins = [] # list of NamedPin objects - - def find_pin(self, pin_name): - for pin in self.cpu_pins: - if pin.name() == pin_name: - return pin.pin() - - def create_pins(self): - for pin_num in range(MAX_CPU_PINS): - pin = Pin(pin_num) - 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: - if len(row) == 0 or row[0].startswith("#"): - # Skip empty lines, and lines starting with "#" - continue - if len(row) != 2: - raise ValueError("Expecting two entries in a row") - - cpu_pin_name = row[1] - parse_pin(cpu_pin_name) - pin = self.find_pin(cpu_pin_name) - if not pin: - raise ValueError("Unknown pin {}".format(cpu_pin_name)) - pin.set_is_board_pin() - if row[0]: # Only add board pins that have a name - self.board_pins.append(NamedPin(row[0], pin)) - - def print_cpu_table(self, out_source): - print("", file=out_source) - print( - "const machine_pin_obj_t machine_pin_obj_table[GPIO_NUM_MAX] = {", - file=out_source, - ) - for pin in self.cpu_pins: - print(" #if MICROPY_HW_ENABLE_{}".format(pin.name()), file=out_source) - print( - " [GPIO_NUM_{}] = {{ .base = {{ .type = &machine_pin_type }}, .irq = {{ .base = {{ .type = &machine_pin_irq_type }} }} }},".format( - pin.pin().pin, - ), - file=out_source, - ) - print(" #endif", file=out_source) - print("};", file=out_source) - - def print_named(self, label, named_pins, out_source): - print("", file=out_source) - print( - "STATIC const mp_rom_map_elem_t machine_pin_{:s}_pins_locals_dict_table[] = {{".format( - label - ), - file=out_source, - ) - for named_pin in named_pins: - pin = named_pin.pin() - print( - " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},".format( - named_pin.name(), pin.cpu_pin_name() - ), - file=out_source, + if not cpu_pin_name.startswith("GPIO") or not cpu_pin_name[4:].isnumeric(): + raise boardgen.PinGeneratorError( + "Invalid cpu pin name '{}', must be 'GPIOn'".format(cpu_pin_name) ) - print("};", file=out_source) - print( - "MP_DEFINE_CONST_DICT(machine_pin_{:s}_pins_locals_dict, machine_pin_{:s}_pins_locals_dict_table);".format( - label, label - ), - file=out_source, - ) - - def print_tables(self, out_source): - self.print_cpu_table(out_source) - self.print_named("board", self.board_pins, out_source) - - def print_header(self, out_header): - # Provide #defines for each cpu pin. - for named_pin in self.cpu_pins: - pin = named_pin.pin() - n = pin.cpu_pin_name() - print("#if MICROPY_HW_ENABLE_{}".format(n), file=out_header) - print( - "#define pin_{:s} (machine_pin_obj_table[{}])".format(n, pin.pin), - file=out_header, - ) - print("#endif", file=out_header) - - # Provide #define's mapping board to cpu name. - for named_pin in self.board_pins: - if named_pin.pin().is_board_pin(): - print( - "#define pin_{:s} pin_{:s}".format( - named_pin.name(), named_pin.pin().cpu_pin_name() - ), - file=out_header, - ) - + if not (0 <= int(cpu_pin_name[4:]) < NUM_GPIOS): + raise boardgen.PinGeneratorError("Unknown cpu pin '{}'".format(cpu_pin_name)) -def main(): - parser = argparse.ArgumentParser(description="Generate board specific pin file") - parser.add_argument("--board-csv") - parser.add_argument("--prefix") - parser.add_argument("--output-source") - parser.add_argument("--output-header") - args = parser.parse_args() - pins = Pins() - pins.create_pins() - - with open(args.output_source, "w") as out_source: - print("// This file was automatically generated by make-pins.py", file=out_source) - print("//", file=out_source) - - if args.board_csv: - print("// --board-csv {:s}".format(args.board_csv), file=out_source) - pins.parse_board_file(args.board_csv) +class Esp32PinGenerator(boardgen.NumericPinGenerator): + def __init__(self): + # Use custom pin type above. + super().__init__(pin_type=Esp32Pin) - if args.prefix: - print("// --prefix {:s}".format(args.prefix), file=out_source) - print("", file=out_source) - with open(args.prefix, "r") as prefix_file: - print(prefix_file.read(), end="", file=out_source) + # Pre-define the pins (i.e. don't require them to be listed in pins.csv). + for i in range(NUM_GPIOS): + self.add_cpu_pin("GPIO{}".format(i)) - pins.print_tables(out_source) + # Only use pre-defined cpu pins (do not let board.csv create them). + def find_pin_by_cpu_pin_name(self, cpu_pin_name, create=True): + return super().find_pin_by_cpu_pin_name(cpu_pin_name, create=False) - with open(args.output_header, "w") as out_header: - pins.print_header(out_header) + # This is provided by the IDF and is one more than the highest available + # GPIO num. + def cpu_table_size(self): + return "GPIO_NUM_MAX" if __name__ == "__main__": - main() + Esp32PinGenerator().main() diff --git a/ports/rp2/CMakeLists.txt b/ports/rp2/CMakeLists.txt index 7b715c31faeb7..4f76c5864fc2a 100644 --- a/ports/rp2/CMakeLists.txt +++ b/ports/rp2/CMakeLists.txt @@ -479,7 +479,6 @@ set(GEN_PINS_PREFIX "${MICROPY_BOARDS_DIR}/rp2_prefix.c") set(GEN_PINS_MKPINS "${MICROPY_BOARDS_DIR}/make-pins.py") set(GEN_PINS_SRC "${CMAKE_BINARY_DIR}/pins_${MICROPY_BOARD}.c") set(GEN_PINS_HDR "${MICROPY_GENHDR_DIR}/pins.h") -set(GEN_PINS_AF_CONST "${MICROPY_GENHDR_DIR}/pins_af_const.h") if(EXISTS "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") set(GEN_PINS_BOARD_CSV "${MICROPY_BOARDS_DIR}/${MICROPY_BOARD}/pins.csv") diff --git a/ports/rp2/boards/make-pins.py b/ports/rp2/boards/make-pins.py index 4cf73d9900fb1..cbc3424705def 100755 --- a/ports/rp2/boards/make-pins.py +++ b/ports/rp2/boards/make-pins.py @@ -1,331 +1,133 @@ #!/usr/bin/env python """Creates the pin file for the RP2.""" -from __future__ import print_function - -import argparse -import sys -import csv +import os import re +import sys -SUPPORTED_FN = { - "SPI": ["TX", "RX", "SCK", "CS"], - "UART": ["TX", "RX", "CTS", "RTS"], - "I2C": ["SCL", "SDA"], - "PWM": ["A", "B"], - "SIO": [""], - "PIO0": [""], - "PIO1": [""], - "GPCK": ["GPIN0", "GPOUT0", "GPIN1", "GPOUT1", "GPOUT2", "GPOUT3"], - "USB": ["OVCUR_DET", "VBUS_DET", "VBUS_EN"], -} - - -def parse_pin(name_str): - """Parses a string and returns a pin number.""" - if len(name_str) < 2: - raise ValueError("Expecting pin name to be at least 2 characters.") - if not name_str.startswith("GPIO") and not name_str.startswith("EXT_GPIO"): - raise ValueError("Expecting pin name to start with EXT_/GPIO") - return int(re.findall(r"\d+$", name_str)[0]) - - -def split_name_num(name_num): - num = None - for num_idx in range(len(name_num) - 1, -1, -1): - if not name_num[num_idx].isdigit(): - name = name_num[0 : num_idx + 1] - num_str = name_num[num_idx + 1 :] - if len(num_str) > 0: - num = int(num_str) - break - if name == "PIO": - name += str(num) - return name, num - - -class AlternateFunction(object): - """Holds the information associated with a pins alternate function.""" - - def __init__(self, idx, af_str): - self.idx = idx - self.af_str = af_str +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen - self.func = "" - self.fn_num = None - self.pin_type = "" - self.supported = False +# This is NUM_BANK0_GPIOS. Pin indices are 0 to 29 (inclusive). +NUM_GPIOS = 30 +# Up to 10 additional extended pins (e.g. via the wifi chip). +NUM_EXT_GPIOS = 10 - af_words = af_str.split("_", 1) - self.func, self.fn_num = split_name_num(af_words[0]) - if len(af_words) > 1: - self.pin_type = af_words[1] - if self.func in SUPPORTED_FN: - pin_types = SUPPORTED_FN[self.func] - if self.pin_type in pin_types: - self.supported = True - def is_supported(self): - return self.supported +class Rp2Pin(boardgen.Pin): + def __init__(self, cpu_pin_name): + super().__init__(cpu_pin_name) + self._afs = [] - def print(self, out_source): - """Prints the C representation of this AF.""" - if self.supported: - print(" AF", end="", file=out_source) + if self.name().startswith("EXT_"): + self._index = None + self._ext_index = int(self.name()[8:]) # "EXT_GPIOn" else: - print(" //", end="", file=out_source) - fn_num = self.fn_num - if fn_num is None: - fn_num = 0 - print( - "({:d}, {:4s}, {:d}), // {:s}".format(self.idx, self.func, fn_num, self.af_str), - file=out_source, - ) - - -class Pin(object): - """Holds the information associated with a pin.""" - - def __init__(self, pin, is_ext=False): - self.pin = pin - self.alt_fn = [] - self.alt_fn_count = 0 - self.is_board = False - self.is_ext = is_ext - - def cpu_pin_name(self): - return "{:s}GPIO{:d}".format("EXT_" if self.is_ext else "", self.pin) - - def is_board_pin(self): - return self.is_board - - def set_is_board_pin(self): - self.is_board = True - - def parse_af(self, af_idx, af_strs_in): - if len(af_strs_in) == 0: - return - # If there is a slash, then the slash separates 2 aliases for the - # same alternate function. - af_strs = af_strs_in.split("/") - for af_str in af_strs: - alt_fn = AlternateFunction(af_idx, af_str) - self.alt_fn.append(alt_fn) - if alt_fn.is_supported(): - self.alt_fn_count += 1 - - def alt_fn_name(self, null_if_0=False): - if null_if_0 and self.alt_fn_count == 0: - return "NULL" - return "pin_{:s}_af".format(self.cpu_pin_name()) - - def print(self, out_source): - if self.is_ext: - print("#if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(self.pin), file=out_source) - - if self.alt_fn_count == 0: - print("// ", end="", file=out_source) - print("const machine_pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name()), file=out_source) - for alt_fn in self.alt_fn: - alt_fn.print(out_source) - if self.alt_fn_count == 0: - print("// ", end="", file=out_source) - print("};", file=out_source) - print("", file=out_source) - print( - "{:s}machine_pin_obj_t pin_{:s} = PIN({:d}, {:s}, {:d}, {:d}, {:s});".format( - "" if self.is_ext else "const ", - self.cpu_pin_name(), - self.pin, - self.cpu_pin_name(), - self.is_ext, - self.alt_fn_count, - self.alt_fn_name(null_if_0=True), - ), - file=out_source, - ) - if self.is_ext: - print("#endif", file=out_source) - print("", file=out_source) - - def print_header(self, out_header): - n = self.cpu_pin_name() - print( - "extern{:s}machine_pin_obj_t pin_{:s};".format(" " if self.is_ext else " const ", n), - file=out_header, - ) - if self.alt_fn_count > 0: - print("extern const machine_pin_af_obj_t pin_{:s}_af[];".format(n), file=out_header) - - -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 - self.ext_pins = [] # list of NamedPin objects - for i in range(0, 10): - self.ext_pins.append(NamedPin("EXT_GPIO{:d}".format(i), Pin(i, True))) - - def find_pin(self, pin_name): - for pin in self.cpu_pins: - if pin.name() == pin_name: - return pin.pin() - - for pin in self.ext_pins: - if pin.name() == pin_name: - return pin.pin() - - def parse_af_file(self, filename, pinname_col, af_col): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - try: - pin_num = parse_pin(row[pinname_col]) - except Exception: - # import traceback; traceback.print_exc() - continue - pin = Pin(pin_num) - for af_idx in range(af_col, len(row)): - if af_idx >= af_col: - pin.parse_af(af_idx, row[af_idx]) - 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: - if len(row) == 0 or row[0].startswith("#"): - # Skip empty lines, and lines starting with "#" - continue - if len(row) != 2: - raise ValueError("Expecting two entries in a row") - - cpu_pin_name = row[1] - try: - parse_pin(cpu_pin_name) - except: - # import traceback; traceback.print_exc() - continue - pin = self.find_pin(cpu_pin_name) - if pin: - pin.set_is_board_pin() - if row[0]: # Only add board pins that have a name - self.board_pins.append(NamedPin(row[0], pin)) - - def print_table(self, label, named_pins, out_source): - print("", file=out_source) - print( - "const machine_pin_obj_t *machine_pin_{:s}_pins[] = {{".format(label), file=out_source - ) - for pin in named_pins: - if not pin.pin().is_ext: - print(" &pin_{},".format(pin.name()), file=out_source) - print("};", file=out_source) - print("", file=out_source) + self._index = int(self.name()[4:]) # "GPIOn" + self._ext_index = None + + # Required by NumericPinGenerator. + def index(self): + return self._index + + # Use the PIN() macro defined in rp2_prefix.c for defining the pin + # objects. + def definition(self): + if self._index is not None: + return "PIN({:d}, GPIO{:d}, 0, {:d}, pin_GPIO{:d}_af)".format( + self._index, self._index, len(self._afs), self.index() + ) + else: + return "PIN({:d}, EXT_GPIO{:d}, 1, 0, NULL)".format(self._ext_index, self._ext_index) + + # External pins need to be mutable (because they track the output state). + def is_const(self): + return self._index is not None + + # Add conditional macros only around the external pins based on how many + # are enabled. + def enable_macro(self): + if self._ext_index is not None: + return "(MICROPY_HW_PIN_EXT_COUNT > {:d})".format(self._ext_index) + + def add_af(self, af_idx, _af_name, af): + if self._index is None: + raise boardgen.PinGeneratorError( + "Cannot add AF for ext pin '{:s}'".format(self.name()) + ) - def print_named(self, label, named_pins, out_source): - print("", file=out_source) - print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), - file=out_source, - ) - for named_pin in named_pins: - pin = named_pin.pin() - if pin.is_ext: - print(" #if (MICROPY_HW_PIN_EXT_COUNT > {:d})".format(pin.pin), file=out_source) + # _ + m = re.match("([A-Z][A-Z0-9][A-Z]+)(([0-9]+)(_.*)?)?", af) + af_fn = m.group(1) + af_unit = int(m.group(3)) if m.group(3) is not None else 0 + if af_fn == "PIO": + # Pins can be either PIO unit (unlike, say, I2C where a + # pin can only be I2C0 _or_ I2C1, both sharing the same AF + # index), so each PIO unit has a distinct AF index. + af_fn = "{:s}{:d}".format(af_fn, af_unit) + self._afs.append((af_idx + 1, af_fn, af_unit, af)) + + # This will be called at the start of the output (after the prefix). Use + # it to emit the af objects (via the AF() macro in rp2_prefix.c). + def print_source(self, out_source): + if self._index is not None: print( - " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},".format( - named_pin.name(), pin.cpu_pin_name() - ), + "const machine_pin_af_obj_t pin_GPIO{:d}_af[] = {{".format(self.index()), file=out_source, ) - if pin.is_ext: - print(" #endif", file=out_source) - - print("};", file=out_source) - print( - "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( - label, label - ), - file=out_source, - ) - print("", file=out_source) - - def print(self, out_source): - for pin in self.cpu_pins: - pin.pin().print(out_source) - - for pin in self.ext_pins: - if pin.pin().is_ext: - pin.pin().print(out_source) - - self.print_table("cpu", self.cpu_pins, out_source) - self.print_named("cpu", self.cpu_pins + self.ext_pins, out_source) - self.print_named("board", self.board_pins, out_source) - - def print_header(self, out_header): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - pin.print_header(out_header) - for named_pin in self.board_pins: - pin = named_pin.pin() - if pin.is_ext: - pin.print_header(out_header) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: - if named_pin.pin().is_board_pin(): + for af_idx, af_fn, af_unit, af in self._afs: print( - "#define pin_{:s} pin_{:s}".format( - named_pin.name(), named_pin.pin().cpu_pin_name() - ), - file=out_header, + " AF({:d}, {:4s}, {:d}), // {:s}".format(af_idx, af_fn, af_unit, af), + file=out_source, ) + print("};", file=out_source) + print(file=out_source) + + # rp2 cpu names must be "GPIOn" or "EXT_GPIOn". + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) + + if cpu_pin_name.startswith("GPIO") and cpu_pin_name[4:].isnumeric(): + if not (0 <= int(cpu_pin_name[4:]) < NUM_GPIOS): + raise boardgen.PinGeneratorError("Unknown cpu pin '{}'".format(cpu_pin_name)) + elif cpu_pin_name.startswith("EXT_GPIO") and cpu_pin_name[8:].isnumeric(): + if not (0 <= int(cpu_pin_name[8:]) < NUM_EXT_GPIOS): + raise boardgen.PinGeneratorError("Unknown ext pin '{}'".format(cpu_pin_name)) + else: + raise boardgen.PinGeneratorError( + "Invalid cpu pin name '{}', must be 'GPIOn' or 'EXT_GPIOn'".format(cpu_pin_name) + ) -def main(): - parser = argparse.ArgumentParser(description="Generate board specific pin file") - parser.add_argument("--board-csv") - parser.add_argument("--af-csv") - parser.add_argument("--prefix") - parser.add_argument("--output-source") - parser.add_argument("--output-header") - args = parser.parse_args() - - pins = Pins() +class Rp2PinGenerator(boardgen.NumericPinGenerator): + def __init__(self): + # Use custom pin type above, and also enable the --af-csv argument. + super().__init__( + pin_type=Rp2Pin, + enable_af=True, + ) - with open(args.output_source, "w") as out_source: - print("// This file was automatically generated by make-pins.py", file=out_source) - print("//", file=out_source) - if args.af_csv: - print("// --af {:s}".format(args.af_csv), file=out_source) - pins.parse_af_file(args.af_csv, 0, 1) + # Pre-define the pins (i.e. don't require them to be listed in pins.csv). + for i in range(NUM_GPIOS): + self.add_cpu_pin("GPIO{}".format(i)) + for i in range(NUM_EXT_GPIOS): + self.add_cpu_pin("EXT_GPIO{}".format(i)) - if args.board_csv: - print("// --board {:s}".format(args.board_csv), file=out_source) - pins.parse_board_file(args.board_csv) + # Provided by pico-sdk. + def cpu_table_size(self): + return "NUM_BANK0_GPIOS" - if args.prefix: - print("// --prefix {:s}".format(args.prefix), file=out_source) - print("", file=out_source) - with open(args.prefix, "r") as prefix_file: - print(prefix_file.read(), file=out_source) - pins.print(out_source) + # Only use pre-defined cpu pins (do not let board.csv create them). + def find_pin_by_cpu_pin_name(self, cpu_pin_name, create=True): + return super().find_pin_by_cpu_pin_name(cpu_pin_name, create=False) - with open(args.output_header, "w") as out_header: - pins.print_header(out_header) + # NumericPinGenerator doesn't include the cpu dict by default (only the + # board dict), so add that to the output for rp2. + def print_source(self, out_source): + super().print_source(out_source) + self.print_cpu_locals_dict(out_source) if __name__ == "__main__": - main() + Rp2PinGenerator().main() diff --git a/ports/rp2/machine_pin.c b/ports/rp2/machine_pin.c index 77d9e13480007..b277a939e5abe 100644 --- a/ports/rp2/machine_pin.c +++ b/ports/rp2/machine_pin.c @@ -69,14 +69,14 @@ MP_DEFINE_CONST_OBJ_TYPE( pin_cpu_pins_obj_type, MP_QSTR_cpu, MP_TYPE_FLAG_NONE, - locals_dict, &pin_cpu_pins_locals_dict + locals_dict, &machine_pin_cpu_pins_locals_dict ); MP_DEFINE_CONST_OBJ_TYPE( pin_board_pins_obj_type, MP_QSTR_board, MP_TYPE_FLAG_NONE, - locals_dict, &pin_board_pins_locals_dict + locals_dict, &machine_pin_board_pins_locals_dict ); typedef struct _machine_pin_irq_obj_t { @@ -86,7 +86,7 @@ typedef struct _machine_pin_irq_obj_t { } machine_pin_irq_obj_t; STATIC const mp_irq_methods_t machine_pin_irq_methods; -extern const machine_pin_obj_t *machine_pin_cpu_pins[NUM_BANK0_GPIOS]; +extern const machine_pin_obj_t machine_pin_obj_table[NUM_BANK0_GPIOS]; // Mask with "1" indicating that the corresponding pin is in simulated open-drain mode. uint32_t machine_pin_open_drain_mask; @@ -170,18 +170,18 @@ const machine_pin_af_obj_t *machine_pin_find_alt_by_index(const machine_pin_obj_ const machine_pin_obj_t *machine_pin_find(mp_obj_t pin) { // Is already a object of the proper type if (mp_obj_is_type(pin, &machine_pin_type)) { - return pin; + return MP_OBJ_TO_PTR(pin); } if (mp_obj_is_str(pin)) { const char *name = mp_obj_str_get_str(pin); // Try to find the pin in the board pins first. - const machine_pin_obj_t *self = machine_pin_find_named(&pin_board_pins_locals_dict, pin); + const machine_pin_obj_t *self = machine_pin_find_named(&machine_pin_board_pins_locals_dict, pin); if (self != NULL) { return self; } // If not found, try to find the pin in the cpu pins which include // CPU and and externally controlled pins (if any). - self = machine_pin_find_named(&pin_cpu_pins_locals_dict, pin); + self = machine_pin_find_named(&machine_pin_cpu_pins_locals_dict, pin); if (self != NULL) { return self; } @@ -189,8 +189,8 @@ const machine_pin_obj_t *machine_pin_find(mp_obj_t pin) { } else if (mp_obj_is_int(pin)) { // get the wanted pin object int wanted_pin = mp_obj_get_int(pin); - if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(machine_pin_cpu_pins)) { - return machine_pin_cpu_pins[wanted_pin]; + if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(machine_pin_obj_table)) { + return &machine_pin_obj_table[wanted_pin]; } } mp_raise_ValueError("invalid pin"); @@ -432,7 +432,7 @@ STATIC machine_pin_irq_obj_t *machine_pin_get_irq(mp_hal_pin_obj_t pin) { irq = m_new_obj(machine_pin_irq_obj_t); irq->base.base.type = &mp_irq_type; irq->base.methods = (mp_irq_methods_t *)&machine_pin_irq_methods; - irq->base.parent = MP_OBJ_FROM_PTR(machine_pin_cpu_pins[pin]); + irq->base.parent = MP_OBJ_FROM_PTR(&machine_pin_obj_table[pin]); irq->base.handler = mp_const_none; irq->base.ishard = false; MP_STATE_PORT(machine_pin_irq_obj[pin]) = irq; diff --git a/ports/rp2/machine_pin.h b/ports/rp2/machine_pin.h index d2a39f8e377d9..b3349188e8ba1 100644 --- a/ports/rp2/machine_pin.h +++ b/ports/rp2/machine_pin.h @@ -65,10 +65,10 @@ extern const mp_obj_type_t machine_pin_af_type; #include "genhdr/pins.h" extern const mp_obj_type_t pin_cpu_pins_obj_type; -extern const mp_obj_dict_t pin_cpu_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict; extern const mp_obj_type_t pin_board_pins_obj_type; -extern const mp_obj_dict_t pin_board_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_board_pins_locals_dict; void machine_pin_ext_init(void); bool machine_pin_ext_is_adc_channel(const machine_pin_obj_t *self); diff --git a/tools/boardgen.py b/tools/boardgen.py new file mode 100644 index 0000000000000..bef8e74727097 --- /dev/null +++ b/tools/boardgen.py @@ -0,0 +1,506 @@ +# This file is part of the MicroPython project, http://micropython.org/ +# +# The MIT License (MIT) +# +# Copyright (c) 2023 Jim Mussared +# +# 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. + +# This script contains common functionality to assist a port in implementing +# make-pins.py, which is used to emit compile-time definitions of pin, AF, and +# ADC objects based on inputs from the vendor HAL/SDK and the board +# definition's pins.csv. + +# The pins.csv file can contain empty lines, comments (a line beginning with "#") +# or pin definition lines. Pin definition lines must be of the form: +# +# board,cpu +# +# Where "board" is the user-facing name of the pin as specified by the particular +# board layout and markings, and "cpu" is the corresponding name of the CPU/MCU +# pin. +# +# The "board" entry may be absent if the CPU pin has no additional name, and both +# entries may start with "-" to hide them from the corresponding Python dict of +# pins, and hence hide them from the user (but they are still accessible in C). +# +# For example, take the following pins.csv file: +# +# X1,PA0 +# -X2,PA1 +# X3,-PA2 +# -X4,-PA3 +# ,PA4 +# ,-PA5 +# +# The first row here configures: +# - The CPU pin PA0 is labelled X1. +# - The Python user can access both by the names Pin("X1") and Pin("A0"). +# - The Python user can access both by the members Pin.board.X1 and Pin.cpu.A0. +# - In C code they are available as pyb_pin_X1 and pin_A0. +# +# Prefixing the names with "-" hides them from the user. The following table +# summarises the various possibilities: +# +# pins.csv entry | board name | cpu name | C board name | C cpu name +# ---------------+------------+----------+--------------+----------- +# X1,PA0 "X1" "A0" pyb_pin_X1 pin_A0 +# -X2,PA1 - "A1" pyb_pin_X2 pin_A1 +# X3,-PA2 "X3" - pyb_pin_X3 pin_A2 +# -X4,-PA3 - - pyb_pin_X4 pin_A3 +# ,PA4 - "A4" - pin_A4 +# ,-PA5 - - - pin_A5 + +import argparse +import csv +import os +import sys + + +class PinGeneratorError(Exception): + pass + + +# A port should define a subclass of Pin that knows how to validate cpu/board +# names and emits the required structures. +class Pin: + def __init__(self, cpu_pin_name): + self._cpu_pin_name = cpu_pin_name + # Optional aliases for the board from pins.csv. Each entry is a tuple + # of (name, hidden). Hidden board pins are in pins.csv with with a "-" + # prefix and will available to C but not Python. + self._board_pin_names = set() + # An unavailable pin is one that is not explicitly mentioned at all in + # pins.csv (or added explicitly with PinGenerator.add_cpu_pin). + self._available = False + # A hidden pin is one that is in pins.csv with a "-" prefix and will + # be still available to C but not Python. + self._hidden = False + # Reference to the PinGenerator instance. + self._generator = None + + # The name of the pin to use in MP_QSTR_{} or pin_{}. Defaults to the cpu name. + def name(self): + return self._cpu_pin_name + + # Add a board alias (e.g. from pins.csv). + def add_board_pin_name(self, board_pin_name, hidden=False): + self._board_pin_names.add( + ( + board_pin_name, + hidden, + ) + ) + + # Override this to handle an af specified in af.csv. + def add_af(self, af_idx, af_name, af): + raise NotImplementedError + + # Override this to verify that naming matches the MCU standard (e.g. "GPIOn" or "PXn"). + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + if not cpu_pin_name.strip(): + raise PinGeneratorError("Missing cpu pin name") + + # Override this to provide additional validation of board names. + @staticmethod + def validate_board_pin_name(board_pin_name): + # TODO: ensure this is a valid Python/C identifier and can be used as MP_QSTR_foo. + pass + + # Must be implemented when using NumericPinGenerator. + # Returns the integer index, or None to exclude this pin from the table. + def index(self): + raise NotImplementedError + + # Can be overridden when using NumericPinGenerator. + # Returns a string which is a C expression that evaluates to the index + # e.g. `GPIO_NUM_7`. + # This is used whenever the index is emitted in source code and defaults + # to just returning the pin index as a literal. + # Return None to exclude this pin from the table. + def index_name(self): + i = self.index() + return str(i) if i is not None else None + + # Returns an expression that defines the pin. e.g. `{ .base { ... }, .x }`. + # This is used as the RHS of the `const machine_pin_obj_t + # pin_EXT_GPIO0_obj =` statements for named pins, and elements of + # `machine_pin_obj_table` for numeric pins. + # This will typically might be implemented as an invocation of a macro + # defined in the port-specific prefix. + def definition(self): + raise NotImplementedError + + # Whether the pin object should be declared as "const". This should be True + # for most pins, but some special cases (e.g. external pins on rp2) might + # need mutable pin objects (e.g. to track current pin state). + def is_const(self): + return True + + # Optionally return a preprocessor expression that can be used to suppress + # this pin (e.g. `MICROPY_HW_ENABLE_GPIOn`). + def enable_macro(self): + return None + + # Override this to output any additional per-pin definitions or other + # content that should appear at the start of the source output. + # This could be used to define additional objects such as IRQs or AFs. + def print_source(self, out_source): + pass + + +# A port should define a subclass of PinGenerator (or NumericPinGenerator). +class PinGenerator: + def __init__(self, pin_type, enable_af=False): + self._pins = [] + self._pin_type = pin_type + self._enable_af = enable_af + + # Allows a port to define a known cpu pin (without relying on it being in the + # csv file). + def add_cpu_pin(self, cpu_pin_name, available=True): + pin = self._pin_type(cpu_pin_name) + pin._available = available + self._pins.append(pin) + pin._generator = self + return pin + + # Iterate just the available pins (i.e. ones in pins.csv). + def available_pins(self, exclude_hidden=False): + for pin in self._pins: + if not pin._available: + continue + if exclude_hidden and pin._hidden: + continue + yield pin + + # Allows a port to add additional command-line arguments to be handled. + def extra_args(self, parser): + pass + + # Load board->cpu mapping from csv. + def parse_board_csv(self, filename): + with open(filename, "r") as csvfile: + rows = csv.reader(csvfile) + for linenum, row in enumerate(rows): + try: + # Skip empty lines, and lines starting with "#". + if len(row) == 0 or row[0].startswith("#"): + continue + + # Lines must be pairs of names. + if len(row) != 2: + raise PinGeneratorError("Expecting two entries in each row") + board_pin_name, cpu_pin_name = (x.strip() for x in row) + + # All rows must include a cpu name. + cpu_hidden = False + if cpu_pin_name.startswith("-"): + cpu_hidden = True + cpu_pin_name = cpu_pin_name[1:] + self._pin_type.validate_cpu_pin_name(cpu_pin_name) + pin = self.find_pin_by_cpu_pin_name(cpu_pin_name, create=True) + pin._available = True # It's in pins.csv so must be available. + pin._hidden = cpu_hidden # Optionally don't make available to Python. + + # Rows can optionally alias to a board name. + if board_pin_name: + board_hidden = False + if board_pin_name.startswith("-"): + board_hidden = True + board_pin_name = board_pin_name[1:] + self._pin_type.validate_board_pin_name(board_pin_name) + pin.add_board_pin_name(board_pin_name, board_hidden) + + # Inject "file:line: " into the exception. + except PinGeneratorError as er: + raise PinGeneratorError("{}:{}: {}".format(filename, linenum, er)) + + def parse_af_csv(self, filename, header_rows=1, pin_col=0, af_col=1): + headings = {} + with open(filename, "r") as csvfile: + rows = csv.reader(csvfile) + for linenum, row in enumerate(rows): + try: + # Skip empty lines, and lines starting with "#". + if len(row) == 0 or row[0].startswith("#"): + continue + + # Consume `header_rows` non-blank/comment rows at the start. + if header_rows: + if not headings: + # If this is the first header row then initialise + # the headings dict. + for af_idx, header in enumerate(row[af_col:]): + headings[af_idx] = header.strip() + header_rows -= 1 + continue + + # Lines must be pairs of names. + if len(row) <= max(pin_col, af_col): + raise PinGeneratorError( + "Expecting {} entries in each row".format(max(pin_col, af_col)) + ) + + cpu_pin_name = row[pin_col].strip() + if cpu_pin_name == "-": + continue + self._pin_type.validate_cpu_pin_name(cpu_pin_name) + pin = self.find_pin_by_cpu_pin_name(cpu_pin_name, create=True) + + for af_idx, af in enumerate(row[af_col:]): + af = af.strip() + if not af: + continue + pin.add_af(af_idx, headings.get(af_idx, ""), af) + + # Inject "file:line: " into the exception. + except PinGeneratorError as er: + raise PinGeneratorError("{}:{}: {}".format(filename, linenum, er)) + + # Find an existing pin. + def find_pin_by_cpu_pin_name(self, cpu_pin_name, create=True): + for pin in self._pins: + if pin._cpu_pin_name == cpu_pin_name: + return pin + if create: + return self.add_cpu_pin(cpu_pin_name, available=False) + else: + raise PinGeneratorError("Unknown cpu pin {}".format(cpu_pin_name)) + + # Print the locals dict for Pin.board. + def print_board_locals_dict(self, out_source): + print(file=out_source) + print( + "STATIC const mp_rom_map_elem_t machine_pin_board_pins_locals_dict_table[] = {", + file=out_source, + ) + for pin in self.available_pins(): + for board_pin_name, board_hidden in pin._board_pin_names: + if board_hidden: + # Don't include hidden pins in Pins.board. + continue + + # We don't use the enable macro for board pins, because they + # shouldn't be referenced in pins.csv unless they're + # available. + print( + " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(pin_{:s}) }},".format( + board_pin_name, + pin.name(), + ), + file=out_source, + ) + print("};", file=out_source) + print( + "MP_DEFINE_CONST_DICT(machine_pin_board_pins_locals_dict, machine_pin_board_pins_locals_dict_table);", + file=out_source, + ) + + # Print the locals dict for Pin.cpu. + def print_cpu_locals_dict(self, out_source): + print(file=out_source) + print( + "STATIC const mp_rom_map_elem_t machine_pin_cpu_pins_locals_dict_table[] = {", + file=out_source, + ) + for pin in self.available_pins(exclude_hidden=True): + m = pin.enable_macro() + if m: + print(" #if {}".format(m), file=out_source) + print( + " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(pin_{:s}) }},".format( + pin.name(), + pin.name(), + ), + file=out_source, + ) + if m: + print(" #endif", file=out_source) + print("};", file=out_source) + print( + "MP_DEFINE_CONST_DICT(machine_pin_cpu_pins_locals_dict, machine_pin_cpu_pins_locals_dict_table);", + file=out_source, + ) + + # NumericPinGenerator can override this to use an entry in machine_pin_obj_table. + def _cpu_pin_pointer(self, pin): + return "&pin_{:s}_obj".format(pin.name()) + + # Print the pin_CPUNAME and pin_BOARDNAME macros. + def print_defines(self, out_header): + # Provide #defines for each cpu pin. + for pin in self.available_pins(): + print(file=out_header) + m = pin.enable_macro() + if m: + print("#if {}".format(m), file=out_header) + + # #define pin_CPUNAME (...) + print( + "#define pin_{:s} ({:s})".format(pin.name(), self._cpu_pin_pointer(pin)), + file=out_header, + ) + + # #define pin_BOARDNAME (pin_CPUNAME) + for board_pin_name, _board_hidden in pin._board_pin_names: + # Note: Hidden board pins are still available to C via the macro. + print( + "#define pin_{:s} (pin_{:s})".format( + board_pin_name, + pin.name(), + ), + file=out_header, + ) + + if m: + print("#endif", file=out_header) + + def print_source(self, out_source): + raise NotImplementedError + + def print_header(self, out_header): + self.print_defines(out_header) + + # A port can override this if it has extra input files (e.g. af.csv) to load. + def load_inputs(self, out_source): + # Optionally load pins.csv to get cpu->board name mappings. + if self._enable_af and self.args.af_csv: + print("// --af-csv {:s}".format(self.args.af_csv), file=out_source) + self.parse_af_csv(self.args.af_csv) + + # Optionally load pins.csv to get cpu->board name mappings. + if self.args.board_csv: + print("// --board-csv {:s}".format(self.args.board_csv), file=out_source) + self.parse_board_csv(self.args.board_csv) + + # Prepend the prefix file to the start of the output. + if self.args.prefix: + print("// --prefix {:s}".format(self.args.prefix), file=out_source) + print(file=out_source) + with open(self.args.prefix, "r") as prefix_file: + print(prefix_file.read(), end="", file=out_source) + + # A port can override this to do extra work after the main source+header + # have been written, such as generating additional header files. + def generate_extra_files(self): + pass + + def main(self): + parser = argparse.ArgumentParser(description="Generate board specific pin file") + parser.add_argument("--board-csv") + if self._enable_af: + parser.add_argument("--af-csv") + parser.add_argument("--prefix") + parser.add_argument("--output-source") + parser.add_argument("--output-header") + self.extra_args(parser) + self.args = parser.parse_args() + + try: + with open(self.args.output_source, "w") as out_source: + print("// This file was automatically generated by make-pins.py", file=out_source) + print("//", file=out_source) + + # Load additional files (including port-specific ones). + self.load_inputs(out_source) + + # Allow a port to print arbitrary per-pin content. + for pin in self.available_pins(): + pin.print_source(out_source) + + # Print the tables and dictionaries. + self.print_source(out_source) + + with open(self.args.output_header, "w") as out_header: + self.print_header(out_header) + + self.generate_extra_files() + except PinGeneratorError as er: + print(er) + sys.exit(1) + + +# For ports that use numeric pin identifiers (e.g. ESP32, rp2). +# This emits the machine_pin_obj_t instances as an array (machine_pin_obj_table). +class NumericPinGenerator(PinGenerator): + # This should return a const expression that is the number of GPIO pins + # for this board. + def cpu_table_size(self): + raise NotImplementedError + + def print_cpu_table(self, out_source): + # Print machine_pin_obj_table, where each element is `[n] = {obj}`. + print(file=out_source) + print( + "const machine_pin_obj_t machine_pin_obj_table[{}] = {{".format(self.cpu_table_size()), + file=out_source, + ) + for pin in self.available_pins(): + n = pin.index_name() + if n is None: + continue + + m = pin.enable_macro() + if m: + print(" #if {}".format(m), file=out_source) + print( + " [{:s}] = {:s},".format( + pin.index_name(), + pin.definition(), + ), + file=out_source, + ) + if m: + print(" #endif", file=out_source) + print("};", file=out_source) + + # For pins that do not have an index, print them out in the same style as PinGenerator. + print(file=out_source) + for pin in self.available_pins(): + n = pin.index_name() + if n is not None: + continue + + m = pin.enable_macro() + if m: + print("#if {}".format(m), file=out_source) + print( + "{:s}machine_pin_obj_t pin_{:s}_obj = {:s};".format( + "const " if pin.is_const() else "", + pin.name(), + pin.definition(), + ), + file=out_source, + ) + if m: + print("#endif", file=out_source) + + # Replace PinGenerator's implementation to print the numeric table. + def print_source(self, out_source): + self.print_cpu_table(out_source) + self.print_board_locals_dict(out_source) + + def _cpu_pin_pointer(self, pin): + n = pin.index_name() + if n is not None: + return "&machine_pin_obj_table[{:s}]".format(pin.index_name()) + else: + return super()._cpu_pin_pointer(pin) From 98dff07bb4ff98a178cac912270ee8a11e1bf570 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 10 Aug 2023 23:40:20 +1000 Subject: [PATCH 12/20] stm32/boards: Fix errors in pins.csv and af.csv. Fixes are: - Comment out lines in pins.csv that do not have valid CPU pins. It's useful to keep these in the file as "documentation" but in order to make make-pins.py stricter they need to be commented out. - Fix some typos (missing P prefix) in pins.csv. This resulted in some missing board pins. - Fix some typos in af.csv files. Some typos of "ADC" and some other that were previously ignored. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- .../boards/ADAFRUIT_F405_EXPRESS/pins.csv | 4 +-- ports/stm32/boards/ARDUINO_GIGA/pins.csv | 6 ++-- .../boards/ARDUINO_NICLA_VISION/pins.csv | 2 +- .../stm32/boards/ARDUINO_PORTENTA_H7/pins.csv | 2 +- ports/stm32/boards/CERB40/pins.csv | 12 ++++---- .../boards/GARATRONIC_NADHAT_F405/pins.csv | 18 ++++++------ .../GARATRONIC_PYBSTICK26_F411/pins.csv | 18 ++++++------ ports/stm32/boards/HYDRABUS/pins.csv | 2 +- .../boards/MIKROE_CLICKER2_STM32/pins.csv | 18 ++++++------ ports/stm32/boards/NUCLEO_F412ZG/pins.csv | 8 +++--- ports/stm32/boards/NUCLEO_F413ZH/pins.csv | 8 +++--- ports/stm32/boards/NUCLEO_G0B1RE/pins.csv | 2 +- ports/stm32/boards/NUCLEO_G474RE/pins.csv | 2 +- ports/stm32/boards/NUCLEO_L073RZ/pins.csv | 5 +--- ports/stm32/boards/PYBLITEV10/pins.csv | 20 ++++++------- ports/stm32/boards/PYBV10/pins.csv | 20 ++++++------- ports/stm32/boards/PYBV11/pins.csv | 20 ++++++------- ports/stm32/boards/PYBV4/pins.csv | 20 ++++++------- ports/stm32/boards/STM32F439/pins.csv | 2 +- ports/stm32/boards/STM32H573I_DK/pins.csv | 4 +-- ports/stm32/boards/STM32H7B3I_DK/pins.csv | 4 +-- ports/stm32/boards/VCC_GND_F407VE/pins.csv | 24 ++++++++-------- ports/stm32/boards/VCC_GND_F407ZG/pins.csv | 28 +++++++++---------- ports/stm32/boards/stm32h743_af.csv | 4 +-- ports/stm32/boards/stm32h7b3_af.csv | 13 +++------ 25 files changed, 129 insertions(+), 137 deletions(-) diff --git a/ports/stm32/boards/ADAFRUIT_F405_EXPRESS/pins.csv b/ports/stm32/boards/ADAFRUIT_F405_EXPRESS/pins.csv index 15e810e1ae546..7c5c7b62fabbf 100644 --- a/ports/stm32/boards/ADAFRUIT_F405_EXPRESS/pins.csv +++ b/ports/stm32/boards/ADAFRUIT_F405_EXPRESS/pins.csv @@ -1,5 +1,5 @@ -POWER,3.3V -GND,GND +#POWER,3.3V +#GND,GND USB_ID,PA10 USB_DM,PA11 USB_DP,PA12 diff --git a/ports/stm32/boards/ARDUINO_GIGA/pins.csv b/ports/stm32/boards/ARDUINO_GIGA/pins.csv index 91c5c6d58616b..56e63232908ce 100644 --- a/ports/stm32/boards/ARDUINO_GIGA/pins.csv +++ b/ports/stm32/boards/ARDUINO_GIGA/pins.csv @@ -176,7 +176,7 @@ UART6_TX,PG14 UART6_RX,PC7 -USB_DM,PA11 -USB_DP,PA12 -BOOT0,BOOT0 +#BOOT0,BOOT0 DAC1,PA4 DAC2,PA5 LED_RED,PI12 @@ -209,11 +209,11 @@ I2C4_SCL,PB6 -QSPI2_D1,PD12 -QSPI2_D2,PE2 -QSPI2_D3,PF6 --SPI1_NSS,NC +#-SPI1_NSS,NC -SPI1_SCK,PB3 -SPI1_MISO,PG9 -SPI1_MOSI,PD7 -SPI5_NSS,PK1 -SPI5_SCK,PH6 -SPI5_MISO,PJ11 --SPI5_MOSI,PJ10 \ No newline at end of file +-SPI5_MOSI,PJ10 diff --git a/ports/stm32/boards/ARDUINO_NICLA_VISION/pins.csv b/ports/stm32/boards/ARDUINO_NICLA_VISION/pins.csv index 8ff21e645331f..2838510ee3126 100644 --- a/ports/stm32/boards/ARDUINO_NICLA_VISION/pins.csv +++ b/ports/stm32/boards/ARDUINO_NICLA_VISION/pins.csv @@ -176,7 +176,7 @@ UART8_TX,PJ8 UART8_RX,PJ9 USB_DM,PA11 USB_DP,PA12 -BOOT0,BOOT0 +#BOOT0,BOOT0 OSCEN,PH1 DAC1,-PA4 DAC2,-PA5 diff --git a/ports/stm32/boards/ARDUINO_PORTENTA_H7/pins.csv b/ports/stm32/boards/ARDUINO_PORTENTA_H7/pins.csv index ea8710b25f848..4ac406fe3a743 100644 --- a/ports/stm32/boards/ARDUINO_PORTENTA_H7/pins.csv +++ b/ports/stm32/boards/ARDUINO_PORTENTA_H7/pins.csv @@ -199,7 +199,7 @@ UART8_RX,PJ9 -USB_HS_RST,PJ4 -USB_DM,PA11 -USB_DP,PA12 -BOOT0,BOOT0 +#BOOT0,BOOT0 OSCEN,PH1 DAC1,PA4 DAC2,-PA5 diff --git a/ports/stm32/boards/CERB40/pins.csv b/ports/stm32/boards/CERB40/pins.csv index cca0bc0536b51..a319089a66af7 100644 --- a/ports/stm32/boards/CERB40/pins.csv +++ b/ports/stm32/boards/CERB40/pins.csv @@ -1,5 +1,5 @@ -JP1,3.3V -JP2,GND +#JP1,3.3V +#JP2,GND JP3,PA8 JP4,PA13 JP5,PA7 @@ -12,13 +12,13 @@ JP11,PB9 JP12,PB3 JP13,PD2 JP14,PC12 -JP15,VBAT +#JP15,VBAT JP16,PB8 -JP17,Loader +#JP17,Loader JP18,PB7 JP19,PB6 JP20,PB5 -JP21,Reset +#JP21,Reset JP22,PC0 JP23,PC1 JP24,PC2 @@ -37,7 +37,7 @@ JP36,PC6 JP37,PC7 JP38,PC8 JP39,PC9 -JP40,VUSB +#JP40,VUSB UART1_TX,PA9 UART1_RX,PA10 UART3_TX,PD8 diff --git a/ports/stm32/boards/GARATRONIC_NADHAT_F405/pins.csv b/ports/stm32/boards/GARATRONIC_NADHAT_F405/pins.csv index 0a030e985c275..866716397d9af 100644 --- a/ports/stm32/boards/GARATRONIC_NADHAT_F405/pins.csv +++ b/ports/stm32/boards/GARATRONIC_NADHAT_F405/pins.csv @@ -10,18 +10,18 @@ X9,PB6 X10,PB7 X11,PC4 X12,PC5 -X13,Reset -X14,GND -X15,3.3V -X16,VIN +#X13,Reset +#X14,GND +#X15,3.3V +#X16,VIN X17,PB3 X18,PC13 X19,PC0 X20,PC1 X21,PC2 X22,PC3 -X23,A3.3V -X24,AGND +#X23,A3.3V +#X24,AGND Y1,PC6 Y2,PC7 Y3,PB8 @@ -35,9 +35,9 @@ Y10,PB11 Y11,PB0 Y12,PB1 Y13,PB2 -Y14,GND -Y15,3.3V -Y16,VIN +#Y14,GND +#Y15,3.3V +#Y16,VIN SW,PB3 LED_RED,PA13 LED_GREEN,PA14 diff --git a/ports/stm32/boards/GARATRONIC_PYBSTICK26_F411/pins.csv b/ports/stm32/boards/GARATRONIC_PYBSTICK26_F411/pins.csv index c52e65cf792c3..ecdbe99c0fd0a 100644 --- a/ports/stm32/boards/GARATRONIC_PYBSTICK26_F411/pins.csv +++ b/ports/stm32/boards/GARATRONIC_PYBSTICK26_F411/pins.csv @@ -1,32 +1,32 @@ -S1,3.3V -S2,VBUS +#S1,3.3V +#S2,VBUS S3,PB9 -S4,VIN +#S4,VIN S5,PB8 -S6,GND +#S6,GND S7,PB6 S8,PA2 -S9,GND +#S9,GND S10,PA3 S11,PB3 S12,PA0 S13,PB10 S13A,PC3 -S14,Reset +#S14,Reset S15,PB12 S15A,PC5 S16,PB13 S16A,PC6 -S17,GND +#S17,GND S18,PB14 S18A,PC7 S19,PA7 -S20,GND +#S20,GND S21,PB4 S22,PA10 S23,PA5 S24,PA15 -S25,GND +#S25,GND S26,PA4 SW,PC13 SW2,PB6 diff --git a/ports/stm32/boards/HYDRABUS/pins.csv b/ports/stm32/boards/HYDRABUS/pins.csv index 47e1f431398dd..5e1cf682dc8d2 100644 --- a/ports/stm32/boards/HYDRABUS/pins.csv +++ b/ports/stm32/boards/HYDRABUS/pins.csv @@ -44,7 +44,7 @@ PA10,PA10 PA11,PA11 PA12,PA12 PD2,PD2 -BOOT0,BOOT0 +#BOOT0,BOOT0 PA15,PA15 UART3_TX,PD8 UART3_RX,PD9 diff --git a/ports/stm32/boards/MIKROE_CLICKER2_STM32/pins.csv b/ports/stm32/boards/MIKROE_CLICKER2_STM32/pins.csv index c04d2b8c4ac86..60868ea0c9d22 100644 --- a/ports/stm32/boards/MIKROE_CLICKER2_STM32/pins.csv +++ b/ports/stm32/boards/MIKROE_CLICKER2_STM32/pins.csv @@ -22,8 +22,8 @@ MB2_RX,PD9 MB2_TX,PD8 MB2_SCL,PB10 MB2_SDA,PB11 -PIN1,VSYS -PIN2,GND +#PIN1,VSYS +#PIN2,GND PIN3,PC0 PIN4,PC1 PIN5,PC2 @@ -46,11 +46,11 @@ PIN21,PD10 PIN22,PB13 PIN23,PB14 PIN24,PB15 -PIN25,3.3V -PIN26,GND -PIN27,RST -PIN28,GND -PIN30,NC +#PIN25,3.3V +#PIN26,GND +#PIN27,RST +#PIN28,GND +#PIN30,NC PIN31,PB9 PIN32,PB8 PIN33,PE5 @@ -71,8 +71,8 @@ PIN47,PA1 PIN48,PA0 PIN49,PB10 PIN50,PB11 -PIN51,3.3V -PIN52,GND +#PIN51,3.3V +#PIN52,GND OSC32_OUT,PC15 OSC32_IN,PC14 VSENSE,PC5 diff --git a/ports/stm32/boards/NUCLEO_F412ZG/pins.csv b/ports/stm32/boards/NUCLEO_F412ZG/pins.csv index 31dcb99ed616c..bdfb64619b072 100644 --- a/ports/stm32/boards/NUCLEO_F412ZG/pins.csv +++ b/ports/stm32/boards/NUCLEO_F412ZG/pins.csv @@ -112,7 +112,7 @@ PG14,PG14 PG15,PG15 PH0,PH0 PH1,PH1 -SW,C13 -LED_RED,B14 -LED_GREEN,B0 -LED_BLUE,B7 +SW,PC13 +LED_RED,PB14 +LED_GREEN,PB0 +LED_BLUE,PB7 diff --git a/ports/stm32/boards/NUCLEO_F413ZH/pins.csv b/ports/stm32/boards/NUCLEO_F413ZH/pins.csv index 31dcb99ed616c..bdfb64619b072 100644 --- a/ports/stm32/boards/NUCLEO_F413ZH/pins.csv +++ b/ports/stm32/boards/NUCLEO_F413ZH/pins.csv @@ -112,7 +112,7 @@ PG14,PG14 PG15,PG15 PH0,PH0 PH1,PH1 -SW,C13 -LED_RED,B14 -LED_GREEN,B0 -LED_BLUE,B7 +SW,PC13 +LED_RED,PB14 +LED_GREEN,PB0 +LED_BLUE,PB7 diff --git a/ports/stm32/boards/NUCLEO_G0B1RE/pins.csv b/ports/stm32/boards/NUCLEO_G0B1RE/pins.csv index 9c03b1b68a64e..b2af175b123ec 100644 --- a/ports/stm32/boards/NUCLEO_G0B1RE/pins.csv +++ b/ports/stm32/boards/NUCLEO_G0B1RE/pins.csv @@ -25,7 +25,7 @@ PA1,PA1 PA10,PA10 PA11,PA11 PA12,PA12 -PA13,TMS +#PA13,TMS PA15,PA15 PA2,PA2 PA3,PA3 diff --git a/ports/stm32/boards/NUCLEO_G474RE/pins.csv b/ports/stm32/boards/NUCLEO_G474RE/pins.csv index 473a5e26bce28..30b23799527eb 100644 --- a/ports/stm32/boards/NUCLEO_G474RE/pins.csv +++ b/ports/stm32/boards/NUCLEO_G474RE/pins.csv @@ -1,7 +1,7 @@ A0,PA0 A1,PA1 A2,PA4 -A3,BPB0 +A3,PB0 A4,PC1 A5,PC0 D0,PC5 diff --git a/ports/stm32/boards/NUCLEO_L073RZ/pins.csv b/ports/stm32/boards/NUCLEO_L073RZ/pins.csv index 7386425acf81a..9ff62598f3149 100644 --- a/ports/stm32/boards/NUCLEO_L073RZ/pins.csv +++ b/ports/stm32/boards/NUCLEO_L073RZ/pins.csv @@ -28,7 +28,7 @@ SCK,PA5 MISO,PA6 MOSI,PA7 CS,PB6 -BOOT0,PF11 +#BOOT0,BOOT0 SWDIO,PA13 SWCLK,PA14 USER_B1,PC13 @@ -82,6 +82,3 @@ LED_GREEN,PA5 ,PC14 ,PC15 ,PD2 -,PF0 -,PF1 -,PF11 diff --git a/ports/stm32/boards/PYBLITEV10/pins.csv b/ports/stm32/boards/PYBLITEV10/pins.csv index 838587c1bcca0..4f5261c3f0418 100644 --- a/ports/stm32/boards/PYBLITEV10/pins.csv +++ b/ports/stm32/boards/PYBLITEV10/pins.csv @@ -10,18 +10,18 @@ X9,PB6 X10,PB7 X11,PC4 X12,PC5 -X13,Reset -X14,GND -X15,3.3V -X16,VIN +#X13,Reset +#X14,GND +#X15,3.3V +#X16,VIN X17,PB3 X18,PC13 X19,PC0 X20,PC1 X21,PC2 X22,PC3 -X23,A3.3V -X24,AGND +#X23,A3.3V +#X24,AGND Y1,PC6 Y2,PC7 Y3,PB10 @@ -34,10 +34,10 @@ Y9,PA8 Y10,PB8 Y11,PB0 Y12,PB1 -Y13,Reset -Y14,GND -Y15,3.3V -Y16,VIN +#Y13,Reset +#Y14,GND +#Y15,3.3V +#Y16,VIN SW,PB3 LED_BLUE,PB4 LED_RED,PA13 diff --git a/ports/stm32/boards/PYBV10/pins.csv b/ports/stm32/boards/PYBV10/pins.csv index cee80a1aa1cf9..dc3e48f138595 100644 --- a/ports/stm32/boards/PYBV10/pins.csv +++ b/ports/stm32/boards/PYBV10/pins.csv @@ -10,18 +10,18 @@ X9,PB6 X10,PB7 X11,PC4 X12,PC5 -X13,Reset -X14,GND -X15,3.3V -X16,VIN +#X13,Reset +#X14,GND +#X15,3.3V +#X16,VIN X17,PB3 X18,PC13 X19,PC0 X20,PC1 X21,PC2 X22,PC3 -X23,A3.3V -X24,AGND +#X23,A3.3V +#X24,AGND Y1,PC6 Y2,PC7 Y3,PB8 @@ -34,10 +34,10 @@ Y9,PB10 Y10,PB11 Y11,PB0 Y12,PB1 -Y13,Reset -Y14,GND -Y15,3.3V -Y16,VIN +#Y13,Reset +#Y14,GND +#Y15,3.3V +#Y16,VIN SW,PB3 LED_RED,PA13 LED_GREEN,PA14 diff --git a/ports/stm32/boards/PYBV11/pins.csv b/ports/stm32/boards/PYBV11/pins.csv index cee80a1aa1cf9..dc3e48f138595 100644 --- a/ports/stm32/boards/PYBV11/pins.csv +++ b/ports/stm32/boards/PYBV11/pins.csv @@ -10,18 +10,18 @@ X9,PB6 X10,PB7 X11,PC4 X12,PC5 -X13,Reset -X14,GND -X15,3.3V -X16,VIN +#X13,Reset +#X14,GND +#X15,3.3V +#X16,VIN X17,PB3 X18,PC13 X19,PC0 X20,PC1 X21,PC2 X22,PC3 -X23,A3.3V -X24,AGND +#X23,A3.3V +#X24,AGND Y1,PC6 Y2,PC7 Y3,PB8 @@ -34,10 +34,10 @@ Y9,PB10 Y10,PB11 Y11,PB0 Y12,PB1 -Y13,Reset -Y14,GND -Y15,3.3V -Y16,VIN +#Y13,Reset +#Y14,GND +#Y15,3.3V +#Y16,VIN SW,PB3 LED_RED,PA13 LED_GREEN,PA14 diff --git a/ports/stm32/boards/PYBV4/pins.csv b/ports/stm32/boards/PYBV4/pins.csv index cee80a1aa1cf9..dc3e48f138595 100644 --- a/ports/stm32/boards/PYBV4/pins.csv +++ b/ports/stm32/boards/PYBV4/pins.csv @@ -10,18 +10,18 @@ X9,PB6 X10,PB7 X11,PC4 X12,PC5 -X13,Reset -X14,GND -X15,3.3V -X16,VIN +#X13,Reset +#X14,GND +#X15,3.3V +#X16,VIN X17,PB3 X18,PC13 X19,PC0 X20,PC1 X21,PC2 X22,PC3 -X23,A3.3V -X24,AGND +#X23,A3.3V +#X24,AGND Y1,PC6 Y2,PC7 Y3,PB8 @@ -34,10 +34,10 @@ Y9,PB10 Y10,PB11 Y11,PB0 Y12,PB1 -Y13,Reset -Y14,GND -Y15,3.3V -Y16,VIN +#Y13,Reset +#Y14,GND +#Y15,3.3V +#Y16,VIN SW,PB3 LED_RED,PA13 LED_GREEN,PA14 diff --git a/ports/stm32/boards/STM32F439/pins.csv b/ports/stm32/boards/STM32F439/pins.csv index cc9443dea5f2d..5287dec097f38 100644 --- a/ports/stm32/boards/STM32F439/pins.csv +++ b/ports/stm32/boards/STM32F439/pins.csv @@ -44,7 +44,7 @@ PA10,PA10 PA11,PA11 PA12,PA12 PD2,PD2 -BOOT0,BOOT0 +#BOOT0,BOOT0 PA15,PA15 PA13,PA13 PA14,PA14 diff --git a/ports/stm32/boards/STM32H573I_DK/pins.csv b/ports/stm32/boards/STM32H573I_DK/pins.csv index 5672bc4922f4e..5317d4da61b4d 100644 --- a/ports/stm32/boards/STM32H573I_DK/pins.csv +++ b/ports/stm32/boards/STM32H573I_DK/pins.csv @@ -142,8 +142,8 @@ ,PI13 ,PI14 ,PI15 -LED1,G11 -LED2,G2 +LED1,PG11 +LED2,PG2 SW,PC13 UART3_TX,PB10 UART3_RX,PB11 diff --git a/ports/stm32/boards/STM32H7B3I_DK/pins.csv b/ports/stm32/boards/STM32H7B3I_DK/pins.csv index e005e38af70d0..68e8d1ac7b58b 100644 --- a/ports/stm32/boards/STM32H7B3I_DK/pins.csv +++ b/ports/stm32/boards/STM32H7B3I_DK/pins.csv @@ -144,8 +144,8 @@ ,PI15 DAC1,PA4 DAC2,PA5 -LED1,G11 -LED2,G2 +LED1,PG11 +LED2,PG2 SW,PC13 I2C1_SDA,PB9 I2C1_SCL,PB8 diff --git a/ports/stm32/boards/VCC_GND_F407VE/pins.csv b/ports/stm32/boards/VCC_GND_F407VE/pins.csv index f04d96771b05d..8d37e01b0d1b5 100644 --- a/ports/stm32/boards/VCC_GND_F407VE/pins.csv +++ b/ports/stm32/boards/VCC_GND_F407VE/pins.csv @@ -1,9 +1,9 @@ -P1_1,GND -P1_2,GND -P1_3,VBAT -P1_4,VCC_3V3 -P1_5,VIN_5V -P1_6,VIN_5V +#P1_1,GND +#P1_2,GND +#P1_3,VBAT +#P1_4,VCC_3V3 +#P1_5,VIN_5V +#P1_6,VIN_5V P1_7,PE0 P1_8,PE1 P1_9,PE2 @@ -84,12 +84,12 @@ P3_27,PB6 P3_28,PB7 P3_29,PB8 P3_30,PB9 -P3_31,GND -P3_32,GND -P3_33,VCC_3V3 -P3_34,VCC_3V3 -P3_35,GND -P3_36,GND +#P3_31,GND +#P3_32,GND +#P3_33,VCC_3V3 +#P3_34,VCC_3V3 +#P3_35,GND +#P3_36,GND DAC1,PA4 DAC2,PA5 BLUE_LED,PB9 diff --git a/ports/stm32/boards/VCC_GND_F407ZG/pins.csv b/ports/stm32/boards/VCC_GND_F407ZG/pins.csv index 780523a075f41..f992c9ae5e915 100644 --- a/ports/stm32/boards/VCC_GND_F407ZG/pins.csv +++ b/ports/stm32/boards/VCC_GND_F407ZG/pins.csv @@ -1,9 +1,9 @@ -P1_1,GND -P1_2,GND -P1_3,VBAT -P1_4,VCC_3V3 -P1_5,VIN_5V -P1_6,VIN_5V +#P1_1,GND +#P1_2,GND +#P1_3,VBAT +#P1_4,VCC_3V3 +#P1_5,VIN_5V +#P1_6,VIN_5V P1_7,PF2 P1_8,PF3 P1_9,PF4 @@ -40,8 +40,8 @@ P1_39,PG1 P1_40,PE7 P1_41,PE8 P1_42,PE9 -P1_43,GND -P1_44,GND +#P1_43,GND +#P1_44,GND P2_1,PG7 P2_2,PG6 P2_3,PG5 @@ -80,10 +80,10 @@ P3_9,PE3 P3_10,PE2 P3_11,PE1 P3_12,PE0 -P4_1,GND -P4_2,GND -P4_3,VCC_3V3 -P4_4,VCC_3V3 +#P4_1,GND +#P4_2,GND +#P4_3,VCC_3V3 +#P4_4,VCC_3V3 P4_5,PB9 P4_6,PB8 P4_7,PB7 @@ -122,8 +122,8 @@ P4_39,PC8 P4_40,PC7 P4_41,PC6 P4_42,PG8 -P4_43,GND -P4_44,GND +#P4_43,GND +#P4_44,GND DAC1,PA4 DAC2,PA5 SRAM_CS,PG10 diff --git a/ports/stm32/boards/stm32h743_af.csv b/ports/stm32/boards/stm32h743_af.csv index 32e67e2bdc09d..4b8ef6afdd69a 100644 --- a/ports/stm32/boards/stm32h743_af.csv +++ b/ports/stm32/boards/stm32h743_af.csv @@ -92,8 +92,8 @@ PortF,PF8,,TIM16_CH1N,,,,SPI5_MISO,SAI1_SCK_B,UART7_RTS,SAI4_SCK_B,TIM13_CH1,QUA PortF,PF9,,TIM17_CH1N,,,,SPI5_MOSI,SAI1_FS_B,UART7_CTS,SAI4_FS_B,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_INP2 PortF,PF10,,TIM16_BKIN,SAI1_D3,,,,,,,QUADSPI_CLK,SAI4_D3,,,DCMI_D11,LCD_DE,EVENTOUT,ADC3_INN2/ADC3_INP6 PortF,PF11,,,,,,SPI5_MOSI,,,,,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12,,EVENTOUT,ADC1_INP2 -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT,ADC1_INN2/DC1_INP6 -PortF,PF13,,,,DFSDM_DATIN6,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT,ACD2_INP2 +PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT,ADC1_INN2/ADC1_INP6 +PortF,PF13,,,,DFSDM_DATIN6,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT,ADC2_INP2 PortF,PF14,,,,DFSDM_CKIN6,I2C4_SCL,,,,,,,,FMC_A8,,,EVENTOUT,ADC2_INN2/ADC2_INP6 PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT, PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, diff --git a/ports/stm32/boards/stm32h7b3_af.csv b/ports/stm32/boards/stm32h7b3_af.csv index 0e1747161f3a3..e14ff481e81c5 100644 --- a/ports/stm32/boards/stm32h7b3_af.csv +++ b/ports/stm32/boards/stm32h7b3_af.csv @@ -1,7 +1,6 @@ Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, ,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,ADC PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,TIM15_BKIN,I2S6_WS/SPI6_NSS,,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI2_SD_B,,,,,EVENTOUT/EVENTOUT,ADC1_INP16, -PortA,PA0_C,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,TIM15_BKIN,I2S6_WS/SPI6_NSS,,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI2_SD_B,,,,,EVENTOUT/EVENTOUT,ADC1_INP16, PortA,PA1,,TIM2_CH2,TIM5_CH2,LPTIM3_OUT,TIM15_CH1N,,,USART2_DE/USART2_RTS,UART4_RX,OCTOSPIM_P1_IO3,SAI2_MCLK_B,OCTOSPIM_P1_DQS,,,LTDC_R2,EVENTOUT/EVENTOUT,ADC1_INN16/ADC1_INP17, PortA,PA10,,TIM1_CH3,,LPUART1_RX,,,,USART1_RX,,,USB_OTG_HS_ID,MDIOS_MDIO,LTDC_B4,DCMI_D1/PSSI_D1,LTDC_B1,EVENTOUT/EVENTOUT,, PortA,PA11,,TIM1_CH4,,LPUART1_CTS,,I2S2_WS/SPI2_NSS,UART4_RX,USART1_CTS/USART1_NSS,,FDCAN1_RX,,,,,LTDC_R4,EVENTOUT/EVENTOUT,, @@ -9,7 +8,6 @@ PortA,PA12,,TIM1_ETR,,LPUART1_DE/LPUART1_RTS,,I2S2_CK/SPI2_SCK,UART4_TX,USART1_D PortA,PA13,DEBUG_JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, PortA,PA14,DEBUG_JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, PortA,PA15,DEBUG_JTDI,TIM2_CH1/TIM2_ETR,,,CEC,I2S1_WS/SPI1_NSS,I2S3_WS/SPI3_NSS,I2S6_WS/SPI6_NSS,UART4_DE/UART4_RTS,LTDC_R3,,UART7_TX,,,LTDC_B6,EVENTOUT/EVENTOUT,, -PortA,PA1_C,,TIM2_CH2,TIM5_CH2,LPTIM3_OUT,TIM15_CH1N,,,USART2_DE/USART2_RTS,UART4_RX,OCTOSPIM_P1_IO3,SAI2_MCLK_B,OCTOSPIM_P1_DQS,,,LTDC_R2,EVENTOUT/EVENTOUT,ADC1_INN16/ADC1_INP17, PortA,PA2,,TIM2_CH3,TIM5_CH3,,TIM15_CH1,,DFSDM2_CKIN1,USART2_TX,SAI2_SCK_B,,,,MDIOS_MDIO,,LTDC_R1,EVENTOUT/EVENTOUT,ADC1_INP14, PortA,PA3,,TIM2_CH4,TIM5_CH4,OCTOSPIM_P1_CLK,TIM15_CH2,I2S6_MCK,,USART2_RX,,LTDC_B2,USB_OTG_HS_ULPI_D0,,,,LTDC_B5,EVENTOUT/EVENTOUT,ADC1_INP15, PortA,PA4,,,TIM5_ETR,,,I2S1_WS/SPI1_NSS,I2S3_WS/SPI3_NSS,USART2_CK,I2S6_WS/SPI6_NSS,,,,,DCMI_HSYNC/PSSI_DE,LTDC_VSYNC,EVENTOUT/EVENTOUT,ADC1_INP18, @@ -40,12 +38,10 @@ PortC,PC10,,,,DFSDM1_CKIN5,DFSDM2_CKIN0,,I2S3_CK/SPI3_SCK,USART3_TX,UART4_TX,OCT PortC,PC11,,,,DFSDM1_DATIN5,DFSDM2_DATIN0,,I2S3_SDI/SPI3_MISO,USART3_RX,UART4_RX,OCTOSPIM_P1_NCS,,,SDMMC1_D3,DCMI_D4/PSSI_D4,LTDC_B4,EVENTOUT/EVENTOUT,, PortC,PC12,DEBUG_TRACED3,,TIM15_CH1,,DFSDM2_CKOUT,I2S6_CK/SPI6_SCK,I2S3_SDO/SPI3_MOSI,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9/PSSI_D9,LTDC_R6,EVENTOUT/EVENTOUT,, PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortC,PC14-OSC32_IN,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortC,PC15-OSC32_OUT,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, +PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, +PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, PortC,PC2,PWR_CSTOP,,,DFSDM1_CKIN1,,I2S2_SDI/SPI2_MISO,DFSDM1_CKOUT,,,OCTOSPIM_P1_IO2,USB_OTG_HS_ULPI_DIR,OCTOSPIM_P1_IO5,FMC_SDNE0,,,EVENTOUT/EVENTOUT,ADC1_INN11/ADC1_INP12/ADC2_INN11/ADC2_INP12, -PortC,PC2_C,PWR_CSTOP,,,DFSDM1_CKIN1,,I2S2_SDI/SPI2_MISO,DFSDM1_CKOUT,,,OCTOSPIM_P1_IO2,USB_OTG_HS_ULPI_DIR,OCTOSPIM_P1_IO5,FMC_SDNE0,,,EVENTOUT/EVENTOUT,ADC1_INN11/ADC1_INP12/ADC2_INN11/ADC2_INP12, PortC,PC3,PWR_CSLEEP,,,DFSDM1_DATIN1,,I2S2_SDO/SPI2_MOSI,,,,OCTOSPIM_P1_IO0,USB_OTG_HS_ULPI_NXT,OCTOSPIM_P1_IO6,FMC_SDCKE0,,,EVENTOUT/EVENTOUT,ADC2_INP1, -PortC,PC3_C,PWR_CSLEEP,,,DFSDM1_DATIN1,,I2S2_SDO/SPI2_MOSI,,,,OCTOSPIM_P1_IO0,USB_OTG_HS_ULPI_NXT,OCTOSPIM_P1_IO6,FMC_SDCKE0,,,EVENTOUT/EVENTOUT,ADC2_INP1, PortC,PC4,,,,DFSDM1_CKIN2,,I2S1_MCK,,,,SPDIFRX_IN3,,,FMC_SDNE0,,LTDC_R7,EVENTOUT/EVENTOUT,ADC1_INP4/ADC2_INP4, PortC,PC5,,,SAI1_D3,DFSDM1_DATIN2,PSSI_D15,,,,,SPDIFRX_IN4,OCTOSPIM_P1_DQS,,FMC_SDCKE0,COMP1_OUT,LTDC_DE,EVENTOUT/EVENTOUT,ADC1_INN4/ADC1_INP8/ADC2_INN4/ADC2_INP8, PortC,PC6,,,TIM3_CH1,TIM8_CH1,DFSDM1_CKIN3,I2S2_MCK,,USART6_TX,SDMMC1_D0DIR,FMC_NWAIT,SDMMC2_D6,,SDMMC1_D6,DCMI_D0/PSSI_D0,LTDC_HSYNC,EVENTOUT/EVENTOUT,, @@ -68,7 +64,6 @@ PortD,PD6,,,SAI1_D1,DFSDM1_CKIN4,DFSDM1_DATIN1,I2S3_SDO/SPI3_MOSI,SAI1_SD_A,USAR PortD,PD7,,,,DFSDM1_DATIN4,,I2S1_SDO/SPI1_MOSI,DFSDM1_CKIN1,USART2_CK,,SPDIFRX_IN1,OCTOSPIM_P1_IO7,SDMMC2_CMD,FMC_NE1,,,EVENTOUT/EVENTOUT,, PortD,PD8,,,,DFSDM1_CKIN3,,,,USART3_TX,,SPDIFRX_IN2,,,FMC_D13/FMC_DA13,,,EVENTOUT/EVENTOUT,, PortD,PD9,,,,DFSDM1_DATIN3,,,,USART3_RX,,,,,FMC_D14/FMC_DA14,,,EVENTOUT/EVENTOUT,, -PortD,PDR_ON,,,,,,,,,,,,,,,,EVENTOUT,, PortE,PE0,,LPTIM1_ETR,TIM4_ETR,,LPTIM2_ETR,,,,UART8_RX,,SAI2_MCLK_A,,FMC_NBL0,DCMI_D2/PSSI_D2,LTDC_R0,EVENTOUT/EVENTOUT,, PortE,PE1,,LPTIM1_IN2,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3/PSSI_D3,LTDC_R6,EVENTOUT/EVENTOUT,, PortE,PE10,,TIM1_CH2N,,DFSDM1_DATIN4,,,,UART7_CTS,,,OCTOSPIM_P1_IO7,,FMC_D7/FMC_DA7,,,EVENTOUT/EVENTOUT,, @@ -117,8 +112,8 @@ PortG,PG6,,TIM17_BKIN,,,,,,,,,OCTOSPIM_P1_NCS,,FMC_NE3,DCMI_D12/PSSI_D12,LTDC_R7 PortG,PG7,,,,,,,SAI1_MCLK_A,USART6_CK,,OCTOSPIM_P2_DQS,,,FMC_INT,DCMI_D13/PSSI_D13,LTDC_CLK,EVENTOUT/EVENTOUT,, PortG,PG8,,,,TIM8_ETR,,I2S6_WS/SPI6_NSS,,USART6_DE/USART6_RTS,SPDIFRX_IN3,,,,FMC_SDCLK,,LTDC_G7,EVENTOUT/EVENTOUT,, PortG,PG9,,,,,,I2S1_SDI/SPI1_MISO,,USART6_RX,SPDIFRX_IN4,OCTOSPIM_P1_IO6,SAI2_FS_B,SDMMC2_D0,FMC_NCE/FMC_NE2,DCMI_VSYNC/PSSI_RDY,,EVENTOUT/EVENTOUT,, -PortH,PH0-OSC_IN,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortH,PH1-OSC_OUT,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, +PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, +PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, PortH,PH10,,,TIM5_CH1,,I2C4_SMBA,,,,,,,,FMC_D18,DCMI_D1/PSSI_D1,LTDC_R4,EVENTOUT/EVENTOUT,, PortH,PH11,,,TIM5_CH2,,I2C4_SCL,,,,,,,,FMC_D19,DCMI_D2/PSSI_D2,LTDC_R5,EVENTOUT/EVENTOUT,, PortH,PH12,,,TIM5_CH3,,I2C4_SDA,,,,,,,,FMC_D20,DCMI_D3/PSSI_D3,LTDC_R6,EVENTOUT/EVENTOUT,, From 286b1b3ed9da4db156a7fc3fc4f191efb9125aa0 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 2 Nov 2023 14:34:34 +1100 Subject: [PATCH 13/20] stm32/boards: Format stm32 alternate function csv files. Changes are: - Pad all cells to make them easier to read. - Ensure all files have exactly 19 columns (Port,Pin,AF0-15,ADC) This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/stm32/boards/stm32f091_af.csv | 180 +++++++-------- ports/stm32/boards/stm32f401_af.csv | 166 +++++++------- ports/stm32/boards/stm32f405_af.csv | 284 +++++++++++------------ ports/stm32/boards/stm32f411_af.csv | 168 +++++++------- ports/stm32/boards/stm32f412_af.csv | 232 +++++++++---------- ports/stm32/boards/stm32f413_af.csv | 232 +++++++++---------- ports/stm32/boards/stm32f429_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32f439_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32f446_af.csv | 232 +++++++++---------- ports/stm32/boards/stm32f479_af.csv | 322 +++++++++++++------------- ports/stm32/boards/stm32f722_af.csv | 292 ++++++++++++------------ ports/stm32/boards/stm32f746_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32f767_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32g0b1_af.csv | 192 ++++++++-------- ports/stm32/boards/stm32g474_af.csv | 218 +++++++++--------- ports/stm32/boards/stm32h573_af.csv | 284 +++++++++++------------ ports/stm32/boards/stm32h723_af.csv | 232 +++++++++---------- ports/stm32/boards/stm32h743_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32h7b3_af.csv | 340 ++++++++++++++-------------- ports/stm32/boards/stm32l072_af.csv | 168 +++++++------- ports/stm32/boards/stm32l152_af.csv | 234 +++++++++---------- ports/stm32/boards/stm32l432_af.csv | 56 ++--- ports/stm32/boards/stm32l452_af.csv | 170 +++++++------- ports/stm32/boards/stm32l476_af.csv | 232 +++++++++---------- ports/stm32/boards/stm32l496_af.csv | 284 +++++++++++------------ ports/stm32/boards/stm32wb55_af.csv | 148 ++++++------ ports/stm32/boards/stm32wl55_af.csv | 90 ++++---- 27 files changed, 3228 insertions(+), 3228 deletions(-) diff --git a/ports/stm32/boards/stm32f091_af.csv b/ports/stm32/boards/stm32f091_af.csv index 8074fd22b7131..5e44697776b13 100644 --- a/ports/stm32/boards/stm32f091_af.csv +++ b/ports/stm32/boards/stm32f091_af.csv @@ -1,90 +1,90 @@ -Port,Pin,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,,,,,,,,, -,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,,,,,,,,,ADC -PortA,PA0,,USART2_CTS,TIM2_CH1_ETR,TSC_G1_IO1,USART4_TX,,,COMP1_OUT,,,,,,,,,ADC1_IN0 -PortA,PA1,EVENTOUT,USART2_RTS,TIM2_CH2,TSC_G1_IO2,USART4_RX,TIM15_CH1N,,,,,,,,,,,ADC1_IN1 -PortA,PA2,TIM15_CH1,USART2_TX,TIM2_CH3,TSC_G1_IO3,,,,COMP2_OUT,,,,,,,,,ADC1_IN2 -PortA,PA3,TIM15_CH2,USART2_RX,TIM2_CH4,TSC_G1_IO4,,,,,,,,,,,,,ADC1_IN3 -PortA,PA4,SPI1_NSS/I2S1_WS,USART2_CK,,TSC_G2_IO1,TIM14_CH1,USART6_TX,,,,,,,,,,,ADC1_IN4 -PortA,PA5,SPI1_SCK/I2S1_CK,CEC,TIM2_CH1_ETR,TSC_G2_IO2,,USART6_RX,,,,,,,,,,,ADC1_IN5 -PortA,PA6,SPI1_MISO/I2S1_MCK,TIM3_CH1,TIM1_BKIN,TSC_G2_IO3,USART3_CTS,TIM16_CH1,EVENTOUT,COMP1_OUT,,,,,,,,,ADC1_IN6 -PortA,PA7,SPI1_MOSI/I2S1_SD,TIM3_CH2,TIM1_CH1N,TSC_G2_IO4,TIM14_CH1,TIM17_CH1,EVENTOUT,COMP2_OUT,,,,,,,,,ADC1_IN7 -PortA,PA8,MCO,USART1_CK,TIM1_CH1,EVENTOUT,CRS_SYNC,,,,,,,,,,,, -PortA,PA9,TIM15_BKIN,USART1_TX,TIM1_CH2,TSC_G4_IO1,I2C1_SCL,MCO,,,,,,,,,,, -PortA,PA10,TIM17_BKIN,USART1_RX,TIM1_CH3,TSC_G4_IO2,I2C1_SDA,,,,,,,,,,,, -PortA,PA11,EVENTOUT,USART1_CTS,TIM1_CH4,TSC_G4_IO3,CAN1_RX,I2C2_SCL,,COMP1_OUT,,,,,,,,, -PortA,PA12,EVENTOUT,USART1_RTS,TIM1_ETR,TSC_G4_IO4,CAN1_TX,I2C2_SDA,,COMP2_OUT,,,,,,,,, -PortA,PA13,SWDIO,IR_OUT,,,,,,,,,,,,,,, -PortA,PA14,SWCLK,USART2_TX,,,,,,,,,,,,,,, -PortA,PA15,SPI1_NSS/I2S1_WS,USART2_RX,TIM2_CH1_ETR,EVENTOUT,USART4_RTS,,,,,,,,,,,, -PortB,PB0,EVENTOUT,TIM3_CH3,TIM1_CH2N,TSC_G3_IO2,USART3_CK,,,,,,,,,,,,ADC1_IN8 -PortB,PB1,TIM14_CH1,TIM3_CH4,TIM1_CH3N,TSC_G3_IO3,USART3_RTS,,,,,,,,,,,,ADC1_IN9 -PortB,PB2,,,,TSC_G3_IO4,,,,,,,,,,,,, -PortB,PB3,SPI1_SCK/I2S1_CK,EVENTOUT,TIM2_CH2,TSC_G5_IO1,USART5_TX,,,,,,,,,, -PortB,PB4,SPI1_MISO/I2S1_MCK,TIM3_CH1,EVENTOUT,TSC_G5_IO2,USART5_RX,TIM17_BKIN,,,,,,,,, -PortB,PB5,SPI1_MOSI/I2S1_SD,TIM3_CH2,TIM16_BKIN,I2C1_SMBA,USART5_CK/USART5_RTS,,,,,,,,,, -PortB,PB6,USART1_TX,I2C1_SCL,TIM16_CH1N,TSC_G5_IO3,,,,,,,,,,, -PortB,PB7,USART1_RX,I2C1_SDA,TIM17_CH1N,TSC_G5_IO4,USART4_CTS,,,,,,,,,, -PortB,PB8,CEC,I2C1_SCL,TIM16_CH1,TSC_SYNC,CAN1_RX,,,,,,,,,, -PortB,PB9,IR_OUT,I2C1_SDA,TIM17_CH1,EVENTOUT,CAN1_TX,SPI2_NSS/I2S2_WS,,,,,,,,, -PortB,PB10,CEC,I2C2_SCL,TIM2_CH3,TSC_SYNC,USART3_TX,SPI2_SCK/I2S2_CK,,,,,,,,, -PortB,PB11,EVENTOUT,I2C2_SDA,TIM2_CH4,TSC_G6_IO1,USART3_RX,,,,,,,,,, -PortB,PB12,SPI2_NSS/I2S2_WS,EVENTOUT,TIM1_BKIN,TSC_G6_IO2,USART3_CK,TIM15_BKIN,,,,,,,,, -PortB,PB13,SPI2_SCK/I2S2_CK,,TIM1_CH1N,TSC_G6_IO3,USART3_CTS,I2C2_SCL,,,,,,,,, -PortB,PB14,SPI2_MISO/I2S2_MCK,TIM15_CH1,TIM1_CH2N,TSC_G6_IO4,USART3_RTS,I2C2_SDA,,,,,,,,, -PortB,PB15,SPI2_MOSI/I2S2_SD,TIM15_CH2,TIM1_CH3N,TIM15_CH1N,,,,,,,,,,, -PortC,PC0,EVENTOUT,USART7_TX,USART6_TX,,,,,,,,,,,,,,ADC1_IN10 -PortC,PC1,EVENTOUT,USART7_RX,USART6_RX,,,,,,,,,,,,,,ADC1_IN11 -PortC,PC2,EVENTOUT,SPI2_MISO/I2S2_MCK,USART8_TX,,,,,,,,,,,,,,ADC1_IN12 -PortC,PC3,EVENTOUT,SPI2_MOSI/I2S2_SD,USART8_RX,,,,,,,,,,,,,,ADC1_IN13 -PortC,PC4,EVENTOUT,USART3_TX,,,,,,,,,,,,,,,ADC1_IN14 -PortC,PC5,TSC_G3_IO1,USART3_RX,,,,,,,,,,,,,,,ADC1_IN15 -PortC,PC6,TIM3_CH1,USART7_TX,,,,,,,,,,,,,,, -PortC,PC7,TIM3_CH2,USART7_RX,,,,,,,,,,,,,,, -PortC,PC8,TIM3_CH3,USART8_TX,,,,,,,,,,,,,,, -PortC,PC9,TIM3_CH4,USART8_RX,,,,,,,,,,,,,,, -PortC,PC10,USART4_TX,USART3_TX,,,,,,,,,,,,,,, -PortC,PC11,USART4_RX,USART3_RX,,,,,,,,,,,,,,, -PortC,PC12,USART4_CK,USART3_CK,USART5_TX,,,,,,,,,,,,,, -PortC,PC13,,,,,,,,,,,,,,,,, -PortC,PC14,,,,,,,,,,,,,,,,, -PortC,PC15,,,,,,,,,,,,,,,,, -PortD,PD0,CAN1_RX,SPI2_NSS/I2S2_WS,,,,,,,,,,,,,,, -PortD,PD1,CAN1_TX,SPI2_SCK/I2S2_CK,,,,,,,,,,,,,,, -PortD,PD2,TIM3_ETR,USART3_RTS,USART5_RX,,,,,,,,,,,,,, -PortD,PD3,USART2_CTS,SPI2_MISO/I2S2_MCK,,,,,,,,,,,,,,, -PortD,PD4,USART2_RTS,SPI2_MOSI/I2S2_SD,,,,,,,,,,,,,,, -PortD,PD5,USART2_TX,,,,,,,,,,,,,,,, -PortD,PD6,USART2_RX,,,,,,,,,,,,,,,, -PortD,PD7,USART2_CK,,,,,,,,,,,,,,,, -PortD,PD8,USART3_TX,,,,,,,,,,,,,,,, -PortD,PD9,USART3_RX,,,,,,,,,,,,,,,, -PortD,PD10,USART3_CK,,,,,,,,,,,,,,,, -PortD,PD11,USART3_CTS,,,,,,,,,,,,,,,, -PortD,PD12,USART3_RTS,TSC_G8_IO1,USART8_CK/USART8_RTS,,,,,,,,,,,,,, -PortD,PD13,USART8_TX,TSC_G8_IO2,,,,,,,,,,,,,,, -PortD,PD14,USART8_RX,TSC_G8_IO3,,,,,,,,,,,,,,, -PortD,PD15,CRS_SYNC,TSC_G8_IO4,USART7_CK/USART7_RTS,,,,,,,,,,,,,, -PortE,PE0,TIM16_CH1,EVENTOUT,,,,,,,,,,,,,,, -PortE,PE1,TIM17_CH1,EVENTOUT,,,,,,,,,,,,,,, -PortE,PE2,TIM3_ETR,TSC_G7_IO1,,,,,,,,,,,,,,, -PortE,PE3,TIM3_CH1,TSC_G7_IO2,,,,,,,,,,,,,,, -PortE,PE4,TIM3_CH2,TSC_G7_IO3,,,,,,,,,,,,,,, -PortE,PE5,TIM3_CH3,TSC_G7_IO4,,,,,,,,,,,,,,, -PortE,PE6,TIM3_CH4,,,,,,,,,,,,,,,, -PortE,PE7,TIM1_ETR,USART5_CK/USART5_RTS,,,,,,,,,,,,,,, -PortE,PE8,TIM1_CH1N,USART4_TX,,,,,,,,,,,,,,, -PortE,PE9,TIM1_CH1,USART4_RX,,,,,,,,,,,,,,, -PortE,PE10,TIM1_CH2N,USART5_TX,,,,,,,,,,,,,,, -PortE,PE11,TIM1_CH2,USART5_RX,,,,,,,,,,,,,,, -PortE,PE12,TIM1_CH3N,SPI1_NSS/I2S1_WS,,,,,,,,,,,,,,, -PortE,PE13,TIM1_CH3,SPI1_SCK/I2S1_CK,,,,,,,,,,,,,,, -PortE,PE14,TIM1_CH4,SPI1_MISO/I2S1_MCK,,,,,,,,,,,,,,, -PortE,PE15,TIM1_BKIN,SPI1_MOSI/I2S1_SD,,,,,,,,,,,,,,, -PortF,PF0,CRS_SYNC,I2C1_SDA,,,,,,,,,,,,,,, -PortF,PF1,,I2C1_SCL,,,,,,,,,,,,,,, -PortF,PF2,EVENTOUT,USART7_TX,USART7_CK/USART7_RTS,,,,,,,,,,,,,, -PortF,PF3,EVENTOUT,USART7_RX,USART6_CK/USART6_RTS,,,,,,,,,,,,,, -PortF,PF6,,,,,,,,,,,,,,,,, -PortF,PF9,TIM15_CH1,USART6_TX,,,,,,,,,,,,,,, -PortF,PF10,TIM15_CH2,USART6_RX,,,,,,,,,,,,,,, -PortF,PF11,,,,,,,,,,,,,,,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,,,,,,,,,ADC + , ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,,,,,,,,,ADC +PortA,PA0 , ,USART2_CTS ,TIM2_CH1_ETR ,TSC_G1_IO1,USART4_TX , , ,COMP1_OUT,,,,,,,,,ADC1_IN0 +PortA,PA1 ,EVENTOUT ,USART2_RTS ,TIM2_CH2 ,TSC_G1_IO2,USART4_RX ,TIM15_CH1N , , ,,,,,,,,,ADC1_IN1 +PortA,PA2 ,TIM15_CH1 ,USART2_TX ,TIM2_CH3 ,TSC_G1_IO3, , , ,COMP2_OUT,,,,,,,,,ADC1_IN2 +PortA,PA3 ,TIM15_CH2 ,USART2_RX ,TIM2_CH4 ,TSC_G1_IO4, , , , ,,,,,,,,,ADC1_IN3 +PortA,PA4 ,SPI1_NSS/I2S1_WS ,USART2_CK , ,TSC_G2_IO1,TIM14_CH1 ,USART6_TX , , ,,,,,,,,,ADC1_IN4 +PortA,PA5 ,SPI1_SCK/I2S1_CK ,CEC ,TIM2_CH1_ETR ,TSC_G2_IO2, ,USART6_RX , , ,,,,,,,,,ADC1_IN5 +PortA,PA6 ,SPI1_MISO/I2S1_MCK,TIM3_CH1 ,TIM1_BKIN ,TSC_G2_IO3,USART3_CTS ,TIM16_CH1 ,EVENTOUT,COMP1_OUT,,,,,,,,,ADC1_IN6 +PortA,PA7 ,SPI1_MOSI/I2S1_SD ,TIM3_CH2 ,TIM1_CH1N ,TSC_G2_IO4,TIM14_CH1 ,TIM17_CH1 ,EVENTOUT,COMP2_OUT,,,,,,,,,ADC1_IN7 +PortA,PA8 ,MCO ,USART1_CK ,TIM1_CH1 ,EVENTOUT ,CRS_SYNC , , , ,,,,,,,,, +PortA,PA9 ,TIM15_BKIN ,USART1_TX ,TIM1_CH2 ,TSC_G4_IO1,I2C1_SCL ,MCO , , ,,,,,,,,, +PortA,PA10,TIM17_BKIN ,USART1_RX ,TIM1_CH3 ,TSC_G4_IO2,I2C1_SDA , , , ,,,,,,,,, +PortA,PA11,EVENTOUT ,USART1_CTS ,TIM1_CH4 ,TSC_G4_IO3,CAN1_RX ,I2C2_SCL , ,COMP1_OUT,,,,,,,,, +PortA,PA12,EVENTOUT ,USART1_RTS ,TIM1_ETR ,TSC_G4_IO4,CAN1_TX ,I2C2_SDA , ,COMP2_OUT,,,,,,,,, +PortA,PA13,SWDIO ,IR_OUT , , , , , , ,,,,,,,,, +PortA,PA14,SWCLK ,USART2_TX , , , , , , ,,,,,,,,, +PortA,PA15,SPI1_NSS/I2S1_WS ,USART2_RX ,TIM2_CH1_ETR ,EVENTOUT ,USART4_RTS , , , ,,,,,,,,, +PortB,PB0 ,EVENTOUT ,TIM3_CH3 ,TIM1_CH2N ,TSC_G3_IO2,USART3_CK , , , ,,,,,,,,,ADC1_IN8 +PortB,PB1 ,TIM14_CH1 ,TIM3_CH4 ,TIM1_CH3N ,TSC_G3_IO3,USART3_RTS , , , ,,,,,,,,,ADC1_IN9 +PortB,PB2 , , , ,TSC_G3_IO4, , , , ,,,,,,,,, +PortB,PB3 ,SPI1_SCK/I2S1_CK ,EVENTOUT ,TIM2_CH2 ,TSC_G5_IO1,USART5_TX , , , ,,,,,,,,, +PortB,PB4 ,SPI1_MISO/I2S1_MCK,TIM3_CH1 ,EVENTOUT ,TSC_G5_IO2,USART5_RX ,TIM17_BKIN , , ,,,,,,,,, +PortB,PB5 ,SPI1_MOSI/I2S1_SD ,TIM3_CH2 ,TIM16_BKIN ,I2C1_SMBA ,USART5_CK/USART5_RTS, , , ,,,,,,,,, +PortB,PB6 ,USART1_TX ,I2C1_SCL ,TIM16_CH1N ,TSC_G5_IO3, , , , ,,,,,,,,, +PortB,PB7 ,USART1_RX ,I2C1_SDA ,TIM17_CH1N ,TSC_G5_IO4,USART4_CTS , , , ,,,,,,,,, +PortB,PB8 ,CEC ,I2C1_SCL ,TIM16_CH1 ,TSC_SYNC ,CAN1_RX , , , ,,,,,,,,, +PortB,PB9 ,IR_OUT ,I2C1_SDA ,TIM17_CH1 ,EVENTOUT ,CAN1_TX ,SPI2_NSS/I2S2_WS, , ,,,,,,,,, +PortB,PB10,CEC ,I2C2_SCL ,TIM2_CH3 ,TSC_SYNC ,USART3_TX ,SPI2_SCK/I2S2_CK, , ,,,,,,,,, +PortB,PB11,EVENTOUT ,I2C2_SDA ,TIM2_CH4 ,TSC_G6_IO1,USART3_RX , , , ,,,,,,,,, +PortB,PB12,SPI2_NSS/I2S2_WS ,EVENTOUT ,TIM1_BKIN ,TSC_G6_IO2,USART3_CK ,TIM15_BKIN , , ,,,,,,,,, +PortB,PB13,SPI2_SCK/I2S2_CK , ,TIM1_CH1N ,TSC_G6_IO3,USART3_CTS ,I2C2_SCL , , ,,,,,,,,, +PortB,PB14,SPI2_MISO/I2S2_MCK,TIM15_CH1 ,TIM1_CH2N ,TSC_G6_IO4,USART3_RTS ,I2C2_SDA , , ,,,,,,,,, +PortB,PB15,SPI2_MOSI/I2S2_SD ,TIM15_CH2 ,TIM1_CH3N ,TIM15_CH1N, , , , ,,,,,,,,, +PortC,PC0 ,EVENTOUT ,USART7_TX ,USART6_TX , , , , , ,,,,,,,,,ADC1_IN10 +PortC,PC1 ,EVENTOUT ,USART7_RX ,USART6_RX , , , , , ,,,,,,,,,ADC1_IN11 +PortC,PC2 ,EVENTOUT ,SPI2_MISO/I2S2_MCK ,USART8_TX , , , , , ,,,,,,,,,ADC1_IN12 +PortC,PC3 ,EVENTOUT ,SPI2_MOSI/I2S2_SD ,USART8_RX , , , , , ,,,,,,,,,ADC1_IN13 +PortC,PC4 ,EVENTOUT ,USART3_TX , , , , , , ,,,,,,,,,ADC1_IN14 +PortC,PC5 ,TSC_G3_IO1 ,USART3_RX , , , , , , ,,,,,,,,,ADC1_IN15 +PortC,PC6 ,TIM3_CH1 ,USART7_TX , , , , , , ,,,,,,,,, +PortC,PC7 ,TIM3_CH2 ,USART7_RX , , , , , , ,,,,,,,,, +PortC,PC8 ,TIM3_CH3 ,USART8_TX , , , , , , ,,,,,,,,, +PortC,PC9 ,TIM3_CH4 ,USART8_RX , , , , , , ,,,,,,,,, +PortC,PC10,USART4_TX ,USART3_TX , , , , , , ,,,,,,,,, +PortC,PC11,USART4_RX ,USART3_RX , , , , , , ,,,,,,,,, +PortC,PC12,USART4_CK ,USART3_CK ,USART5_TX , , , , , ,,,,,,,,, +PortC,PC13, , , , , , , , ,,,,,,,,, +PortC,PC14, , , , , , , , ,,,,,,,,, +PortC,PC15, , , , , , , , ,,,,,,,,, +PortD,PD0 ,CAN1_RX ,SPI2_NSS/I2S2_WS , , , , , , ,,,,,,,,, +PortD,PD1 ,CAN1_TX ,SPI2_SCK/I2S2_CK , , , , , , ,,,,,,,,, +PortD,PD2 ,TIM3_ETR ,USART3_RTS ,USART5_RX , , , , , ,,,,,,,,, +PortD,PD3 ,USART2_CTS ,SPI2_MISO/I2S2_MCK , , , , , , ,,,,,,,,, +PortD,PD4 ,USART2_RTS ,SPI2_MOSI/I2S2_SD , , , , , , ,,,,,,,,, +PortD,PD5 ,USART2_TX , , , , , , , ,,,,,,,,, +PortD,PD6 ,USART2_RX , , , , , , , ,,,,,,,,, +PortD,PD7 ,USART2_CK , , , , , , , ,,,,,,,,, +PortD,PD8 ,USART3_TX , , , , , , , ,,,,,,,,, +PortD,PD9 ,USART3_RX , , , , , , , ,,,,,,,,, +PortD,PD10,USART3_CK , , , , , , , ,,,,,,,,, +PortD,PD11,USART3_CTS , , , , , , , ,,,,,,,,, +PortD,PD12,USART3_RTS ,TSC_G8_IO1 ,USART8_CK/USART8_RTS, , , , , ,,,,,,,,, +PortD,PD13,USART8_TX ,TSC_G8_IO2 , , , , , , ,,,,,,,,, +PortD,PD14,USART8_RX ,TSC_G8_IO3 , , , , , , ,,,,,,,,, +PortD,PD15,CRS_SYNC ,TSC_G8_IO4 ,USART7_CK/USART7_RTS, , , , , ,,,,,,,,, +PortE,PE0 ,TIM16_CH1 ,EVENTOUT , , , , , , ,,,,,,,,, +PortE,PE1 ,TIM17_CH1 ,EVENTOUT , , , , , , ,,,,,,,,, +PortE,PE2 ,TIM3_ETR ,TSC_G7_IO1 , , , , , , ,,,,,,,,, +PortE,PE3 ,TIM3_CH1 ,TSC_G7_IO2 , , , , , , ,,,,,,,,, +PortE,PE4 ,TIM3_CH2 ,TSC_G7_IO3 , , , , , , ,,,,,,,,, +PortE,PE5 ,TIM3_CH3 ,TSC_G7_IO4 , , , , , , ,,,,,,,,, +PortE,PE6 ,TIM3_CH4 , , , , , , , ,,,,,,,,, +PortE,PE7 ,TIM1_ETR ,USART5_CK/USART5_RTS, , , , , , ,,,,,,,,, +PortE,PE8 ,TIM1_CH1N ,USART4_TX , , , , , , ,,,,,,,,, +PortE,PE9 ,TIM1_CH1 ,USART4_RX , , , , , , ,,,,,,,,, +PortE,PE10,TIM1_CH2N ,USART5_TX , , , , , , ,,,,,,,,, +PortE,PE11,TIM1_CH2 ,USART5_RX , , , , , , ,,,,,,,,, +PortE,PE12,TIM1_CH3N ,SPI1_NSS/I2S1_WS , , , , , , ,,,,,,,,, +PortE,PE13,TIM1_CH3 ,SPI1_SCK/I2S1_CK , , , , , , ,,,,,,,,, +PortE,PE14,TIM1_CH4 ,SPI1_MISO/I2S1_MCK , , , , , , ,,,,,,,,, +PortE,PE15,TIM1_BKIN ,SPI1_MOSI/I2S1_SD , , , , , , ,,,,,,,,, +PortF,PF0 ,CRS_SYNC ,I2C1_SDA , , , , , , ,,,,,,,,, +PortF,PF1 , ,I2C1_SCL , , , , , , ,,,,,,,,, +PortF,PF2 ,EVENTOUT ,USART7_TX ,USART7_CK/USART7_RTS, , , , , ,,,,,,,,, +PortF,PF3 ,EVENTOUT ,USART7_RX ,USART6_CK/USART6_RTS, , , , , ,,,,,,,,, +PortF,PF6 , , , , , , , , ,,,,,,,,, +PortF,PF9 ,TIM15_CH1 ,USART6_TX , , , , , , ,,,,,,,,, +PortF,PF10,TIM15_CH2 ,USART6_RX , , , , , , ,,,,,,,,, +PortF,PF11, , , , , , , , ,,,,,,,,, diff --git a/ports/stm32/boards/stm32f401_af.csv b/ports/stm32/boards/stm32f401_af.csv index 1acb8e4313293..28266da944cf0 100644 --- a/ports/stm32/boards/stm32f401_af.csv +++ b/ports/stm32/boards/stm32f401_af.csv @@ -1,83 +1,83 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2/I2C3,SPI1/SPI2/I2S2/SPI3/I2S3/SPI4,SPI2/I2S2/SPI3/I2S3,SPI3/I2S3/USART1/USART2,USART6,I2C2/I2C3,OTG1_FS,,SDIO,,,,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,,,,,USART2_CTS,,,,,,,,EVENTOUT,ADC1_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,,,,,,,,EVENTOUT,ADC1_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,,,,,EVENTOUT,ADC1_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,,,,,,EVENTOUT,ADC1_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,,,,EVENTOUT,ADC1_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,,,SPI1_SCK,,,,,,,,,,EVENTOUT,ADC1_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,,,SPI1_MISO,,,,,,,,,,EVENTOUT,ADC1_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,,,SPI1_MOSI,,,,,,,,,,EVENTOUT,ADC1_IN7 -PortA,PA8,MCO_1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,,,USART1_TX,,,OTG_FS_VBUS,,,,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,USART6_TX,,OTG_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,USART6_RX,,OTG_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,,,,,,,,,,,,,EVENTOUT,ADC1_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,,,,,,,,,,,,,EVENTOUT,ADC1_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,I2C2_SDA,,,,,,EVENTOUT, -PortB,PB4,JTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,,I2C3_SDA,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,,,,,,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,,,,,,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,,,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,,,,SDIO_D4,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,,,,SDIO_D5,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,,,,,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,,,,,,,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,,,,,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,,,SPI2_MISO,I2S2ext_SD,,,,,,,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,,,SPI2_MOSI/I2S2_SD,,,,,,,,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN10 -PortC,PC1,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,,,,,,,,,EVENTOUT,ADC1_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,,,,,,EVENTOUT,ADC1_IN13 -PortC,PC4,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN14 -PortC,PC5,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN15 -PortC,PC6,,,TIM3_CH1,,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,,,,I2S3_MCK,,USART6_RX,,,,SDIO_D7,,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,,,,,,USART6_CK,,,,SDIO_D0,,,EVENTOUT, -PortC,PC9,MCO_2,,TIM3_CH4,,I2C3_SDA,I2S_CKIN,,,,,,,SDIO_D1,,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,,,,,,SDIO_D2,,,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,,,,,,SDIO_D3,,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,,,,,,SDIO_CK,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD1,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,,,,,SDIO_CMD,,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,,,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,,USART2_RX,,,,,,,,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,,,,EVENTOUT, -PortD,PD8,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD9,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD10,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD11,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,,,,,,,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,,,,,,,,EVENTOUT, -PortE,PE1,,TIM1_CH2N,,,,,,,,,,,,,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,,,,,,,,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,,,,,,,,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,,,,,,,,,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI,,,,,,,,,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,,,,,,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,,,,,,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,,,,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,,,,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,,,,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,,,,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,,,,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,,,,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12 ,AF13,AF14,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2 ,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2/I2C3,SPI1/SPI2/I2S2/SPI3/I2S3/SPI4,SPI2/I2S2/SPI3/I2S3,SPI3/I2S3/USART1/USART2,USART6 ,I2C2/I2C3,OTG1_FS , ,SDIO , , , ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1 , , , , ,USART2_CTS , , , , , , , ,EVENTOUT,ADC1_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , , , ,USART2_RTS , , , , , , , ,EVENTOUT,ADC1_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,TIM9_CH1 , , , ,USART2_TX , , , , , , , ,EVENTOUT,ADC1_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,TIM9_CH2 , , , ,USART2_RX , , , , , , , ,EVENTOUT,ADC1_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , , , , ,EVENTOUT,ADC1_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, , , ,SPI1_SCK , , , , , , , , , ,EVENTOUT,ADC1_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 , , ,SPI1_MISO , , , , , , , , , ,EVENTOUT,ADC1_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 , , ,SPI1_MOSI , , , , , , , , , ,EVENTOUT,ADC1_IN7 +PortA,PA8 ,MCO_1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA , , ,USART1_TX , , ,OTG_FS_VBUS, , , , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , , , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS ,USART6_TX, ,OTG_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS ,USART6_RX, ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 , , , , , , , , , , , , ,EVENTOUT,ADC1_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 , , , , , , , , , , , , ,EVENTOUT,ADC1_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , ,I2C2_SDA , , , , , ,EVENTOUT, +PortB,PB4 ,JTRST , ,TIM3_CH1 , , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD , ,I2C3_SDA , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2 , ,I2C1_SMBA ,SPI1_MOSI ,SPI3_MOSI/I2S3_SD , , , , , , , , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1 , ,I2C1_SCL , , ,USART1_TX , , , , , , , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2 , ,I2C1_SDA , , ,USART1_RX , , , , , , , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 ,TIM10_CH1 ,I2C1_SCL , , , , , , , ,SDIO_D4 , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4 ,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , , , , ,SDIO_D5 , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , , , , , , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS , , , , , , , , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , , , , , , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , , , ,SPI2_MISO ,I2S2ext_SD , , , , , , , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , , , ,SPI2_MOSI/I2S2_SD , , , , , , , , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN10 +PortC,PC1 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD , , , , , , , , ,EVENTOUT,ADC1_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD , , , , , , , , , ,EVENTOUT,ADC1_IN13 +PortC,PC4 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN14 +PortC,PC5 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN15 +PortC,PC6 , , ,TIM3_CH1 , , ,I2S2_MCK , , ,USART6_TX, , , ,SDIO_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 , , , ,I2S3_MCK , ,USART6_RX, , , ,SDIO_D7 , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 , , , , , ,USART6_CK, , , ,SDIO_D0 , , ,EVENTOUT, +PortC,PC9 ,MCO_2 , ,TIM3_CH4 , ,I2C3_SDA ,I2S_CKIN , , , , , , ,SDIO_D1 , , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK , , , , , ,SDIO_D2 , , ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO , , , , , ,SDIO_D3 , , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD , , , , , ,SDIO_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , , , , , , , , , ,SDIO_CMD, , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , , , , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , , , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , , , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD , ,USART2_RX , , , , , , , ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , , , , ,EVENTOUT, +PortD,PD8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD9 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD10, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD11, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR , , , , , , , , , , , , ,EVENTOUT, +PortE,PE1 , ,TIM1_CH2N , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK , , , , , , , , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS , , , , , , , , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO , , , , , , , , , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI , , , , , , , , , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , , , , , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , , , , , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , , , , , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , , , , , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f405_af.csv b/ports/stm32/boards/stm32f405_af.csv index 2602db877504d..d30779d45f189 100644 --- a/ports/stm32/boards/stm32f405_af.csv +++ b/ports/stm32/boards/stm32f405_af.csv @@ -1,142 +1,142 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11,I2C1/2/3,SPI1/SPI2/I2S2/I2S2ext,SPI3/I2Sext/I2S3,USART1/2/3/I2S3ext,UART4/5/USART6,CAN1/CAN2/TIM12/13/14,OTG_FS/OTG_HS,ETH,FSMC/SDIO/OTG_FS,DCMI,,,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,ETH_MII_CRS,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,,,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,ETH_MDIO,,,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,OTG_HS_ULPI_D0,ETH_MII_COL,,,,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK,,,,,OTG_HS_ULPI_CK,,,,,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,DCMI_PIXCK,,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI,,,,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,,,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,,CAN1_TX,OTG_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,,,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,,DCMI_D10,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,CAN2_TX,,,,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FSMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,ETH_MII_TXD3,SDIO_D4,DCMI_D6,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,,,SDIO_D5,DCMI_D7,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,I2S2ext_SD,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,OTG_HS_ULPI_STP,,,,,EVENTOUT,ADC123_IN10 -PortC,PC1,,,,,,,,,,,,ETH_MDC,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,,,,,,,ETH_MII_RXD0/ETH_RMII_RXD0,,,,EVENTOUT,ADC123_IN14 -PortC,PC5,,,,,,,,,,,,ETH_MII_RXD1/ETH_RMII_RXD1,,,,EVENTOUT,ADC123_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,DCMI_D0,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,,,SDIO_D7,DCMI_D1,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,USART6_CK,,,,SDIO_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,,,,,SDIO_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,,,,SDIO_D2,DCMI_D8,,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,USART3_RX,UART4_RX,,,,SDIO_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDIO_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FSMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FSMC_D3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,UART5_RX,,,,SDIO_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,,,,,USART2_CTS,,,,,FSMC_CLK,,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FSMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FSMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,,,USART2_RX,,,,,FSMC_NWAIT,,,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,FSMC_NE1/FSMC_NCE2,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FSMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FSMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FSMC_D15,,,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,,,,FSMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS,,,,,FSMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,FSMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,FSMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,FSMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,,,,,FSMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,,,,,,,,,,FSMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,,,,,,,ETH_MII_TXD3,FSMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,,,,,,,FSMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,,,,,,,,FSMC_A20,DCMI_D4,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,,,,,,,,FSMC_A21,DCMI_D6,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,,,,,,,,FSMC_A22,DCMI_D7,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,,,,,FSMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,,,,,FSMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,,,FSMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,,,FSMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,,,,,,,,FSMC_D8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,,,,,,,,FSMC_D9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,,,,,,,,FSMC_D10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,,,,,,,,FSMC_D11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FSMC_D12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FSMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FSMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FSMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FSMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FSMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FSMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,,,,,,,,FSMC_NIORD,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,,,,,,,,FSMC_NREG,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,,,,,TIM13_CH1,,,FSMC_NIOWR,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,,,,,TIM14_CH1,,,FSMC_CD,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,FSMC_INTR,,,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,,,,,,,,,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FSMC_A6,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,FSMC_A7,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,FSMC_A8,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,FSMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FSMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FSMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FSMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FSMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FSMC_A14,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FSMC_A15,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,FSMC_INT2,,,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FSMC_INT3,,,EVENTOUT, -PortG,PG8,,,,,,,,,USART6_RTS,,,ETH_PPS_OUT,,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,,,,FSMC_NE2/FSMC_NCE3,,,EVENTOUT, -PortG,PG10,,,,,,,,,,,,,FSMC_NCE4_1/FSMC_NE3,,,EVENTOUT, -PortG,PG11,,,,,,,,,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,FSMC_NCE4_2,,,EVENTOUT, -PortG,PG12,,,,,,,,,USART6_RTS,,,,FSMC_NE4,,,EVENTOUT, -PortG,PG13,,,,,,,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FSMC_A24,,,EVENTOUT, -PortG,PG14,,,,,,,,,USART6_TX,,,ETH_MII_TXD1/ETH_RMII_TXD1,FSMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,,,,,,,,,ETH_MII_CRS,,,,EVENTOUT, -PortH,PH3,,,,,,,,,,,,ETH_MII_COL,,,,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,,OTG_HS_ULPI_NXT,,,,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,,,,,,,,,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,,,,,TIM12_CH1,,ETH_MII_RXD2,,,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,,,,,,,ETH_MII_RXD3,,,,EVENTOUT, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,,DCMI_HSYNC,,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,,DCMI_D0,,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,,,,,,,,,,DCMI_D1,,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,,,,,,,,,,DCMI_D2,,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,,,,,,,,,,DCMI_D3,,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,,,,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,,,,,,DCMI_D4,,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,,DCMI_D11,,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,,DCMI_D13,,EVENTOUT, -PortI,PI1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,,DCMI_D8,,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,I2S2ext_SD,,,,,,,DCMI_D9,,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,,,,DCMI_D5,,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,,,,DCMI_VSYNC,,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,,,,DCMI_D6,,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,,,,DCMI_D7,,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,,CAN1_RX,,,,,,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,,,,EVENTOUT, -PortI,PI11,,,,,,,,,,,OTG_HS_ULPI_DIR,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11,I2C1/2/3 ,SPI1/SPI2/I2S2/I2S2ext,SPI3/I2Sext/I2S3 ,USART1/2/3/I2S3ext,UART4/5/USART6,CAN1/CAN2/TIM12/13/14,OTG_FS/OTG_HS ,ETH ,FSMC/SDIO/OTG_FS ,DCMI , , ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , ,ETH_MII_CRS , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX , , ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , , ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX , , , ,ETH_MDIO , , , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , , ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , , ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC, ,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK , , , , ,OTG_HS_ULPI_CK , , , , ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , ,DCMI_PIXCK, ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI , , , ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV , , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA, , ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS , ,CAN1_TX ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , , , ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , , ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA,SPI1_MOSI ,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT , ,DCMI_D10 , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1, ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX , , , ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FSMC_NL ,DCMI_VSYNC, ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , ,ETH_MII_TXD3 ,SDIO_D4 ,DCMI_D6 , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX , , ,SDIO_D5 ,DCMI_D7 , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , , ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA,SPI2_NSS/I2S2_WS , ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO ,I2S2ext_SD ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD , , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , ,OTG_HS_ULPI_STP, , , , ,EVENTOUT,ADC123_IN10 +PortC,PC1 , , , , , , , , , , , ,ETH_MDC , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD , , , ,OTG_HS_ULPI_DIR,ETH_MII_TXD2 , , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD , , , , ,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK , , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , , , , , , , ,ETH_MII_RXD0/ETH_RMII_RXD0 , , , ,EVENTOUT,ADC123_IN14 +PortC,PC5 , , , , , , , , , , , ,ETH_MII_RXD1/ETH_RMII_RXD1 , , , ,EVENTOUT,ADC123_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , , , ,SDIO_D6 ,DCMI_D0 , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , , , ,SDIO_D7 ,DCMI_D1 , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3,TIM8_CH3 , , , , ,USART6_CK , , , ,SDIO_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , , , , , ,SDIO_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX , , , ,SDIO_D2 ,DCMI_D8 , ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO ,USART3_RX ,UART4_RX , , , ,SDIO_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDIO_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FSMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FSMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDIO_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , , , , , ,USART2_CTS , , , , ,FSMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FSMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FSMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , , , ,USART2_RX , , , , ,FSMC_NWAIT , , ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , ,FSMC_NE1/FSMC_NCE2 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FSMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FSMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FSMC_D15 , , ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , , , , ,FSMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1, , , , ,USART3_RTS , , , , ,FSMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2, , , , , , , , , ,FSMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , , , , , ,FSMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , , , , , ,FSMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR, , , , , , , , , ,FSMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , , ,FSMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , , , , , , , ,ETH_MII_TXD3 ,FSMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , , , , , , , ,FSMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , , , , , , , , ,FSMC_A20 ,DCMI_D4 , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , , , , , , , , ,FSMC_A21 ,DCMI_D6 , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , , , , , , , , ,FSMC_A22 ,DCMI_D7 , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , , , , , ,FSMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , , , , , ,FSMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , , , ,FSMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , , , ,FSMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , , , , , , , , ,FSMC_D8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , , , , , , , , ,FSMC_D9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , , , , , , , , ,FSMC_D10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , , , , , , , , ,FSMC_D11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FSMC_D12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FSMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FSMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA, , , , , , , ,FSMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FSMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FSMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FSMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , , , , , , , , ,FSMC_NIORD , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , , , , , , , , ,FSMC_NREG , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , , , , , ,TIM13_CH1 , , ,FSMC_NIOWR , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , , , , , ,TIM14_CH1 , , ,FSMC_CD , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , ,FSMC_INTR , , ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , , , , , , , , , ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FSMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , ,FSMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , ,FSMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , ,FSMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FSMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FSMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FSMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FSMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FSMC_A14 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FSMC_A15 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , ,FSMC_INT2 , , ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FSMC_INT3 , , ,EVENTOUT, +PortG,PG8 , , , , , , , , ,USART6_RTS , , ,ETH_PPS_OUT , , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX , , , ,FSMC_NE2/FSMC_NCE3 , , ,EVENTOUT, +PortG,PG10, , , , , , , , , , , , ,FSMC_NCE4_1/FSMC_NE3, , ,EVENTOUT, +PortG,PG11, , , , , , , , , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN ,FSMC_NCE4_2 , , ,EVENTOUT, +PortG,PG12, , , , , , , , ,USART6_RTS , , , ,FSMC_NE4 , , ,EVENTOUT, +PortG,PG13, , , , , , , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FSMC_A24 , , ,EVENTOUT, +PortG,PG14, , , , , , , , ,USART6_TX , , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FSMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , , ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , , , , , , , , , ,ETH_MII_CRS , , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , ,ETH_MII_COL , , , ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , ,OTG_HS_ULPI_NXT, , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA , , , , , , , , , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA, , , , ,TIM12_CH1 , ,ETH_MII_RXD2 , , , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL , , , , , , ,ETH_MII_RXD3 , , , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , , ,DCMI_HSYNC, ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA, , , , ,TIM12_CH2 , , , ,DCMI_D0 , ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, , , , , , , , , , ,DCMI_D1 , ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, , , , , , , , , , ,DCMI_D2 , ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, , , , , , , , , , ,DCMI_D3 , ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , , , , ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , , , , ,DCMI_D4 , ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , , ,DCMI_D11 , ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , , ,DCMI_D13 , ,EVENTOUT, +PortI,PI1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , , ,DCMI_D8 , ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO ,I2S2ext_SD , , , , , , ,DCMI_D9 , ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD , , , , , , , ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , , , , ,DCMI_D5 , ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , , , , ,DCMI_VSYNC, ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , , , , ,DCMI_D6 , ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , , , , ,DCMI_D7 , ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , , , , ,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER , , , ,EVENTOUT, +PortI,PI11, , , , , , , , , , ,OTG_HS_ULPI_DIR, , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f411_af.csv b/ports/stm32/boards/stm32f411_af.csv index d5b7a61deb53e..752048a40501f 100644 --- a/ports/stm32/boards/stm32f411_af.csv +++ b/ports/stm32/boards/stm32f411_af.csv @@ -1,84 +1,84 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2/I2C3,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3,SPI2/I2S2/SPI3/I2S3/SPI4/I2S4/SPI5/I2S5,SPI3/I2S3/USART1/USART2,USART6,I2C2/I2C3,,,SDIO,,,,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,,,,,USART2_CTS,,,,,,,,EVENTOUT,ADC1_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,SPI4_MOSI/I2S4_SD,,USART2_RTS,,,,,,,,EVENTOUT,ADC1_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,I2S2_CKIN,,USART2_TX,,,,,,,,EVENTOUT,ADC1_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,I2S2_MCK,,USART2_RX,,,,,,,,EVENTOUT,ADC1_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,,,,EVENTOUT,ADC1_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,,,SPI1_SCK/I2S1_CK,,,,,,,,,,EVENTOUT,ADC1_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,,,SPI1_MISO,I2S2_MCK,,,,,,SDIO_CMD,,,EVENTOUT,ADC1_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,,,SPI1_MOSI/I2S1_SD,,,,,,,,,,EVENTOUT,ADC1_IN7 -PortA,PA8,MCO_1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,USB_FS_SOF,,SDIO_D1,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,,,USART1_TX,,,USB_FS_VBUS,,SDIO_D2,,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,SPI5_MOSI/I2S5_SD,USART1_RX,,,USB_FS_ID,,,,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,SPI4_MISO,USART1_CTS,USART6_TX,,USB_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,SPI5_MISO,USART1_RTS,USART6_RX,,USB_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART1_TX,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,,,,SPI5_SCK/I2S5_CK,,,,,,,,,EVENTOUT,ADC1_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,,,,SPI5_NSS/I2S5_WS,,,,,,,,,EVENTOUT,ADC1_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,USART1_RX,,I2C2_SDA,,,,,,EVENTOUT, -PortB,PB4,JTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,,I2C3_SDA,,,SDIO_D0,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,,,,SDIO_D3,,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,,,,,,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,SDIO_D0,,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,SPI5_MOSI/I2S5_SD,,,I2C3_SDA,,,SDIO_D4,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,I2C2_SDA,,,SDIO_D5,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,I2S3_MCK,,,,,,SDIO_D7,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,I2S2_CKIN,,,,,,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,SPI4_NSS/I2S4_WS,SPI3_SCK/I2S3_CK,,,,,,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,SPI4_SCK/I2S4_CK,,,,,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,,,SPI2_MISO,I2S2ext_SD,,,,,,SDIO_D6,,,EVENTOUT, -PortB,PB15,RTC_50Hz,TIM1_CH3N,,,,SPI2_MOSI/I2S2_SD,,,,,,,SDIO_CK,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN10 -PortC,PC1,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,,,,,,,,,EVENTOUT,ADC1_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,,,,,,EVENTOUT,ADC1_IN13 -PortC,PC4,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN14 -PortC,PC5,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN15 -PortC,PC6,,,TIM3_CH1,,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,,,SPI2_SCK/I2S2_CK,I2S3_MCK,,USART6_RX,,,,SDIO_D7,,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,,,,,,USART6_CK,,,,SDIO_D0,,,EVENTOUT, -PortC,PC9,MCO_2,,TIM3_CH4,,I2C3_SDA,I2S2_CKIN,,,,,,,SDIO_D1,,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,,,,,,SDIO_D2,,,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,,,,,,SDIO_D3,,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,,,,,,SDIO_CK,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD1,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,,,,,SDIO_CMD,,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,,,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,,USART2_RX,,,,,,,,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,,,,EVENTOUT, -PortD,PD8,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD9,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD10,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD11,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,,,,,,,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,,,,,,,,EVENTOUT, -PortE,PE1,,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,,,,,,,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,,,,,,,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SPI5_MISO,,,,,,,,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,,,,,,,,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,,,,,,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,,,,,,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,,,,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,,,,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,,,,,,,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,,,,,,,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,SPI5_MISO,,,,,,,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,,,,,,,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12 ,AF13,AF14,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2 ,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2/I2C3,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3,SPI2/I2S2/SPI3/I2S3/SPI4/I2S4/SPI5/I2S5,SPI3/I2S3/USART1/USART2,USART6 ,I2C2/I2C3, , ,SDIO , , , ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1 , , , , ,USART2_CTS , , , , , , , ,EVENTOUT,ADC1_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , ,SPI4_MOSI/I2S4_SD , ,USART2_RTS , , , , , , , ,EVENTOUT,ADC1_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,TIM9_CH1 , ,I2S2_CKIN , ,USART2_TX , , , , , , , ,EVENTOUT,ADC1_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,TIM9_CH2 , ,I2S2_MCK , ,USART2_RX , , , , , , , ,EVENTOUT,ADC1_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , , , , ,EVENTOUT,ADC1_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, , , ,SPI1_SCK/I2S1_CK , , , , , , , , , ,EVENTOUT,ADC1_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 , , ,SPI1_MISO ,I2S2_MCK , , , , , ,SDIO_CMD, , ,EVENTOUT,ADC1_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 , , ,SPI1_MOSI/I2S1_SD , , , , , , , , , ,EVENTOUT,ADC1_IN7 +PortA,PA8 ,MCO_1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,USB_FS_SOF , ,SDIO_D1 , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA , , ,USART1_TX , , ,USB_FS_VBUS, ,SDIO_D2 , , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , ,SPI5_MOSI/I2S5_SD ,USART1_RX , , ,USB_FS_ID , , , , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , ,SPI4_MISO ,USART1_CTS ,USART6_TX, ,USB_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , ,SPI5_MISO ,USART1_RTS ,USART6_RX, ,USB_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART1_TX , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 , , , ,SPI5_SCK/I2S5_CK , , , , , , , , ,EVENTOUT,ADC1_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 , , , ,SPI5_NSS/I2S5_WS , , , , , , , , ,EVENTOUT,ADC1_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK ,USART1_RX , ,I2C2_SDA , , , , , ,EVENTOUT, +PortB,PB4 ,JTRST , ,TIM3_CH1 , , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD , ,I2C3_SDA , , ,SDIO_D0 , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2 , ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD ,SPI3_MOSI/I2S3_SD , , , , , ,SDIO_D3 , , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1 , ,I2C1_SCL , , ,USART1_TX , , , , , , , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2 , ,I2C1_SDA , , ,USART1_RX , , , , ,SDIO_D0 , , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 ,TIM10_CH1 ,I2C1_SCL , ,SPI5_MOSI/I2S5_SD , , ,I2C3_SDA , , ,SDIO_D4 , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4 ,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,I2C2_SDA , , ,SDIO_D5 , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,I2S3_MCK , , , , , ,SDIO_D7 , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA ,I2S2_CKIN , , , , , , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,SPI4_NSS/I2S4_WS ,SPI3_SCK/I2S3_CK , , , , , , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK ,SPI4_SCK/I2S4_CK , , , , , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , , , ,SPI2_MISO ,I2S2ext_SD , , , , , ,SDIO_D6 , , ,EVENTOUT, +PortB,PB15,RTC_50Hz ,TIM1_CH3N , , , ,SPI2_MOSI/I2S2_SD , , , , , , ,SDIO_CK , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN10 +PortC,PC1 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD , , , , , , , , ,EVENTOUT,ADC1_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD , , , , , , , , , ,EVENTOUT,ADC1_IN13 +PortC,PC4 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN14 +PortC,PC5 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN15 +PortC,PC6 , , ,TIM3_CH1 , , ,I2S2_MCK , , ,USART6_TX, , , ,SDIO_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 , , ,SPI2_SCK/I2S2_CK ,I2S3_MCK , ,USART6_RX, , , ,SDIO_D7 , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 , , , , , ,USART6_CK, , , ,SDIO_D0 , , ,EVENTOUT, +PortC,PC9 ,MCO_2 , ,TIM3_CH4 , ,I2C3_SDA ,I2S2_CKIN , , , , , , ,SDIO_D1 , , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK , , , , , ,SDIO_D2 , , ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO , , , , , ,SDIO_D3 , , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD , , , , , ,SDIO_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , , , , , , , , , ,SDIO_CMD, , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , , , , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , , , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , , , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD , ,USART2_RX , , , , , , , ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , , , , ,EVENTOUT, +PortD,PD8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD9 , , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD10, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD11, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR , , , , , , , , , , , , ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK , , , , , , , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS , , , , , , , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SPI5_MISO , , , , , , , , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD , , , , , , , , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS , , , , , , , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK , , , , , , , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO ,SPI5_MISO , , , , , , , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD , , , , , , , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f412_af.csv b/ports/stm32/boards/stm32f412_af.csv index 90eb3d1df6503..b6281c1e420bc 100644 --- a/ports/stm32/boards/stm32f412_af.csv +++ b/ports/stm32/boards/stm32f412_af.csv @@ -1,116 +1,116 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2,TIM3/TIM4/TIM5,TIM8/9/10/11,I2C1/2/3/I2CFMP1,SPI1/2/3/4/I2S1/2/3/4,SPI2/3/4/5/I2S2/3/4/5/DFSDM1/2,SPI3/I2S3/USART1/2/3,USART3/6/CAN1/DFSDM1,I2C2/I2C3/I2CFMP1/CAN1/2/TIM12/13/14/QUADSPI,DFSDM1/QUADSPI/FSMC/OTG1_FS,,FSMC /SDIO,,,SYS_AF,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,,,,,,,,EVENTOUT,ADC1_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,SPI4_MOSI/I2S4_SD,,USART2_RTS,,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC1_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,I2S2_CKIN,,USART2_TX,,,,,FSMC_D4,,,EVENTOUT,ADC1_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,I2S2_MCK,,USART2_RX,,,,,FSMC_D5,,,EVENTOUT,ADC1_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,DFSDM1_DATIN1,,,,FSMC_D6,,,EVENTOUT,ADC1_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,DFSDM1_CKIN1,,,,FSMC_D7,,,EVENTOUT,ADC1_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,I2S2_MCK,,,TIM13_CH1,QUADSPI_BK2_IO0,,SDIO_CMD,,,EVENTOUT,ADC1_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,,,TIM14_CH1,QUADSPI_BK2_IO1,,,,,EVENTOUT,ADC1_IN7 -PortA,PA8,MCO_1,TIM1_CH1,,,I2C3_SCL,,DFSDM1_CKOUT,USART1_CK,,,USB_FS_SOF,,SDIO_D1,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,USB_FS_VBUS,,SDIO_D2,,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,SPI2_MOSI/I2S2_SD,SPI5_MOSI/I2S5_SD,USART1_RX,,,USB_FS_ID,,,,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,SPI2_NSS/I2S2_WS,SPI4_MISO,USART1_CTS,USART6_TX,CAN1_RX,USB_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,SPI2_MISO,SPI5_MISO,USART1_RTS,USART6_RX,CAN1_TX,USB_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART1_TX,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,SPI5_SCK/I2S5_CK,,,,,,,,,EVENTOUT,ADC1_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,SPI5_NSS/I2S5_WS,,DFSDM1_DATIN0,QUADSPI_CLK,,,,,,EVENTOUT,ADC1_IN9 -PortB,PB2,,,,,,,DFSDM1_CKIN0,,,QUADSPI_CLK,,,,,,EVENTOUT, -PortB,PB3,JTDO,TIM2_CH2,,,I2CFMP1_SDA,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,USART1_RX,UART7_RX,I2C2_SDA,,,,,,EVENTOUT, -PortB,PB4,JTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,UART7_TX,I2C3_SDA,,,SDIO_D0,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,CAN2_RX,,,SDIO_D3,,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,DFSDM2_CKIN7,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,,SDIO_D0,,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,DFSDM2_DATIN7,USART1_RX,,,,,FSMC_NL,,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,SPI5_MOSI/I2S5_SD,,CAN1_RX,I2C3_SDA,,,SDIO_D4,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,DFSDM2_DATIN1,,CAN1_TX,I2C2_SDA,,,SDIO_D5,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,I2S3_MCK,USART3_TX,,I2CFMP4_SCL,,,SDIO_D7,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,I2S2_CKIN,,USART3_RX,,,,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,SPI4_NSS/I2S4_WS,SPI3_SCK/I2S3_CK,USART3__CK,CAN2_RX,DFSDM1_DATIN1,,FSMC_D13/FSMC_DA13,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,I2CFMP1_SMBA,SPI2_SCK/I2S2_CK,SPI4_SCK/I2S4_CK,,USART3_CTS,CAN2_TX,DFSDM1_CKIN1,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,I2CFMP1_SDA,SPI2_MISO,I2S2ext_SD,USART3_RTS,DFSDM1_DATIN2,TIM12_CH1,FSMC_D0,,SDIO_D6,,,EVENTOUT, -PortB,PB15,RTC_50HZ,TIM1_CH3N,,TIM8_CH3N,I2CFMP1_SCL,SPI2_MOSI/I2S2_SD,,,DFSDM1_CKIN2,TIM12_CH2,,,SDIO_CK,,,EVENTOUT, -PortC,PC0,,,,,,,,SAI1_MCLK_B,,,,,,,,EVENTOUT,ADC1_IN10 -PortC,PC1,,,,,,,,SAI1_SD_B,,,,,,,,EVENTOUT,ADC1_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,SAI1_SCK_B,DFSDM1_CKOUT,,,,FSMC_NWE,,,EVENTOUT,ADC1_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,SAI1_FS_B,,,,,FSMC_A0,,,EVENTOUT,ADC1_IN13 -PortC,PC4,,,,,,I2S1_MCK,,,,,QUADSPI_BK2_IO2,,FSMC_NE4,,,EVENTOUT,ADC1_IN14 -PortC,PC5,,,,,I2CFMP1_SMBA,,,USART3_RX,,,QUADSPI_BK2_IO3,,FSMC_NOE,,,EVENTOUT,ADC1_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,2CFMP1_SCL,I2S2_MCK,DFSDM1_CKIN3,,USART6_TX,,FSMC_D1,,SDIO_D6,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,I2CFMP1_SDA,SPI2_SCK/I2S2_CK,I2S3_MCK,,USART6_RX,,DFSDM1_DATIN3,,SDIO_D7,,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,USART6_CK,QUADSPI_BK1_IO2,,,SDIO_D0,,,EVENTOUT, -PortC,PC9,MCO_2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S2_CKIN,,,,QUADSPI_BK1_IO0,,,SDIO_D1,,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,,QUADSPI_BK1_IO1,,,SDIO_D2,,,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,USART3_RX,,QUADSPI_BK2_NCS,FSMC_D2,,SDIO_D3,,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,,,FSMC_D3,,SDIO_CK,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FSMC_D2/FSMC_DA2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FSMC_D3/FSMC_DA3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,,,FSMC_NWE,,SDIO_CMD,,,EVENTOUT, -PortD,PD3,TRACED1,,,,,SPI2_SCK/I2S2_CK,DFSDM1_DATIN0,USART2_CTS,,QUADSPI_CLK,,,FSMC_CLK,,,EVENTOUT, -PortD,PD4,,,,,,,DFSDM1_CKIN0,USART2_RTS,,,,,FSMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FSMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,DFSDM1_DATIN1,USART2_RX,,,,,FSMC_NWAIT,,,EVENTOUT, -PortD,PD7,,,,,,,DFSDM1_CKIN1,USART2_CK,,,,,FSMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FSMC_D13/FSMC_DA13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FSMC_D14/FSMC_DA14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FSMC_D15/FSMC_DA15,,,EVENTOUT, -PortD,PD11,,,,,I2CFMP1_SMBA,,,USART3_CTS,,QUADSPI_BK1_IO0,,,FSMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,I2CFMP1_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,,,FSMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,I2CFMP1_SDA,,,,,QUADSPI_BK1_IO3,,,FSMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,I2CFMP1_SCL,,,,,,,,FSMC_D0/FSMC_DA0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,I2CFMP1_SDA,,,,,,,,FSMC_D1/FSMC_DA1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,,,,,FSMC_NBL0,,,EVENTOUT, -PortE,PE1,,,,,,,,,,,,,FSMC_NBL1,,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,SAI1_MCLK_A,,QUADSPI_BK1_IO2,,,FSMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,,SAI1_SD_B,,,,,FSMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,SAI1_SD_A,DFSDM1_DATIN3,,,,FSMC_A20,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SPI5_MISO,SAI1_SCK_A,DFSDM1_CKIN3,,,,FSMC_A21,,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,SAI1_FS_A,,,,,FSMC_A22,,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,DFSDM1_DATIN2,,,,QUADSPI_BK2_IO0,,FSMC_D4/FSMC_DA4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM1_CKIN2,,,,QUADSPI_BK2_IO1,,FSMC_D5/FSMC_DA5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,DFSDM1_CKOUT,,,,QUADSPI_BK2_IO2,,FSMC_D6/FSMC_DA6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,QUADSPI_BK2_IO3,,FSMC_D7/FSMC_DA7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,,,,,,FSMC_D8/FSMC_DA8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,,,,,,FSMC_D9/FSMC_DA9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,SPI5_MISO,,,,,,FSMC_D10/FSMC_DA10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,,,,,,FSMC_D11/FSMC_DA11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FSMC_D12/FSMC_DA12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FSMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FSMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FSMC_A2,,,EVENTOUT, -PortF,PF3,,,TIM5_CH1,,,,,,,,,,FSMC_A3,,,EVENTOUT, -PortF,PF4,,,TIM5_CH2,,,,,,,,,,FSMC_A4,,,EVENTOUT, -PortF,PF5,,,TIM5_CH3,,,,,,,,,,FSMC_A5,,,EVENTOUT, -PortF,PF6,TRACED0,,,TIM10_CH1,,,,SAI1_SD_B,,QUADSPI_BK1_IO3,,,,,,EVENTOUT, -PortF,PF7,TRACED1,,,TIM11_CH1,,,,SAI1_MCLK_B,,QUADSPI_BK1_IO2,,,,,,EVENTOUT, -PortF,PF8,,,,,,,,SAI1_SCK_B,,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT, -PortF,PF9,,,,,,,,SAI1_FS_B,,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT, -PortF,PF10,,TIM1_ETR,TIM5_CH4,,,,,,,,,,,,,EVENTOUT, -PortF,PF11,,,,TIM8_ETR,,,,,,,,,,,,EVENTOUT, -PortF,PF12,,,,TIM8_BKIN,,,,,,,,,FSMC_A6,,,EVENTOUT, -PortF,PF13,,,,,I2CFMP1_SMBA,,,,,,,,FSMC_A7,,,EVENTOUT, -PortF,PF14,,,,,I2CFMP1_SCL,,,,,,,,FSMC_A8,,,EVENTOUT, -PortF,PF15,,,,,I2CFMP1_SDA,,,,,,,,FSMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,CAN1_RX,,,FSMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,CAN1_TX,,,FSMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FSMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FSMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FSMC_A14,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FSMC_A15,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,QUADSPI_BK1_NCS,,,,,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,,,,EVENTOUT, -PortG,PG8,,,,,,,,,USART6_RTS,,,,,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,QUADSPI_BK2_IO2,,,FSMC_NE2,,,EVENTOUT, -PortG,PG10,,,,,,,,,,,,,FSMC_NE3,,,EVENTOUT, -PortG,PG11,,,,,,,,,,CAN2_RX,,,,,,EVENTOUT, -PortG,PG12,,,,,,,,,USART6_RTS,CAN2_TX,,,FSMC_NE4,,,EVENTOUT, -PortG,PG13,TRACED2,,,,,,,,USART6_CTS,,,,FSMC_A24,,,EVENTOUT, -PortG,PG14,TRACED3,,,,,,,,USART6_TX,QUADSPI_BK2_IO3,,,FSMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12 ,AF13,AF14,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2 ,TIM3/TIM4/TIM5,TIM8/9/10/11,I2C1/2/3/I2CFMP1,SPI1/2/3/4/I2S1/2/3/4,SPI2/3/4/5/I2S2/3/4/5/DFSDM1/2,SPI3/I2S3/USART1/2/3,USART3/6/CAN1/DFSDM1,I2C2/I2C3/I2CFMP1/CAN1/2/TIM12/13/14/QUADSPI,DFSDM1/QUADSPI/FSMC/OTG1_FS, ,FSMC /SDIO , , ,SYS_AF ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1 ,TIM8_ETR , , , ,USART2_CTS , , , , , , , ,EVENTOUT,ADC1_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , ,SPI4_MOSI/I2S4_SD , ,USART2_RTS , ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC1_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,TIM9_CH1 , ,I2S2_CKIN , ,USART2_TX , , , , ,FSMC_D4 , , ,EVENTOUT,ADC1_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,TIM9_CH2 , ,I2S2_MCK , ,USART2_RX , , , , ,FSMC_D5 , , ,EVENTOUT,ADC1_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,DFSDM1_DATIN1 , , , ,FSMC_D6 , , ,EVENTOUT,ADC1_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,DFSDM1_CKIN1 , , , ,FSMC_D7 , , ,EVENTOUT,ADC1_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO ,I2S2_MCK , , ,TIM13_CH1 ,QUADSPI_BK2_IO0 , ,SDIO_CMD , , ,EVENTOUT,ADC1_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD , , , ,TIM14_CH1 ,QUADSPI_BK2_IO1 , , , , ,EVENTOUT,ADC1_IN7 +PortA,PA8 ,MCO_1 ,TIM1_CH1 , , ,I2C3_SCL , ,DFSDM1_CKOUT ,USART1_CK , , ,USB_FS_SOF , ,SDIO_D1 , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , ,USB_FS_VBUS , ,SDIO_D2 , , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , ,SPI2_MOSI/I2S2_SD ,SPI5_MOSI/I2S5_SD ,USART1_RX , , ,USB_FS_ID , , , , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , ,SPI2_NSS/I2S2_WS ,SPI4_MISO ,USART1_CTS ,USART6_TX ,CAN1_RX ,USB_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI2_MISO ,SPI5_MISO ,USART1_RTS ,USART6_RX ,CAN1_TX ,USB_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART1_TX , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , , ,SPI5_SCK/I2S5_CK , , , , , , , , ,EVENTOUT,ADC1_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,SPI5_NSS/I2S5_WS , ,DFSDM1_DATIN0 ,QUADSPI_CLK , , , , , ,EVENTOUT,ADC1_IN9 +PortB,PB2 , , , , , , ,DFSDM1_CKIN0 , , ,QUADSPI_CLK , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO ,TIM2_CH2 , , ,I2CFMP1_SDA ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK ,USART1_RX ,UART7_RX ,I2C2_SDA , , , , , ,EVENTOUT, +PortB,PB4 ,JTRST , ,TIM3_CH1 , , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD ,UART7_TX ,I2C3_SDA , , ,SDIO_D0 , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2 , ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD ,SPI3_MOSI/I2S3_SD , , ,CAN2_RX , , ,SDIO_D3 , , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1 , ,I2C1_SCL , ,DFSDM2_CKIN7 ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS , ,SDIO_D0 , , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2 , ,I2C1_SDA , ,DFSDM2_DATIN7 ,USART1_RX , , , , ,FSMC_NL , , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 ,TIM10_CH1 ,I2C1_SCL , ,SPI5_MOSI/I2S5_SD , ,CAN1_RX ,I2C3_SDA , , ,SDIO_D4 , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4 ,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,DFSDM2_DATIN1 , ,CAN1_TX ,I2C2_SDA , , ,SDIO_D5 , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,I2S3_MCK ,USART3_TX , ,I2CFMP4_SCL , , ,SDIO_D7 , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA ,I2S2_CKIN , ,USART3_RX , , , , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,SPI4_NSS/I2S4_WS ,SPI3_SCK/I2S3_CK ,USART3__CK ,CAN2_RX ,DFSDM1_DATIN1 , ,FSMC_D13/FSMC_DA13, , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2CFMP1_SMBA ,SPI2_SCK/I2S2_CK ,SPI4_SCK/I2S4_CK , ,USART3_CTS ,CAN2_TX ,DFSDM1_CKIN1 , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N ,I2CFMP1_SDA ,SPI2_MISO ,I2S2ext_SD ,USART3_RTS ,DFSDM1_DATIN2 ,TIM12_CH1 ,FSMC_D0 , ,SDIO_D6 , , ,EVENTOUT, +PortB,PB15,RTC_50HZ ,TIM1_CH3N , ,TIM8_CH3N ,I2CFMP1_SCL ,SPI2_MOSI/I2S2_SD , , ,DFSDM1_CKIN2 ,TIM12_CH2 , , ,SDIO_CK , , ,EVENTOUT, +PortC,PC0 , , , , , , , ,SAI1_MCLK_B , , , , , , , ,EVENTOUT,ADC1_IN10 +PortC,PC1 , , , , , , , ,SAI1_SD_B , , , , , , , ,EVENTOUT,ADC1_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD ,SAI1_SCK_B ,DFSDM1_CKOUT , , , ,FSMC_NWE , , ,EVENTOUT,ADC1_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD , ,SAI1_FS_B , , , , ,FSMC_A0 , , ,EVENTOUT,ADC1_IN13 +PortC,PC4 , , , , , ,I2S1_MCK , , , , ,QUADSPI_BK2_IO2 , ,FSMC_NE4 , , ,EVENTOUT,ADC1_IN14 +PortC,PC5 , , , , ,I2CFMP1_SMBA , , ,USART3_RX , , ,QUADSPI_BK2_IO3 , ,FSMC_NOE , , ,EVENTOUT,ADC1_IN15 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,2CFMP1_SCL ,I2S2_MCK ,DFSDM1_CKIN3 , ,USART6_TX , ,FSMC_D1 , ,SDIO_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 ,TIM8_CH2 ,I2CFMP1_SDA ,SPI2_SCK/I2S2_CK ,I2S3_MCK , ,USART6_RX , ,DFSDM1_DATIN3 , ,SDIO_D7 , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 ,TIM8_CH3 , , , , ,USART6_CK ,QUADSPI_BK1_IO2 , , ,SDIO_D0 , , ,EVENTOUT, +PortC,PC9 ,MCO_2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,I2S2_CKIN , , , ,QUADSPI_BK1_IO0 , , ,SDIO_D1 , , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX , ,QUADSPI_BK1_IO1 , , ,SDIO_D2 , , ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO ,USART3_RX , ,QUADSPI_BK2_NCS ,FSMC_D2 , ,SDIO_D3 , , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD ,USART3_CK , , ,FSMC_D3 , ,SDIO_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FSMC_D2/FSMC_DA2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FSMC_D3/FSMC_DA3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , , , , , , , ,FSMC_NWE , ,SDIO_CMD , , ,EVENTOUT, +PortD,PD3 ,TRACED1 , , , , ,SPI2_SCK/I2S2_CK ,DFSDM1_DATIN0 ,USART2_CTS , ,QUADSPI_CLK , , ,FSMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , , ,DFSDM1_CKIN0 ,USART2_RTS , , , , ,FSMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FSMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD ,DFSDM1_DATIN1 ,USART2_RX , , , , ,FSMC_NWAIT , , ,EVENTOUT, +PortD,PD7 , , , , , , ,DFSDM1_CKIN1 ,USART2_CK , , , , ,FSMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FSMC_D13/FSMC_DA13, , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FSMC_D14/FSMC_DA14, , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FSMC_D15/FSMC_DA15, , ,EVENTOUT, +PortD,PD11, , , , ,I2CFMP1_SMBA , , ,USART3_CTS , ,QUADSPI_BK1_IO0 , , ,FSMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , ,I2CFMP1_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 , , ,FSMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , ,I2CFMP1_SDA , , , , ,QUADSPI_BK1_IO3 , , ,FSMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , ,I2CFMP1_SCL , , , , , , , ,FSMC_D0/FSMC_DA0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , ,I2CFMP1_SDA , , , , , , , ,FSMC_D1/FSMC_DA1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR , , , , , , , , , ,FSMC_NBL0 , , ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , , ,FSMC_NBL1 , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK ,SAI1_MCLK_A , ,QUADSPI_BK1_IO2 , , ,FSMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , , ,SAI1_SD_B , , , , ,FSMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS ,SAI1_SD_A ,DFSDM1_DATIN3 , , , ,FSMC_A20 , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SPI5_MISO ,SAI1_SCK_A ,DFSDM1_CKIN3 , , , ,FSMC_A21 , , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD ,SAI1_FS_A , , , , ,FSMC_A22 , , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM1_DATIN2 , , , ,QUADSPI_BK2_IO0 , ,FSMC_D4/FSMC_DA4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM1_CKIN2 , , , ,QUADSPI_BK2_IO1 , ,FSMC_D5/FSMC_DA5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM1_CKOUT , , , ,QUADSPI_BK2_IO2 , ,FSMC_D6/FSMC_DA6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , ,QUADSPI_BK2_IO3 , ,FSMC_D7/FSMC_DA7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS , , , , , ,FSMC_D8/FSMC_DA8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK , , , , , ,FSMC_D9/FSMC_DA9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO ,SPI5_MISO , , , , , ,FSMC_D10/FSMC_DA10, , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD , , , , , ,FSMC_D11/FSMC_DA11, , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FSMC_D12/FSMC_DA12, , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FSMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FSMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FSMC_A2 , , ,EVENTOUT, +PortF,PF3 , , ,TIM5_CH1 , , , , , , , , , ,FSMC_A3 , , ,EVENTOUT, +PortF,PF4 , , ,TIM5_CH2 , , , , , , , , , ,FSMC_A4 , , ,EVENTOUT, +PortF,PF5 , , ,TIM5_CH3 , , , , , , , , , ,FSMC_A5 , , ,EVENTOUT, +PortF,PF6 ,TRACED0 , , ,TIM10_CH1 , , , ,SAI1_SD_B , ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT, +PortF,PF7 ,TRACED1 , , ,TIM11_CH1 , , , ,SAI1_MCLK_B , ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT, +PortF,PF8 , , , , , , , ,SAI1_SCK_B , ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT, +PortF,PF9 , , , , , , , ,SAI1_FS_B , ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT, +PortF,PF10, ,TIM1_ETR ,TIM5_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortF,PF11, , , ,TIM8_ETR , , , , , , , , , , , ,EVENTOUT, +PortF,PF12, , , ,TIM8_BKIN , , , , , , , , ,FSMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,I2CFMP1_SMBA , , , , , , , ,FSMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,I2CFMP1_SCL , , , , , , , ,FSMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,I2CFMP1_SDA , , , , , , , ,FSMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,CAN1_RX , , ,FSMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,CAN1_TX , , ,FSMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FSMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FSMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FSMC_A14 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FSMC_A15 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , ,QUADSPI_BK1_NCS , , , , ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , , , , ,EVENTOUT, +PortG,PG8 , , , , , , , , ,USART6_RTS , , , , , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX ,QUADSPI_BK2_IO2 , , ,FSMC_NE2 , , ,EVENTOUT, +PortG,PG10, , , , , , , , , , , , ,FSMC_NE3 , , ,EVENTOUT, +PortG,PG11, , , , , , , , , ,CAN2_RX , , , , , ,EVENTOUT, +PortG,PG12, , , , , , , , ,USART6_RTS ,CAN2_TX , , ,FSMC_NE4 , , ,EVENTOUT, +PortG,PG13,TRACED2 , , , , , , , ,USART6_CTS , , , ,FSMC_A24 , , ,EVENTOUT, +PortG,PG14,TRACED3 , , , , , , , ,USART6_TX ,QUADSPI_BK2_IO3 , , ,FSMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f413_af.csv b/ports/stm32/boards/stm32f413_af.csv index 428ce44cfcbbe..c564ea090b45a 100644 --- a/ports/stm32/boards/stm32f413_af.csv +++ b/ports/stm32/boards/stm32f413_af.csv @@ -1,116 +1,116 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2/LPTIM1,TIM3/TIM4/TIM5,TIM8/9/10/11/DFSDM2,I2C1/2/3/I2CFMP1,SPI1/2/3/4/I2S1/2/3/4,SPI2/3/4/5/I2S2/3/4/5/DFSDM1/2,SPI3/I2S3/USART1/2/3/DFSDM2,USART3/4/5/6/7/8/CAN1/DFSDM1,I2C2/I2C3/I2CFMP1/CAN1/2/TIM12/13/14/QUADSPI,SAI1/DFSDM1/DFSDM2/QUADSPI/FSMC/OTG1_FS,UART4/5/9/10/CAN3,FSMC /SDIO,,RNG,SYS_AF,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,,,,,EVENTOUT,ADC1_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,SPI4_MOSI/I2S4_SD,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC1_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,I2S2_CKIN,,USART2_TX,,,,,FSMC_D4,,,EVENTOUT,ADC1_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,I2S2_MCK,,USART2_RX,,,SAI1_SD_B,,FSMC_D5,,,EVENTOUT,ADC1_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,DFSDM1_DATIN1,,,,FSMC_D6,,,EVENTOUT,ADC1_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,DFSDM1_CKIN1,,,,FSMC_D7,,,EVENTOUT,ADC1_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,I2S2_MCK,DFSDM2_CKIN1,,TIM13_CH1,QUADSPI_BK2_IO0,,SDIO_CMD,,,EVENTOUT,ADC1_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,DFSDM2_DATIN1,,TIM14_CH1,QUADSPI_BK2_IO1,,,,,EVENTOUT,ADC1_IN7 -PortA,PA8,MCO_1,TIM1_CH1,,,I2C3_SCL,,DFSDM1_CKOUT,USART1_CK,UART7_RX,,USB_FS_SOF,CAN3_RX,SDIO_D1,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,DFSDM2_CKIN3,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,USB_FS_VBUS,,SDIO_D2,,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,DFSDM2_DATIN3,,SPI2_MOSI/I2S2_SD,SPI5_MOSI/I2S5_SD,USART1_RX,,,USB_FS_ID,,,,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,DFSDM2_CKIN5,,SPI2_NSS/I2S2_WS,SPI4_MISO,USART1_CTS,USART6_TX,CAN1_RX,USB_FS_DM,UART4_RX,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,DFSDM2_DATIN5,,SPI2_MISO,SPI5_MISO,USART1_RTS,USART6_RX,CAN1_TX,USB_FS_DP,UART4_TX,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART1_TX,UART7_TX,,SAI1_MCLK_A,CAN3_TX,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,SPI5_SCK/I2S5_CK,,,,,,,,,EVENTOUT,ADC1_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,SPI5_NSS/I2S5_WS,,DFSDM1_DATIN0,QUADSPI_CLK,,,,,,EVENTOUT,ADC1_IN9 -PortB,PB2,,LPTIM1_OUT,,,,,DFSDM1_CKIN0,,,QUADSPI_CLK,,,,,,EVENTOUT, -PortB,PB3,JTDO,TIM2_CH2,,,I2CFMP1_SDA,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,USART1_RX,UART7_RX,I2C2_SDA,SAI1_SD_A,CAN3_RX,,,,EVENTOUT, -PortB,PB4,JTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,UART7_TX,I2C3_SDA,SAI1_SCK_A,CAN3_TX,SDIO_D0,,,EVENTOUT, -PortB,PB5,,LPTIM1_IN1,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,CAN2_RX,SAI1_FS_A,UART5_RX,SDIO_D3,,,EVENTOUT, -PortB,PB6,,LPTIM1_ETR,TIM4_CH1,,I2C1_SCL,,DFSDM2_CKIN7,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,UART5_TX,SDIO_D0,,,EVENTOUT, -PortB,PB7,,LPTIM1_IN2,TIM4_CH2,,I2C1_SDA,,DFSDM2_DATIN7,USART1_RX,,,,,FSMC_NL,,,EVENTOUT, -PortB,PB8,,LPTIM1_OUT,TIM4_CH3,TIM10_CH1,I2C1_SCL,,SPI5_MOSI/I2S5_SD,DFSDM2_CKIN1,CAN1_RX,I2C3_SDA,,UART5_RX,SDIO_D4,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,DFSDM2_DATIN1,,CAN1_TX,I2C2_SDA,,UART5_TX,SDIO_D5,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,I2S3_MCK,USART3_TX,,I2CFMP4_SCL,DFSDM2_CKOUT,,SDIO_D7,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,I2S2_CKIN,,USART3_RX,,,,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,SPI4_NSS/I2S4_WS,SPI3_SCK/I2S3_CK,USART3__CK,CAN2_RX,DFSDM1_DATIN1,UART5_RX,FSMC_D13/FSMC_DA13,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,I2CFMP1_SMBA,SPI2_SCK/I2S2_CK,SPI4_SCK/I2S4_CK,,USART3_CTS,CAN2_TX,DFSDM1_CKIN1,UART5_TX,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,I2CFMP1_SDA,SPI2_MISO,I2S2ext_SD,USART3_RTS,DFSDM1_DATIN2,TIM12_CH1,FSMC_D0,,SDIO_D6,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,I2CFMP1_SCL,SPI2_MOSI/I2S2_SD,,,DFSDM1_CKIN2,TIM12_CH2,,,SDIO_CK,,,EVENTOUT, -PortC,PC0,,LPTIM1_IN1,,DFSDM2_CKIN4,,,,SAI1_MCLK_B,,,,,,,,EVENTOUT,ADC1_IN10 -PortC,PC1,,LPTIM1_OUT,,DFSDM2_DATIN4,,,,SAI1_SD_B,,,,,,,,EVENTOUT,ADC1_IN11 -PortC,PC2,,LPTIM1_IN2,,DFSDM2_DATIN7,,SPI2_MISO,I2S2ext_SD,SAI1_SCK_B,DFSDM1_CKOUT,,,,FSMC_NWE,,,EVENTOUT,ADC1_IN12 -PortC,PC3,,LPTIM1_ETR,,DFSDM2_CKIN7,,SPI2_MOSI/I2S2_SD,,SAI1_FS_B,,,,,FSMC_A0,,,EVENTOUT,ADC1_IN13 -PortC,PC4,,,,DFSDM2_CKIN2,,I2S1_MCK,,,,,QUADSPI_BK2_IO2,,FSMC_NE4,,,EVENTOUT,ADC1_IN14 -PortC,PC5,,,,DFSDM2_DATIN2,I2CFMP1_SMBA,,,USART3_RX,,,QUADSPI_BK2_IO3,,FSMC_NOE,,,EVENTOUT,ADC1_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,2CFMP1_SCL,I2S2_MCK,DFSDM1_CKIN3,DFSDM2_DATIN6,USART6_TX,,FSMC_D1,,SDIO_D6,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,I2CFMP1_SDA,SPI2_SCK/I2S2_CK,I2S3_MCK,DFSDM2_CKIN6,USART6_RX,,DFSDM1_DATIN3,,SDIO_D7,,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,DFSDM2_CKIN3,USART6_CK,QUADSPI_BK1_IO2,,,SDIO_D0,,,EVENTOUT, -PortC,PC9,MCO_2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S2_CKIN,,DFSDM2_DATIN3,,QUADSPI_BK1_IO0,,,SDIO_D1,,,EVENTOUT, -PortC,PC10,,,,DFSDM2_CKIN5,,,SPI3_SCK/I2S3_CK,USART3_TX,,QUADSPI_BK1_IO1,,,SDIO_D2,,,EVENTOUT, -PortC,PC11,,,,DFSDM2_DATIN5,,I2S3ext_SD,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,FSMC_D2,,SDIO_D3,,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,FSMC_D3,,SDIO_CK,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,DFSDM2_CKIN6,,,,,,CAN1_RX,,UART4_RX,FSMC_D2/FSMC_DA2,,,EVENTOUT, -PortD,PD1,,,,DFSDM2_DATIN6,,,,,,CAN1_TX,,UART4_TX,FSMC_D3/FSMC_DA3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,DFSDM2_CKOUT,,,,,UART5_RX,,FSMC_NWE,,SDIO_CMD,,,EVENTOUT, -PortD,PD3,TRACED1,,,,,SPI2_SCK/I2S2_CK,DFSDM1_DATIN0,USART2_CTS,,QUADSPI_CLK,,,FSMC_CLK,,,EVENTOUT, -PortD,PD4,,,,,,,DFSDM1_CKIN0,USART2_RTS,,,,,FSMC_NOE,,,EVENTOUT, -PortD,PD5,,,,DFSDM2_CKOUT,,,,USART2_TX,,,,,FSMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,DFSDM1_DATIN1,USART2_RX,,,,,FSMC_NWAIT,,,EVENTOUT, -PortD,PD7,,,,,,,DFSDM1_CKIN1,USART2_CK,,,,,FSMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FSMC_D13/FSMC_DA13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FSMC_D14/FSMC_DA14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,UART4_TX,,,,FSMC_D15/FSMC_DA15,,,EVENTOUT, -PortD,PD11,,,,DFSDM2_DATIN2,I2CFMP1_SMBA,,,USART3_CTS,,QUADSPI_BK1_IO0,,,FSMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,DFSDM2_CKIN2,I2CFMP1_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,,,FSMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,I2CFMP1_SDA,,,,,QUADSPI_BK1_IO3,,,FSMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,I2CFMP1_SCL,,,,,,DFSDM2_CKIN0,UART9_RX,FSMC_D0/FSMC_DA0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,I2CFMP1_SDA,,,,,,DFSDM2_DATIN0,UART9_TX,FSMC_D1/FSMC_DA1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,DFSDM2_CKIN4,,,,,UART8_RX,,,,FSMC_NBL0,,,EVENTOUT, -PortE,PE1,,,,DFSDM2_DATIN4,,,,,UART8_TX,,,,FSMC_NBL1,,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,SAI1_MCLK_A,,QUADSPI_BK1_IO2,,UART10_RX,FSMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,,SAI1_SD_B,,,,UART10_TX,FSMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,SAI1_SD_A,DFSDM1_DATIN3,,,,FSMC_A20,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SPI5_MISO,SAI1_SCK_A,DFSDM1_CKIN3,,,,FSMC_A21,,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,SAI1_FS_A,,,,,FSMC_A22,,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,DFSDM1_DATIN2,,UART7_RX,,QUADSPI_BK2_IO0,,FSMC_D4/FSMC_DA4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM1_CKIN2,,UART7_TX,,QUADSPI_BK2_IO1,,FSMC_D5/FSMC_DA5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,DFSDM1_CKOUT,,,,QUADSPI_BK2_IO2,,FSMC_D6/FSMC_DA6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,DFSDM2_DATIN0,,,,,,,QUADSPI_BK2_IO3,,FSMC_D7/FSMC_DA7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,DFSDM2_CKIN0,,SPI4_NSS/I2S4_WS,SPI5_NSS/I2S5_WS,,,,,,FSMC_D8/FSMC_DA8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,DFSDM2_DATIN7,,SPI4_SCK/I2S4_CK,SPI5_SCK/I2S5_CK,,,,,,FSMC_D9/FSMC_DA9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,DFSDM2_CKIN7,,SPI4_MISO,SPI5_MISO,,,,,,FSMC_D10/FSMC_DA10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI/I2S4_SD,SPI5_MOSI/I2S5_SD,,,,DFSDM2_DATIN1,,FSMC_D11/FSMC_DA11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,DFSDM2_CKIN1,,FSMC_D12/FSMC_DA12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FSMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FSMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FSMC_A2,,,EVENTOUT, -PortF,PF3,,,TIM5_CH1,,,,,,,,,,FSMC_A3,,,EVENTOUT, -PortF,PF4,,,TIM5_CH2,,,,,,,,,,FSMC_A4,,,EVENTOUT, -PortF,PF5,,,TIM5_CH3,,,,,,,,,,FSMC_A5,,,EVENTOUT, -PortF,PF6,TRACED0,,,TIM10_CH1,,,,SAI1_SD_B,UART7_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT, -PortF,PF7,TRACED1,,,TIM11_CH1,,,,SAI1_MCLK_B,UART7_TX,QUADSPI_BK1_IO2,,,,,,EVENTOUT, -PortF,PF8,,,,,,,,SAI1_SCK_B,UART8_RX,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT, -PortF,PF9,,,,,,,,SAI1_FS_B,UART8_TX,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT, -PortF,PF10,,TIM1_ETR,TIM5_CH4,,,,,,,,,,,,,EVENTOUT, -PortF,PF11,,,,TIM8_ETR,,,,,,,,,,,,EVENTOUT, -PortF,PF12,,,,TIM8_BKIN,,,,,,,,,FSMC_A6,,,EVENTOUT, -PortF,PF13,,,,,I2CFMP1_SMBA,,,,,,,,FSMC_A7,,,EVENTOUT, -PortF,PF14,,,,,I2CFMP1_SCL,,,,,,,,FSMC_A8,,,EVENTOUT, -PortF,PF15,,,,,I2CFMP1_SDA,,,,,,,,FSMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,CAN1_RX,,UART9_RX,FSMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,CAN1_TX,,UART9_TX,FSMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FSMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FSMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FSMC_A14,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FSMC_A15,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,QUADSPI_BK1_NCS,,,,,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,,,,EVENTOUT, -PortG,PG8,,,,,,,,,USART6_RTS,,,,,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,QUADSPI_BK2_IO2,,,FSMC_NE2,,,EVENTOUT, -PortG,PG10,,,,,,,,,,,,,FSMC_NE3,,,EVENTOUT, -PortG,PG11,,,,,,,,,,CAN2_RX,,UART10_RX,,,,EVENTOUT, -PortG,PG12,,,,,,,,,USART6_RTS,CAN2_TX,,UART10_TX,FSMC_NE4,,,EVENTOUT, -PortG,PG13,TRACED2,,,,,,,,USART6_CTS,,,,FSMC_A24,,,EVENTOUT, -PortG,PG14,TRACED3,,,,,,,,USART6_TX,QUADSPI_BK2_IO3,,,FSMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13,AF14,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/LPTIM1 ,TIM3/TIM4/TIM5,TIM8/9/10/11/DFSDM2,I2C1/2/3/I2CFMP1,SPI1/2/3/4/I2S1/2/3/4,SPI2/3/4/5/I2S2/3/4/5/DFSDM1/2,SPI3/I2S3/USART1/2/3/DFSDM2,USART3/4/5/6/7/8/CAN1/DFSDM1,I2C2/I2C3/I2CFMP1/CAN1/2/TIM12/13/14/QUADSPI,SAI1/DFSDM1/DFSDM2/QUADSPI/FSMC/OTG1_FS,UART4/5/9/10/CAN3,FSMC /SDIO , ,RNG ,SYS_AF ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1 ,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , , , , , ,EVENTOUT,ADC1_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , ,SPI4_MOSI/I2S4_SD , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC1_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,TIM9_CH1 , ,I2S2_CKIN , ,USART2_TX , , , , ,FSMC_D4 , , ,EVENTOUT,ADC1_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,TIM9_CH2 , ,I2S2_MCK , ,USART2_RX , , ,SAI1_SD_B , ,FSMC_D5 , , ,EVENTOUT,ADC1_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,DFSDM1_DATIN1 , , , ,FSMC_D6 , , ,EVENTOUT,ADC1_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,DFSDM1_CKIN1 , , , ,FSMC_D7 , , ,EVENTOUT,ADC1_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO ,I2S2_MCK ,DFSDM2_CKIN1 , ,TIM13_CH1 ,QUADSPI_BK2_IO0 , ,SDIO_CMD , , ,EVENTOUT,ADC1_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD , ,DFSDM2_DATIN1 , ,TIM14_CH1 ,QUADSPI_BK2_IO1 , , , , ,EVENTOUT,ADC1_IN7 +PortA,PA8 ,MCO_1 ,TIM1_CH1 , , ,I2C3_SCL , ,DFSDM1_CKOUT ,USART1_CK ,UART7_RX , ,USB_FS_SOF ,CAN3_RX ,SDIO_D1 , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,DFSDM2_CKIN3 ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , ,USB_FS_VBUS , ,SDIO_D2 , , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , ,DFSDM2_DATIN3 , ,SPI2_MOSI/I2S2_SD ,SPI5_MOSI/I2S5_SD ,USART1_RX , , ,USB_FS_ID , , , , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , ,DFSDM2_CKIN5 , ,SPI2_NSS/I2S2_WS ,SPI4_MISO ,USART1_CTS ,USART6_TX ,CAN1_RX ,USB_FS_DM ,UART4_RX , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , ,DFSDM2_DATIN5 , ,SPI2_MISO ,SPI5_MISO ,USART1_RTS ,USART6_RX ,CAN1_TX ,USB_FS_DP ,UART4_TX , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART1_TX ,UART7_TX , ,SAI1_MCLK_A ,CAN3_TX , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , , ,SPI5_SCK/I2S5_CK , , , , , , , , ,EVENTOUT,ADC1_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,SPI5_NSS/I2S5_WS , ,DFSDM1_DATIN0 ,QUADSPI_CLK , , , , , ,EVENTOUT,ADC1_IN9 +PortB,PB2 , ,LPTIM1_OUT , , , , ,DFSDM1_CKIN0 , , ,QUADSPI_CLK , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO ,TIM2_CH2 , , ,I2CFMP1_SDA ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK ,USART1_RX ,UART7_RX ,I2C2_SDA ,SAI1_SD_A ,CAN3_RX , , , ,EVENTOUT, +PortB,PB4 ,JTRST , ,TIM3_CH1 , , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD ,UART7_TX ,I2C3_SDA ,SAI1_SCK_A ,CAN3_TX ,SDIO_D0 , , ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 ,TIM3_CH2 , ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD ,SPI3_MOSI/I2S3_SD , , ,CAN2_RX ,SAI1_FS_A ,UART5_RX ,SDIO_D3 , , ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR ,TIM4_CH1 , ,I2C1_SCL , ,DFSDM2_CKIN7 ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS ,UART5_TX ,SDIO_D0 , , ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 ,TIM4_CH2 , ,I2C1_SDA , ,DFSDM2_DATIN7 ,USART1_RX , , , , ,FSMC_NL , , ,EVENTOUT, +PortB,PB8 , ,LPTIM1_OUT ,TIM4_CH3 ,TIM10_CH1 ,I2C1_SCL , ,SPI5_MOSI/I2S5_SD ,DFSDM2_CKIN1 ,CAN1_RX ,I2C3_SDA , ,UART5_RX ,SDIO_D4 , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4 ,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,DFSDM2_DATIN1 , ,CAN1_TX ,I2C2_SDA , ,UART5_TX ,SDIO_D5 , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,I2S3_MCK ,USART3_TX , ,I2CFMP4_SCL ,DFSDM2_CKOUT , ,SDIO_D7 , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA ,I2S2_CKIN , ,USART3_RX , , , , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,SPI4_NSS/I2S4_WS ,SPI3_SCK/I2S3_CK ,USART3__CK ,CAN2_RX ,DFSDM1_DATIN1 ,UART5_RX ,FSMC_D13/FSMC_DA13, , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2CFMP1_SMBA ,SPI2_SCK/I2S2_CK ,SPI4_SCK/I2S4_CK , ,USART3_CTS ,CAN2_TX ,DFSDM1_CKIN1 ,UART5_TX , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N ,I2CFMP1_SDA ,SPI2_MISO ,I2S2ext_SD ,USART3_RTS ,DFSDM1_DATIN2 ,TIM12_CH1 ,FSMC_D0 , ,SDIO_D6 , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N ,I2CFMP1_SCL ,SPI2_MOSI/I2S2_SD , , ,DFSDM1_CKIN2 ,TIM12_CH2 , , ,SDIO_CK , , ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 , ,DFSDM2_CKIN4 , , , ,SAI1_MCLK_B , , , , , , , ,EVENTOUT,ADC1_IN10 +PortC,PC1 , ,LPTIM1_OUT , ,DFSDM2_DATIN4 , , , ,SAI1_SD_B , , , , , , , ,EVENTOUT,ADC1_IN11 +PortC,PC2 , ,LPTIM1_IN2 , ,DFSDM2_DATIN7 , ,SPI2_MISO ,I2S2ext_SD ,SAI1_SCK_B ,DFSDM1_CKOUT , , , ,FSMC_NWE , , ,EVENTOUT,ADC1_IN12 +PortC,PC3 , ,LPTIM1_ETR , ,DFSDM2_CKIN7 , ,SPI2_MOSI/I2S2_SD , ,SAI1_FS_B , , , , ,FSMC_A0 , , ,EVENTOUT,ADC1_IN13 +PortC,PC4 , , , ,DFSDM2_CKIN2 , ,I2S1_MCK , , , , ,QUADSPI_BK2_IO2 , ,FSMC_NE4 , , ,EVENTOUT,ADC1_IN14 +PortC,PC5 , , , ,DFSDM2_DATIN2 ,I2CFMP1_SMBA , , ,USART3_RX , , ,QUADSPI_BK2_IO3 , ,FSMC_NOE , , ,EVENTOUT,ADC1_IN15 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,2CFMP1_SCL ,I2S2_MCK ,DFSDM1_CKIN3 ,DFSDM2_DATIN6 ,USART6_TX , ,FSMC_D1 , ,SDIO_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 ,TIM8_CH2 ,I2CFMP1_SDA ,SPI2_SCK/I2S2_CK ,I2S3_MCK ,DFSDM2_CKIN6 ,USART6_RX , ,DFSDM1_DATIN3 , ,SDIO_D7 , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 ,TIM8_CH3 , , , ,DFSDM2_CKIN3 ,USART6_CK ,QUADSPI_BK1_IO2 , , ,SDIO_D0 , , ,EVENTOUT, +PortC,PC9 ,MCO_2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,I2S2_CKIN , ,DFSDM2_DATIN3 , ,QUADSPI_BK1_IO0 , , ,SDIO_D1 , , ,EVENTOUT, +PortC,PC10, , , ,DFSDM2_CKIN5 , , ,SPI3_SCK/I2S3_CK ,USART3_TX , ,QUADSPI_BK1_IO1 , , ,SDIO_D2 , , ,EVENTOUT, +PortC,PC11, , , ,DFSDM2_DATIN5 , ,I2S3ext_SD ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS ,FSMC_D2 , ,SDIO_D3 , , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD ,USART3_CK ,UART5_TX , ,FSMC_D3 , ,SDIO_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,DFSDM2_CKIN6 , , , , , ,CAN1_RX , ,UART4_RX ,FSMC_D2/FSMC_DA2 , , ,EVENTOUT, +PortD,PD1 , , , ,DFSDM2_DATIN6 , , , , , ,CAN1_TX , ,UART4_TX ,FSMC_D3/FSMC_DA3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR ,DFSDM2_CKOUT , , , , ,UART5_RX , ,FSMC_NWE , ,SDIO_CMD , , ,EVENTOUT, +PortD,PD3 ,TRACED1 , , , , ,SPI2_SCK/I2S2_CK ,DFSDM1_DATIN0 ,USART2_CTS , ,QUADSPI_CLK , , ,FSMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , , ,DFSDM1_CKIN0 ,USART2_RTS , , , , ,FSMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , ,DFSDM2_CKOUT , , , ,USART2_TX , , , , ,FSMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD ,DFSDM1_DATIN1 ,USART2_RX , , , , ,FSMC_NWAIT , , ,EVENTOUT, +PortD,PD7 , , , , , , ,DFSDM1_CKIN1 ,USART2_CK , , , , ,FSMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FSMC_D13/FSMC_DA13, , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FSMC_D14/FSMC_DA14, , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK ,UART4_TX , , , ,FSMC_D15/FSMC_DA15, , ,EVENTOUT, +PortD,PD11, , , ,DFSDM2_DATIN2 ,I2CFMP1_SMBA , , ,USART3_CTS , ,QUADSPI_BK1_IO0 , , ,FSMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 ,DFSDM2_CKIN2 ,I2CFMP1_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 , , ,FSMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , ,I2CFMP1_SDA , , , , ,QUADSPI_BK1_IO3 , , ,FSMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , ,I2CFMP1_SCL , , , , , ,DFSDM2_CKIN0 ,UART9_RX ,FSMC_D0/FSMC_DA0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , ,I2CFMP1_SDA , , , , , ,DFSDM2_DATIN0 ,UART9_TX ,FSMC_D1/FSMC_DA1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR ,DFSDM2_CKIN4 , , , , ,UART8_RX , , , ,FSMC_NBL0 , , ,EVENTOUT, +PortE,PE1 , , , ,DFSDM2_DATIN4 , , , , ,UART8_TX , , , ,FSMC_NBL1 , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK ,SAI1_MCLK_A , ,QUADSPI_BK1_IO2 , ,UART10_RX ,FSMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , , ,SAI1_SD_B , , , ,UART10_TX ,FSMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS ,SAI1_SD_A ,DFSDM1_DATIN3 , , , ,FSMC_A20 , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SPI5_MISO ,SAI1_SCK_A ,DFSDM1_CKIN3 , , , ,FSMC_A21 , , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD ,SAI1_FS_A , , , , ,FSMC_A22 , , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM1_DATIN2 , ,UART7_RX , ,QUADSPI_BK2_IO0 , ,FSMC_D4/FSMC_DA4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM1_CKIN2 , ,UART7_TX , ,QUADSPI_BK2_IO1 , ,FSMC_D5/FSMC_DA5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM1_CKOUT , , , ,QUADSPI_BK2_IO2 , ,FSMC_D6/FSMC_DA6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , ,DFSDM2_DATIN0 , , , , , , ,QUADSPI_BK2_IO3 , ,FSMC_D7/FSMC_DA7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , ,DFSDM2_CKIN0 , ,SPI4_NSS/I2S4_WS ,SPI5_NSS/I2S5_WS , , , , , ,FSMC_D8/FSMC_DA8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , ,DFSDM2_DATIN7 , ,SPI4_SCK/I2S4_CK ,SPI5_SCK/I2S5_CK , , , , , ,FSMC_D9/FSMC_DA9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , ,DFSDM2_CKIN7 , ,SPI4_MISO ,SPI5_MISO , , , , , ,FSMC_D10/FSMC_DA10, , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI/I2S4_SD ,SPI5_MOSI/I2S5_SD , , , ,DFSDM2_DATIN1 , ,FSMC_D11/FSMC_DA11, , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , ,DFSDM2_CKIN1 , ,FSMC_D12/FSMC_DA12, , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FSMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FSMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FSMC_A2 , , ,EVENTOUT, +PortF,PF3 , , ,TIM5_CH1 , , , , , , , , , ,FSMC_A3 , , ,EVENTOUT, +PortF,PF4 , , ,TIM5_CH2 , , , , , , , , , ,FSMC_A4 , , ,EVENTOUT, +PortF,PF5 , , ,TIM5_CH3 , , , , , , , , , ,FSMC_A5 , , ,EVENTOUT, +PortF,PF6 ,TRACED0 , , ,TIM10_CH1 , , , ,SAI1_SD_B ,UART7_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT, +PortF,PF7 ,TRACED1 , , ,TIM11_CH1 , , , ,SAI1_MCLK_B ,UART7_TX ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT, +PortF,PF8 , , , , , , , ,SAI1_SCK_B ,UART8_RX ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT, +PortF,PF9 , , , , , , , ,SAI1_FS_B ,UART8_TX ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT, +PortF,PF10, ,TIM1_ETR ,TIM5_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortF,PF11, , , ,TIM8_ETR , , , , , , , , , , , ,EVENTOUT, +PortF,PF12, , , ,TIM8_BKIN , , , , , , , , ,FSMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,I2CFMP1_SMBA , , , , , , , ,FSMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,I2CFMP1_SCL , , , , , , , ,FSMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,I2CFMP1_SDA , , , , , , , ,FSMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,CAN1_RX , ,UART9_RX ,FSMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,CAN1_TX , ,UART9_TX ,FSMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FSMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FSMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FSMC_A14 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FSMC_A15 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , ,QUADSPI_BK1_NCS , , , , ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , , , , ,EVENTOUT, +PortG,PG8 , , , , , , , , ,USART6_RTS , , , , , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX ,QUADSPI_BK2_IO2 , , ,FSMC_NE2 , , ,EVENTOUT, +PortG,PG10, , , , , , , , , , , , ,FSMC_NE3 , , ,EVENTOUT, +PortG,PG11, , , , , , , , , ,CAN2_RX , ,UART10_RX , , , ,EVENTOUT, +PortG,PG12, , , , , , , , ,USART6_RTS ,CAN2_TX , ,UART10_TX ,FSMC_NE4 , , ,EVENTOUT, +PortG,PG13,TRACED2 , , , , , , , ,USART6_CTS , , , ,FSMC_A24 , , ,EVENTOUT, +PortG,PG14,TRACED3 , , , , , , , ,USART6_TX ,QUADSPI_BK2_IO3 , , ,FSMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f429_af.csv b/ports/stm32/boards/stm32f429_af.csv index 002d634a20eac..e9cf2880b4699 100644 --- a/ports/stm32/boards/stm32f429_af.csv +++ b/ports/stm32/boards/stm32f429_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11,I2C1/2/3,SPI1/2/3/4/5/6,SPI2/3/SAI1,SPI3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/LCD,OTG2_HS/OTG1_FS,ETH,FMC/SDIO/OTG2_FS,DCMI,LCD,SYS, -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,ETH_MII_CRS,,,,EVENTOUT, -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,,,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,ETH_MDIO,,,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK,,,,,OTG_HS_ULPI_CK,,,,,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI,,,,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,,,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,CAN2_TX,,,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,ETH_MII_TXD3,SDIO_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,,,SDIO_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,I2S2ext_SD,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,OTG_HS_ULPI_STP,,FMC_SDNWE,,,EVENTOUT,ADC123_IN10 -PortC,PC1,,,,,,,,,,,,ETH_MDC,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,,,,,,,ETH_MII_RXD0/ETH_RMII_RXD0,,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,,,,ETH_MII_RXD1/ETH_RMII_RXD1,,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,,,SDIO_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,USART6_CK,,,,SDIO_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,,,,,SDIO_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,,,,SDIO_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,USART3_RX,UART4_RX,,,,SDIO_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDIO_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,UART5_RX,,,,SDIO_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,,,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,FMC_NE1/FMC_NCE2,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,,,,FMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS,,,,,FMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,UART8_RX,,,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,,,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,,,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART7_RX,,,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART7_TX,,,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,,,FMC_D8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,,,FMC_D9,,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,,,FMC_D10,,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,,,FMC_D11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,,,,FMC_NIORD,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,,,,FMC_NREG,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,,TIM13_CH1,,,FMC_NIOWR,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,,TIM14_CH1,,,FMC_CD,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,FMC_INTR,DCMI_D11,LCD_DE,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,FMC_INT2,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FMC_INT3,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,,,SPI6_NSS,,,USART6_RTS,,,ETH_PPS_OUT,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,,,,FMC_NE2/FMC_NCE3,DCMI_VSYNC(1),,EVENTOUT, -PortG,PG10,,,,,,,,,,LCD_G3,,,FMC_NCE4_1/FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,,,,,,,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,FMC_NCE4_2,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,,,,,SPI6_MISO,,,USART6_RTS,LCD_B4,,,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,,,,,,SPI6_SCK,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,,EVENTOUT, -PortG,PG14,,,,,,SPI6_MOSI,,,USART6_TX,,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,,,,,,,,,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT, -PortH,PH3,,,,,,,,,,,,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,,OTG_HS_ULPI_NXT,,,,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,,FMC_SDNE1,DCMI_D8,,, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,,,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,I2S2ext_SD,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,,,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ6,,,,,,,,,,,,,,,LCD_R7,EVENTOUT, -PortJ,PJ7,,,,,,,,,,,,,,,LCD_G0,EVENTOUT, -PortJ,PJ8,,,,,,,,,,,,,,,LCD_G1,EVENTOUT, -PortJ,PJ9,,,,,,,,,,,,,,,LCD_G2,EVENTOUT, -PortJ,PJ10,,,,,,,,,,,,,,,LCD_G3,EVENTOUT, -PortJ,PJ11,,,,,,,,,,,,,,,LCD_G4,EVENTOUT, -PortJ,PJ12,,,,,,,,,,,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK0,,,,,,,,,,,,,,,LCD_G5,EVENTOUT, -PortK,PK1,,,,,,,,,,,,,,,LCD_G6,EVENTOUT, -PortK,PK2,,,,,,,,,,,,,,,LCD_G7,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11,I2C1/2/3 ,SPI1/2/3/4/5/6 ,SPI2/3/SAI1 ,SPI3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/LCD,OTG2_HS/OTG1_FS,ETH ,FMC/SDIO/OTG2_FS ,DCMI ,LCD ,SYS , +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , ,ETH_MII_CRS , , , ,EVENTOUT, +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX , , ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , , ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX , , , ,ETH_MDIO , , , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , , ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK , , , , ,OTG_HS_ULPI_CK , , , , ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , ,DCMI_PIXCLK ,LCD_G2 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI , , , ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV , , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA, , ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS , ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , , ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA,SPI1_MOSI ,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1, ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX , , ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , ,ETH_MII_TXD3 ,SDIO_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX , , ,SDIO_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , , ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA,SPI2_NSS/I2S2_WS , ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO ,I2S2ext_SD ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD, , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , ,OTG_HS_ULPI_STP, ,FMC_SDNWE , , ,EVENTOUT,ADC123_IN10 +PortC,PC1 , , , , , , , , , , , ,ETH_MDC , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD , , , ,OTG_HS_ULPI_DIR,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD, , , , ,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , , , , , , , ,ETH_MII_RXD0/ETH_RMII_RXD0 , , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , , , , ,ETH_MII_RXD1/ETH_RMII_RXD1 , , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , , , ,SDIO_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , , , ,SDIO_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3,TIM8_CH3 , , , , ,USART6_CK , , , ,SDIO_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , , , , , ,SDIO_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX , , , ,SDIO_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO ,USART3_RX ,UART4_RX , , , ,SDIO_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDIO_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDIO_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD,SAI1_SD_A ,USART2_RX , , , , ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , ,FMC_NE1/FMC_NCE2 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , , , , ,FMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1, , , , ,USART3_RTS , , , , ,FMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2, , , , , , , , , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , , , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , , , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR, , , , , ,UART8_RX , , , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , , , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , , , ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , , , ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART7_RX , , , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART7_TX , , , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , , , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , , , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , , , ,FMC_D8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , , , ,FMC_D9 , ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , , , ,FMC_D10 , ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , , , ,FMC_D11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA, , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX , , , ,FMC_NIORD , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX , , , ,FMC_NREG , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , , ,TIM13_CH1 , , ,FMC_NIOWR , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , , ,TIM14_CH1 , , ,FMC_CD , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , ,FMC_INTR ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , , , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , ,FMC_INT2 ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FMC_INT3 ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , , , ,SPI6_NSS , , ,USART6_RTS , , ,ETH_PPS_OUT ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX , , , ,FMC_NE2/FMC_NCE3 ,DCMI_VSYNC(1), ,EVENTOUT, +PortG,PG10, , , , , , , , , ,LCD_G3 , , ,FMC_NCE4_1/FMC_NE3,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , , , , , , , , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN ,FMC_NCE4_2 ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, , , , , ,SPI6_MISO , , ,USART6_RTS ,LCD_B4 , , ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13, , , , , ,SPI6_SCK , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , , ,EVENTOUT, +PortG,PG14, , , , , ,SPI6_MOSI , , ,USART6_TX , , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , , , , , , , , , ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , ,OTG_HS_ULPI_NXT, , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA,SPI5_SCK , , , ,TIM12_CH1 , , ,FMC_SDNE1 ,DCMI_D8 , , , +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , , , +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA, , , , ,TIM12_CH2 , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, , , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, , , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, , , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO ,I2S2ext_SD , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD, , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , , , ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , , , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , , , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , , , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , , ,OTG_HS_ULPI_DIR, , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , , , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , , , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , , ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ6 , , , , , , , , , , , , , , ,LCD_R7 ,EVENTOUT, +PortJ,PJ7 , , , , , , , , , , , , , , ,LCD_G0 ,EVENTOUT, +PortJ,PJ8 , , , , , , , , , , , , , , ,LCD_G1 ,EVENTOUT, +PortJ,PJ9 , , , , , , , , , , , , , , ,LCD_G2 ,EVENTOUT, +PortJ,PJ10, , , , , , , , , , , , , , ,LCD_G3 ,EVENTOUT, +PortJ,PJ11, , , , , , , , , , , , , , ,LCD_G4 ,EVENTOUT, +PortJ,PJ12, , , , , , , , , , , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , , , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK0 , , , , , , , , , , , , , , ,LCD_G5 ,EVENTOUT, +PortK,PK1 , , , , , , , , , , , , , , ,LCD_G6 ,EVENTOUT, +PortK,PK2 , , , , , , , , , , , , , , ,LCD_G7 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f439_af.csv b/ports/stm32/boards/stm32f439_af.csv index 4fc1f1116c633..94466c6c1a0b6 100644 --- a/ports/stm32/boards/stm32f439_af.csv +++ b/ports/stm32/boards/stm32f439_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11,I2C1/2/3,SPI1/2/3/4/5/6,SPI2/3/SAI1,SPI3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/LCD,OTG2_HS/OTG1_FS,ETH,FMC/SDIO/OTG2_FS,DCMI,LCD,SYS, -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,ETH_MII_CRS,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,,,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,ETH_MDIO,,,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK,,,,,OTG_HS_ULPI_CK,,,,,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI,,,,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,,,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3ext_SD,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,CAN2_TX,,,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,ETH_MII_TXD3,SDIO_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,,,SDIO_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,I2S2ext_SD,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,OTG_HS_ULPI_STP,,FMC_SDNWE,,,EVENTOUT,ADC123_IN10 -PortC,PC1,,,,,,,,,,,,ETH_MDC,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2ext_SD,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,,,,,,,ETH_MII_RXD0/ETH_RMII_RXD0,,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,,,,ETH_MII_RXD1/ETH_RMII_RXD1,,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,,,SDIO_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,USART6_CK,,,,SDIO_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,,,,,SDIO_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,,,,SDIO_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,,,I2S3ext_SD,SPI3_MISO,USART3_RX,UART4_RX,,,,SDIO_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDIO_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,UART5_RX,,,,SDIO_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,I2S3_SD,SAI1_SD_A,USART2_RX,,,,,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,FMC_NE1/FMC_NCE2,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,,,,FMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS,,,,,FMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,UART8_RX,,,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,,,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,,,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART7_RX,,,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART7_TX,,,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,SPI3_NSS,,,,,,FMC_D8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,SPI3_SCK,,,,,,FMC_D9,,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,SPI3_MISO,,,,,,FMC_D10,,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,SP3_MOSI,,,,,,FMC_D11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,,,,FMC_NIORD,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,,,,FMC_NREG,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,,TIM13_CH1,,,FMC_NIOWR,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,,TIM14_CH1,,,FMC_CD,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,FMC_INTR,DCMI_D11,LCD_DE,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,FMC_INT2,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FMC_INT3,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,,,SPI6_NSS,,,USART6_RTS,,,ETH_PPS_OUT,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,,,,FMC_NE2/FMC_NCE3,DCMI_VSYNC(1),,EVENTOUT, -PortG,PG10,,,,,,,,,,LCD_G3,,,FMC_NCE4_1/FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,,,,,,,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,FMC_NCE4_2,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,,,,,SPI6_MISO,,,USART6_RTS,LCD_B4,,,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,,,,,,SPI6_SCK,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,,EVENTOUT, -PortG,PG14,,,,,,SPI6_MOSI,,,USART6_TX,,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,,,,,,,,,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT, -PortH,PH3,,,,,,,,,,,,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,,OTG_HS_ULPI_NXT,,,,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,,FMC_SDNE1,DCMI_D8,,, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,,,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,I2S2ext_SD,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,,,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ6,,,,,,,,,,,,,,,LCD_R7,EVENTOUT, -PortJ,PJ7,,,,,,,,,,,,,,,LCD_G0,EVENTOUT, -PortJ,PJ8,,,,,,,,,,,,,,,LCD_G1,EVENTOUT, -PortJ,PJ9,,,,,,,,,,,,,,,LCD_G2,EVENTOUT, -PortJ,PJ10,,,,,,,,,,,,,,,LCD_G3,EVENTOUT, -PortJ,PJ11,,,,,,,,,,,,,,,LCD_G4,EVENTOUT, -PortJ,PJ12,,,,,,,,,,,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK0,,,,,,,,,,,,,,,LCD_G5,EVENTOUT, -PortK,PK1,,,,,,,,,,,,,,,LCD_G6,EVENTOUT, -PortK,PK2,,,,,,,,,,,,,,,LCD_G7,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11,I2C1/2/3 ,SPI1/2/3/4/5/6 ,SPI2/3/SAI1 ,SPI3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/LCD,OTG2_HS/OTG1_FS,ETH ,FMC/SDIO/OTG2_FS ,DCMI ,LCD ,SYS , +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , ,ETH_MII_CRS , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX , , ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , , ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX , , , ,ETH_MDIO , , , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , , ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK , , , , ,OTG_HS_ULPI_CK , , , , ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , ,DCMI_PIXCLK ,LCD_G2 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI , , , ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV , , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA, , ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS , ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , , ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,I2S3ext_SD , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA,SPI1_MOSI ,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1, ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX , , ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , ,ETH_MII_TXD3 ,SDIO_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX , , ,SDIO_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , , ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA,SPI2_NSS/I2S2_WS , ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO ,I2S2ext_SD ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD, , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , ,OTG_HS_ULPI_STP, ,FMC_SDNWE , , ,EVENTOUT,ADC123_IN10 +PortC,PC1 , , , , , , , , , , , ,ETH_MDC , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2ext_SD , , , ,OTG_HS_ULPI_DIR,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD, , , , ,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , , , , , , , ,ETH_MII_RXD0/ETH_RMII_RXD0 , , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , , , , ,ETH_MII_RXD1/ETH_RMII_RXD1 , , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , , , ,SDIO_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , , , ,SDIO_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3,TIM8_CH3 , , , , ,USART6_CK , , , ,SDIO_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , , , , , ,SDIO_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX , , , ,SDIO_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , , , ,I2S3ext_SD ,SPI3_MISO ,USART3_RX ,UART4_RX , , , ,SDIO_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDIO_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDIO_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,I2S3_SD ,SAI1_SD_A ,USART2_RX , , , , ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , ,FMC_NE1/FMC_NCE2 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , , , , ,FMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1, , , , ,USART3_RTS , , , , ,FMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2, , , , , , , , , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , , , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , , , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR, , , , , ,UART8_RX , , , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , , , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , , , ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , , , ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART7_RX , , , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART7_TX , , , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , , , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , , , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS ,SPI3_NSS , , , , , ,FMC_D8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK ,SPI3_SCK , , , , , ,FMC_D9 , ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO ,SPI3_MISO , , , , , ,FMC_D10 , ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI ,SP3_MOSI , , , , , ,FMC_D11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA, , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX , , , ,FMC_NIORD , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX , , , ,FMC_NREG , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , , ,TIM13_CH1 , , ,FMC_NIOWR , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , , ,TIM14_CH1 , , ,FMC_CD , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , ,FMC_INTR ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , , , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , ,FMC_INT2 ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FMC_INT3 ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , , , ,SPI6_NSS , , ,USART6_RTS , , ,ETH_PPS_OUT ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX , , , ,FMC_NE2/FMC_NCE3 ,DCMI_VSYNC(1), ,EVENTOUT, +PortG,PG10, , , , , , , , , ,LCD_G3 , , ,FMC_NCE4_1/FMC_NE3,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , , , , , , , , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN ,FMC_NCE4_2 ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, , , , , ,SPI6_MISO , , ,USART6_RTS ,LCD_B4 , , ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13, , , , , ,SPI6_SCK , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , , ,EVENTOUT, +PortG,PG14, , , , , ,SPI6_MOSI , , ,USART6_TX , , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , , , , , , , , , ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , ,OTG_HS_ULPI_NXT, , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA,SPI5_SCK , , , ,TIM12_CH1 , , ,FMC_SDNE1 ,DCMI_D8 , , , +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , , , +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA, , , , ,TIM12_CH2 , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, , , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, , , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, , , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO ,I2S2ext_SD , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD, , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , , , ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , , , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , , , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , , , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , , ,OTG_HS_ULPI_DIR, , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , , , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , , , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , , ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ6 , , , , , , , , , , , , , , ,LCD_R7 ,EVENTOUT, +PortJ,PJ7 , , , , , , , , , , , , , , ,LCD_G0 ,EVENTOUT, +PortJ,PJ8 , , , , , , , , , , , , , , ,LCD_G1 ,EVENTOUT, +PortJ,PJ9 , , , , , , , , , , , , , , ,LCD_G2 ,EVENTOUT, +PortJ,PJ10, , , , , , , , , , , , , , ,LCD_G3 ,EVENTOUT, +PortJ,PJ11, , , , , , , , , , , , , , ,LCD_G4 ,EVENTOUT, +PortJ,PJ12, , , , , , , , , , , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , , , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK0 , , , , , , , , , , , , , , ,LCD_G5 ,EVENTOUT, +PortK,PK1 , , , , , , , , , , , , , , ,LCD_G6 ,EVENTOUT, +PortK,PK2 , , , , , , , , , , , , , , ,LCD_G7 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f446_af.csv b/ports/stm32/boards/stm32f446_af.csv index 0838ed089d8f2..0e80bbb9b0ad2 100644 --- a/ports/stm32/boards/stm32f446_af.csv +++ b/ports/stm32/boards/stm32f446_af.csv @@ -1,116 +1,116 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11/CEC,I2C1/2/3/4/CEC,SPI1/2/3/4,SPI2/3/4/SAI1,SPI2/3/USART1/2/3/UART5/SPDIFRX,SAI/USART6/UART4/5/SPDIFRX,CAN1/2/TIM12/13/14/QUADSPI,SAI2/QUADSPI/OTG2_HS/OTG1_FS,OTG1_FS,FMC/SDIO/OTG2_FS,DCMI,,SYS, -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,SAI2_MCLK_B,,,,,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,SAI2_SCK_B,,,,,,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,SAI1_FS_A,USART2_RX,,,OTG_HS_ULPI_D0,,,,,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,,,OTG_HS_ULPI_CK,,,,,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,I2S2_MCK,,,TIM13_CH1,,,,DCMI_PIXCLK,,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,,,TIM14_CH1,,,FMC_SDNWE,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,SAI1_SD_B,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,SAI2_FS_B,CAN1_TX,OTG_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,HDMI_CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,,UART4_RTS,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,SPI3_MOSI/I2S3_SD,UART4_CTS,,OTG_HS_ULPI_D1,,SDIO_D1,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,,OTG_HS_ULPI_D2,,SDIO_D2,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,TIM2_CH4,,,,,SAI1_SD_A,SPI3_MOSI/I2S3_SD,,QUADSPI_CLK,OTG_HS_ULPI_D4,,SDIO_CK,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,I2C2_SDA,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,I2C3_SDA,SPI1_MISO,SPI3_MISO,SPI2_NSS/I2S2_WS,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,,FMC_SDCKE1,DCMI_D10,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,HDMI_CEC,I2C1_SCL,,,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,SPDIF_RX0,,,,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,TIM2_CH1/TIM2_ETR,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,,SDIO_D4,DCMI_D6,,EVENTOUT, -PortB,PB9,,TIM2_CH2,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,SAI1_FS_B,,,CAN1_TX,,,SDIO_D5,DCMI_D7,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,SAI1_SCK_A,USART3_TX,,,OTG_HS_ULPI_D3,,,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,SAI2_SD_A,,,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,SAI1_SCK_B,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,SAI1_MCLK_B,,,,OTG_HS_ULPI_STP,,FMC_SDNWE,,,EVENTOUT,ADC123_IN10 -PortC,PC1,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,SPI2_MOSI/I2S2_SD,,,,,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,,,,,OTG_HS_ULPI_DIR,,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,I2S1_MCK,,,SPDIF_RX2,,,,FMC_SDNE0,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,USART3_RX,SPDIF_RX3,,,,FMC_SDCKE0,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,FMPI2C1_SCL,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,DCMI_D0,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,FMPI2C1_SDA,SPI2_SCK/I2S2_CK,I2S3_MCK,SPDIF_RX1,USART6_RX,,,,SDIO_D7,DCMI_D1,,EVENTOUT, -PortC,PC8,TRACED0,,TIM3_CH3,TIM8_CH3,,,,UART5_RTS,USART6_CK,,,,SDIO_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,UART5_CTS,,QUADSPI_BK1_IO0,,,SDIO_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDIO_D2,DCMI_D8,,EVENTOUT, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDIO_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,,,,,I2C2_SDA,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDIO_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,SPI4_MISO,SPI3_MOSI/I2S3_SD,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,SPI2_NSS/I2S2_WS,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,UART5_RX,,,,SDIO_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,TRACED1,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,QUADSPI_CLK,,,FMC_CLK,DCMI_D5,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,,,FMC_NWAIT,DCMI_D10,,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,SPDIF_RX0,,,,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,SPDIF_RX1,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,,EVENTOUT, -PortD,PD11,,,,,FMPI2C1_SMBA,,,USART3_CTS,,QUADSPI_BK1_IO0,SAI2_SD_A,,FMC_A16,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,FMPI2C1_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,SAI2_FS_A,,FMC_A17,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,FMPI2C1_SDA,,,,,QUADSPI_BK1_IO3,SAI2_SCK_A,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,FMPI2C1_SCL,,,,SAI2_SCK_A,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,FMPI2C1_SDA,,,,,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,,,SAI2_MCLK_A,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,,,,,,,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,QUADSPI_BK1_IO2,,,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,,,FMC_A22,DCMI_D7,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART5_RX,,QUADSPI_BK2_IO0,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART5_TX,,QUADSPI_BK2_IO1,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,QUADSPI_BK2_IO2,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,QUADSPI_BK2_IO3,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,SAI2_SD_B,,FMC_D8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCLK_B,,FMC_D11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,,SAI1_SD_B,,,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,,SAI1_MCLK_B,,,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,,SAI1_SCK_B,,,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,,SAI1_FS_B,,,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,,DCMI_D11,,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,,,,,,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,FMPI2C1_SMBA,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,FMPI2C1_SCL,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,FMPI2C1_SDA,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,QUADSPI_BK1_NCS,,,DCMI_D12,,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FMC_INT,DCMI_D13,,EVENTOUT, -PortG,PG8,,,,,,,,SPDIFRX_IN2,USART6_RTS,,,,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,,,SPDIFRX_IN3,USART6_RX,QUADSPI_BK2_IO2,SAI2_FS_B,,FMC_NE2/FMC_NCE3,DCMI_VSYNC,,EVENTOUT, -PortG,PG10,,,,,,,,,,,SAI2_SD_B,,FMC_NE3,DCMI_D2,,EVENTOUT, -PortG,PG11,,,,,,,SPI4_SCK,SPDIFRX_IN0,,,,,,DCMI_D3,,EVENTOUT, -PortG,PG12,,,,,,,SPI4_MISO,SPDIFRX_IN1,USART6_RTS,,,,FMC_NE4,,,EVENTOUT, -PortG,PG13,TRACED2,,,,,,SPI4_MOSI,,USART6_CTS,,,,FMC_A24,,,EVENTOUT, -PortG,PG14,TRACED3,,,,,,SPI4_NSS,,USART6_TX,QUADSPI_BK2_IO3,,,FMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11/CEC,I2C1/2/3/4/CEC,SPI1/2/3/4 ,SPI2/3/4/SAI1 ,SPI2/3/USART1/2/3/UART5/SPDIFRX,SAI/USART6/UART4/5/SPDIFRX,CAN1/2/TIM12/13/14/QUADSPI,SAI2/QUADSPI/OTG2_HS/OTG1_FS,OTG1_FS,FMC/SDIO/OTG2_FS,DCMI , ,SYS , +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , , , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCLK_B , , , , ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX ,SAI2_SCK_B , , , , , , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , ,SAI1_FS_A ,USART2_RX , , ,OTG_HS_ULPI_D0 , , , , ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC , ,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , , , ,OTG_HS_ULPI_CK , , , , ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO ,I2S2_MCK , , ,TIM13_CH1 , , , ,DCMI_PIXCLK, ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD, , , ,TIM14_CH1 , , ,FMC_SDNWE , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA ,SPI2_SCK/I2S2_CK ,SAI1_SD_B ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS ,SAI2_FS_B ,CAN1_TX ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , ,HDMI_CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS , ,UART4_RTS , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , ,SPI3_MOSI/I2S3_SD ,UART4_CTS , ,OTG_HS_ULPI_D1 , ,SDIO_D1 , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , , ,OTG_HS_ULPI_D2 , ,SDIO_D2 , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , ,TIM2_CH4 , , , , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SD , ,QUADSPI_CLK ,OTG_HS_ULPI_D4 , ,SDIO_CK , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , ,I2C2_SDA ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, ,I2C3_SDA ,SPI1_MISO ,SPI3_MISO ,SPI2_NSS/I2S2_WS , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 , ,FMC_SDCKE1 ,DCMI_D10 , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1,HDMI_CEC ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS , ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX ,SPDIF_RX0 , , , ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , ,TIM2_CH1/TIM2_ETR,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , , ,SDIO_D4 ,DCMI_D6 , ,EVENTOUT, +PortB,PB9 , ,TIM2_CH2 ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,SAI1_FS_B , , ,CAN1_TX , , ,SDIO_D5 ,DCMI_D7 , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,SAI1_SCK_A ,USART3_TX , , ,OTG_HS_ULPI_D3 , , , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX ,SAI2_SD_A , , , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,SAI1_SCK_B ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 , ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO , ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD, , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , ,SAI1_MCLK_B , , , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , , ,EVENTOUT,ADC123_IN10 +PortC,PC1 , , , , , ,SPI3_MOSI/I2S3_SD,SAI1_SD_A ,SPI2_MOSI/I2S2_SD , , , , , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO , , , , ,OTG_HS_ULPI_DIR , ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD, , , , ,OTG_HS_ULPI_NXT , ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , ,I2S1_MCK , , ,SPDIF_RX2 , , , ,FMC_SDNE0 , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , ,USART3_RX ,SPDIF_RX3 , , , ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 ,FMPI2C1_SCL ,I2S2_MCK , , ,USART6_TX , , , ,SDIO_D6 ,DCMI_D0 , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 ,FMPI2C1_SDA ,SPI2_SCK/I2S2_CK ,I2S3_MCK ,SPDIF_RX1 ,USART6_RX , , , ,SDIO_D7 ,DCMI_D1 , ,EVENTOUT, +PortC,PC8 ,TRACED0 , ,TIM3_CH3,TIM8_CH3 , , , ,UART5_RTS ,USART6_CK , , , ,SDIO_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , ,UART5_CTS , ,QUADSPI_BK1_IO0 , , ,SDIO_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDIO_D2 ,DCMI_D8 , ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDIO_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12, , , , ,I2C2_SDA , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDIO_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , ,SPI4_MISO ,SPI3_MOSI/I2S3_SD, , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , ,SPI2_NSS/I2S2_WS , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDIO_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 ,TRACED1 , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , ,QUADSPI_CLK , , ,FMC_CLK ,DCMI_D5 , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD,SAI1_SD_A ,USART2_RX , , , , ,FMC_NWAIT ,DCMI_D10 , ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK ,SPDIF_RX0 , , , ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX ,SPDIF_RX1 , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , , ,EVENTOUT, +PortD,PD11, , , , ,FMPI2C1_SMBA , , ,USART3_CTS , ,QUADSPI_BK1_IO0 ,SAI2_SD_A , ,FMC_A16 , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1, ,FMPI2C1_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 ,SAI2_FS_A , ,FMC_A17 , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2, ,FMPI2C1_SDA , , , , ,QUADSPI_BK1_IO3 ,SAI2_SCK_A , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, ,FMPI2C1_SCL , , , ,SAI2_SCK_A , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, ,FMPI2C1_SDA , , , , , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR, , , , , , , ,SAI2_MCLK_A , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , ,QUADSPI_BK1_IO2 , , ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4 , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6 , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , , , ,FMC_A22 ,DCMI_D7 , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART5_RX , ,QUADSPI_BK2_IO0 , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART5_TX , ,QUADSPI_BK2_IO1 , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , ,QUADSPI_BK2_IO2 , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , ,QUADSPI_BK2_IO3 , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , ,SAI2_SD_B , ,FMC_D8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCLK_B , ,FMC_D11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , , ,SAI1_SD_B , , ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , , ,SAI1_MCLK_B , , ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , , ,SAI1_SCK_B , , ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , , ,SAI1_FS_B , , ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , , ,DCMI_D11 , ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , , , , , , ,SAI2_SD_B , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,FMPI2C1_SMBA , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,FMPI2C1_SCL , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,FMPI2C1_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , ,QUADSPI_BK1_NCS , , ,DCMI_D12 , ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FMC_INT ,DCMI_D13 , ,EVENTOUT, +PortG,PG8 , , , , , , , ,SPDIFRX_IN2 ,USART6_RTS , , , ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , , , ,SPDIFRX_IN3 ,USART6_RX ,QUADSPI_BK2_IO2 ,SAI2_FS_B , ,FMC_NE2/FMC_NCE3,DCMI_VSYNC , ,EVENTOUT, +PortG,PG10, , , , , , , , , , ,SAI2_SD_B , ,FMC_NE3 ,DCMI_D2 , ,EVENTOUT, +PortG,PG11, , , , , , ,SPI4_SCK ,SPDIFRX_IN0 , , , , , ,DCMI_D3 , ,EVENTOUT, +PortG,PG12, , , , , , ,SPI4_MISO ,SPDIFRX_IN1 ,USART6_RTS , , , ,FMC_NE4 , , ,EVENTOUT, +PortG,PG13,TRACED2 , , , , , ,SPI4_MOSI , ,USART6_CTS , , , ,FMC_A24 , , ,EVENTOUT, +PortG,PG14,TRACED3 , , , , , ,SPI4_NSS , ,USART6_TX ,QUADSPI_BK2_IO3 , , ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f479_af.csv b/ports/stm32/boards/stm32f479_af.csv index 7cbb242a52ef3..a86926a84c265 100644 --- a/ports/stm32/boards/stm32f479_af.csv +++ b/ports/stm32/boards/stm32f479_af.csv @@ -1,161 +1,161 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11,I2C1/2/3,SPI1/2/3/4/5/6,SPI2/3/SAI1,SPI2/3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/QUADSPI/LCD,QUADSPI/OTG2_HS/OTG1_FS,ETH,FMC/SDIO/OTG2_FS,DCMI/DSIHOST,LCD,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,ETH_MII_CRS,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,LCD_R2,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,ETH_MDIO,,,LCD_R1,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,LCD_B2,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK,,,,,OTG_HS_ULPI_CK,,,,LCD_R4,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI,,,,TIM14_CH1,QUADSPI_CLK,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,LCD_G1,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,LCD_G0,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,I2S3_EXTSD,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,LCD_G7,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,ETH_MII_TXD3,SDIO_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,,,SDIO_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,QUADSPI_BK1_NCS,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DSIHOST_TE,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,I2S2_EXTSD,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,,,OTG_HS_ULPI_STP,,FMC_SDNWE,,LCD_R5,EVENTOUT,ADC123_IN10 -PortC,PC1,TRACED0,,,,,SPI2_MOSI/I2S2_SD,SAI1_SD_A,,,,,ETH_MDC,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,I2S2_EXTSD,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,,,,,,,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,,,,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,,,SDIO_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,,,SDIO_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,,USART6_CK,,,,SDIO_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,,QUADSPI_BK1_IO0,,,SDIO_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDIO_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,,,I2S3_EXTSD,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDIO_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDIO_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,,UART5_RX,,,,SDIO_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,,,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,QUADSPI_BK1_IO0,,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS,,QUADSPI_BK1_IO1,,,FMC_A17/FMC_ALE,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,QUADSPI_BK1_IO3,,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,,,,,,UART8_RX,,,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,QUADSPI_BK1_IO2,,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,,,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART7_RX,,QUADSPI_BK2_IO0,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART7_TX,,QUADSPI_BK2_IO1,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,,,QUADSPI_BK2_IO2,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,,,QUADSPI_BK2_IO3,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,,,FMC_D8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,,,FMC_D9,,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,,,FMC_D10,,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,,,FMC_D11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,QUADSPI_CLK,,,,DCMI_D11,LCD_DE,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,SAI1_MCLK_A,,USART6_CK,,,,FMC_INT,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,,,SPI6_NSS,,,USART6_RTS,,,ETH_PPS_OUT,FMC_SDCLK,,LCD_G7,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,QUADSPI_BK2_IO2,,,FMC_NE2/FMC_NCE,DCMI_VSYNC,,EVENTOUT, -PortG,PG10,,,,,,,,,,LCD_G3,,,FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,,,,,,,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,,,,,SPI6_MISO,,,USART6_RTS,LCD_B4,,,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,TRACED0,,,,,SPI6_SCK,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,LCD_R0,EVENTOUT, -PortG,PG14,TRACED1,,,,,SPI6_MOSI,,,USART6_TX,QUADSPI_BK2_IO3,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,LCD_B0,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,,,,,,,QUADSPI_BK2_IO0,,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT, -PortH,PH3,,,,,,,,,,QUADSPI_BK2_IO1,,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,LCD_G5,OTG_HS_ULPI_NXT,,,,LCD_G4,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,ETH_MII_RXD2,FMC_SDNE1,,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,EVENTOUT, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,,,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,I2S2_EXTSD,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,,,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,LCD_G6,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,LCD_G2,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,LCD_R7,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,DSIHOST_TE,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ12,,,,,,,,,,LCD_G3,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,LCD_G4,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11,I2C1/2/3 ,SPI1/2/3/4/5/6 ,SPI2/3/SAI1 ,SPI2/3/USART1/2/3,USART6/UART4/5/7/8,CAN1/2/TIM12/13/14/QUADSPI/LCD,QUADSPI/OTG2_HS/OTG1_FS,ETH ,FMC/SDIO/OTG2_FS,DCMI/DSIHOST,LCD ,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , ,ETH_MII_CRS , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 , ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , ,LCD_R2 ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX , , , ,ETH_MDIO , , ,LCD_R1 ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , ,LCD_B2 ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK , , , , ,OTG_HS_ULPI_CK , , , ,LCD_R4 ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , ,DCMI_PIXCLK ,LCD_G2 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI , , , ,TIM14_CH1 ,QUADSPI_CLK ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , , ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA,SPI2_SCK/I2S2_CK , ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS , ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , , ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , ,LCD_G1 ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , ,LCD_G0 ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,I2S3_EXTSD , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA,SPI1_MOSI ,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 ,LCD_G7 ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1, ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS , ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , ,ETH_MII_TXD3 ,SDIO_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX , , ,SDIO_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , ,QUADSPI_BK1_NCS ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DSIHOST_TE ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA,SPI2_NSS/I2S2_WS , ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO ,I2S2_EXTSD ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD, , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , , , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_IN10 +PortC,PC1 ,TRACED0 , , , , ,SPI2_MOSI/I2S2_SD,SAI1_SD_A , , , , ,ETH_MDC , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO ,I2S2_EXTSD , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD, , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , , , , , , , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , , , , ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , , , ,SDIO_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , , , ,SDIO_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3,TIM8_CH3 , , , , ,USART6_CK , , , ,SDIO_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , , ,QUADSPI_BK1_IO0 , , ,SDIO_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDIO_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , , , ,I2S3_EXTSD ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDIO_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDIO_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDIO_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD,SAI1_SD_A ,USART2_RX , , , , ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , , ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , ,QUADSPI_BK1_IO0 , , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1, , , , ,USART3_RTS , ,QUADSPI_BK1_IO1 , , ,FMC_A17/FMC_ALE , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2, , , , , , ,QUADSPI_BK1_IO3 , , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , , , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , , , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR, , , , , ,UART8_RX , , , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , , , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , ,QUADSPI_BK1_IO2 , ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , , , ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART7_RX , ,QUADSPI_BK2_IO0 , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART7_TX , ,QUADSPI_BK2_IO1 , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , , , ,QUADSPI_BK2_IO2 , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , , ,QUADSPI_BK2_IO3 , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , , , ,FMC_D8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , , , ,FMC_D9 , ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , , , ,FMC_D10 , ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , , , ,FMC_D11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA, , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , , ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , , ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , ,QUADSPI_CLK , , , ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , , , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , , ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , ,SAI1_MCLK_A , ,USART6_CK , , , ,FMC_INT ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , , , ,SPI6_NSS , , ,USART6_RTS , , ,ETH_PPS_OUT ,FMC_SDCLK , ,LCD_G7 ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX ,QUADSPI_BK2_IO2 , , ,FMC_NE2/FMC_NCE ,DCMI_VSYNC , ,EVENTOUT, +PortG,PG10, , , , , , , , , ,LCD_G3 , , ,FMC_NE3 ,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , , , , , , , , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, , , , , ,SPI6_MISO , , ,USART6_RTS ,LCD_B4 , , ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13,TRACED0 , , , , ,SPI6_SCK , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , ,LCD_R0 ,EVENTOUT, +PortG,PG14,TRACED1 , , , , ,SPI6_MOSI , , ,USART6_TX ,QUADSPI_BK2_IO3 , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , ,LCD_B0 ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , , , , , , , ,QUADSPI_BK2_IO0 , ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,QUADSPI_BK2_IO1 , ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , ,LCD_G5 ,OTG_HS_ULPI_NXT , , , ,LCD_G4 ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA,SPI5_SCK , , , ,TIM12_CH1 , ,ETH_MII_RXD2 ,FMC_SDNE1 , , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA, , , , ,TIM12_CH2 , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, , , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, , , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, , , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO ,I2S2_EXTSD , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD, , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , , , ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , , , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , , , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , , , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , ,LCD_G6 ,OTG_HS_ULPI_DIR , , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , ,LCD_G2 , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , ,LCD_R7 , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , ,DSIHOST_TE ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ12, , , , , , , , , ,LCD_G3 , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , ,LCD_G4 , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f722_af.csv b/ports/stm32/boards/stm32f722_af.csv index 24500f50576eb..f353cde7ddbca 100644 --- a/ports/stm32/boards/stm32f722_af.csv +++ b/ports/stm32/boards/stm32f722_af.csv @@ -1,146 +1,146 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11/LPTIM1,I2C1/2/3/USART1,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5,SPI2/I2S2/SPI3/I2S3/SPI3/I2S3/SAI1/UART4,SPI2/I2S2/SPI3/I2S3/USART1/2/3/UART5,SAI2/USART6/UART4/5/7/8/OTG1_FS,CAN1/TIM12/13/14/QUADSPI/FMC/OTG2_HS,SAI2/QUADSPI/SDMMC2/OTG2_HS/OTG1_FS,SDMMC2,UART7/FMC/SDMMC1/OTG2_FS,,,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,SAI2_SD_B,,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,SAI2_MCK_B,,,,,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,SAI2_SCK_B,,,,,,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,OTG_HS_ULPI_D0,,,,,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,,,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,,,OTG_HS_ULPI_CK,,,,,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,,,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,,,TIM14_CH1,,,FMC_SDNWE,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,,,,,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,SAI2_FS_B,CAN1_TX,OTG_FS_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,,UART4_RTS,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,UART4_CTS,,OTG_HS_ULPI_D1,,,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,,OTG_HS_ULPI_D2,,,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,SAI1_SD_A,SPI3_MOSI/I2S3_SD,,QUADSPI_CLK,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,,,SDMMC2_D2,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,SPI2_NSS/I2S2_WS,,,SDMMC2_D3,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,,OTG_HS_ULPI_D7,,FMC_SDCKE1,,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,,QUADSPI_BK1_NCS,,FMC_SDNE1,,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FMC_NL,,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,SDMMC2_D4,,SDMMC1_D4,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,SDMMC2_D5,,SDMMC1_D5,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,,OTG_HS_ULPI_D3,,,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,,,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,,OTG_HS_ULPI_D5,,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,,OTG_HS_ULPI_D6,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,,USART3_RTS,,TIM12_CH1,SDMMC2_D0,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,SDMMC2_D1,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,SAI2_FS_B,,OTG_HS_ULPI_STP,,FMC_SDNWE,,,EVENTOUT,ADC123_IN10 -PortC,PC1,TRACED0,,,,,SPI2_MOSI/I2S2_SD,SAI1_SD_A,,,,,,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,,,,,OTG_HS_ULPI_DIR,,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,I2S1_MCK,,,,,,,FMC_SDNE0,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,,,,,FMC_SDCKE0,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,SDMMC2_D6,,SDMMC1_D6,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,SDMMC2_D7,,SDMMC1_D7,,,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,UART5_RTS,USART6_CK,,,,SDMMC1_D0,,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,UART5_CTS,,QUADSPI_BK1_IO0,,,SDMMC1_D1,,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDMMC1_D2,,,EVENTOUT, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDMMC1_D3,,,EVENTOUT, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDMMC1_CK,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,,UART5_RX,,,,SDMMC1_CMD,,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,FMC_CLK,,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,,SDMMC2_CK,FMC_NWAIT,,,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,,,,SDMMC2_CMD,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,QUADSPI_BK1_IO0,SAI2_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,LPTIM1_IN1,,,,USART3_RTS,,QUADSPI_BK1_IO1,SAI2_FS_A,,FMC_A17/FMC_ALE,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,LPTIM1_OUT,,,,,,QUADSPI_BK1_IO3,SAI2_SCK_A,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_RTS,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,LPTIM1_ETR,,,,,UART8_RX,,SAI2_MCK_A,,FMC_NBL0,,,EVENTOUT, -PortE,PE1,,,,LPTIM1_IN2,,,,,UART8_TX,,,,FMC_NBL1,,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,QUADSPI_BK1_IO2,,,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,,,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,SAI2_MCK_B,,FMC_A22,,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART7_RX,,QUADSPI_BK2_IO0,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART7_TX,,QUADSPI_BK2_IO1,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,UART7_RTS,,QUADSPI_BK2_IO2,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,UART7_CTS,,QUADSPI_BK2_IO3,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,SAI2_SD_B,,FMC_D8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCK_B,,FMC_D11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,UART7_RTS,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,UART7_CTS,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,,,,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,SAI2_SD_B,,FMC_SDNRAS,,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FMC_INT,,,EVENTOUT, -PortG,PG8,,,,,,,,,USART6_RTS,,,,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,,,,USART6_RX,QUADSPI_BK2_IO2,SAI2_FS_B,SDMMC2_D0,FMC_NE2/FMC_NCE,,,EVENTOUT, -PortG,PG10,,,,,,,,,,,SAI2_SD_B,SDMMC2_D1,FMC_NE3,,,EVENTOUT, -PortG,PG11,,,,,,,,,,,SDMMC2_D2,,,,,EVENTOUT, -PortG,PG12,,,,LPTIM1_IN1,,,,,USART6_RTS,,,SDMMC2_D3,FMC_NE4,,,EVENTOUT, -PortG,PG13,TRACED0,,,LPTIM1_OUT,,,,,USART6_CTS,,,,FMC_A24,,,EVENTOUT, -PortG,PG14,TRACED1,,,LPTIM1_ETR,,,,,USART6_TX,QUADSPI_BK2_IO3,,,FMC_A25,,,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,LPTIM1_IN2,,,,,,QUADSPI_BK2_IO0,SAI2_SCK_B,,FMC_SDCKE0,,,EVENTOUT, -PortH,PH3,,,,,,,,,,QUADSPI_BK2_IO1,SAI2_MCK_B,,FMC_SDNE0,,,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,,OTG_HS_ULPI_NXT,,,,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,,FMC_SDNE1,,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,,FMC_SDCKE1,,,EVENTOUT, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,,,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,,,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,,,,,,,,,FMC_D18,,,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,,,,,,,,,FMC_D19,,,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,,,,,,,,,FMC_D20,,,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,UART4_TX,CAN1_TX,,,FMC_D21,,,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,UART4_RX,CAN1_RX,,,FMC_D22,,,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,,,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,,,EVENTOUT, -PortI,PI1,,,,TIM8_BKIN2,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,,,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,,,,,,,FMC_D26,,,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,SAI2_MCK_A,,FMC_NBL2,,,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,FMC_NBL3,,,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,FMC_D28,,,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,FMC_D29,,,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,UART4_RX,CAN1_RX,,,FMC_D30,,,EVENTOUT, -PortI,PI10,,,,,,,,,,,,,FMC_D31,,,EVENTOUT, -PortI,PI11,,,,,,,,,,,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI15,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13,AF14,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11/LPTIM1,I2C1/2/3/USART1,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5,SPI2/I2S2/SPI3/I2S3/SPI3/I2S3/SAI1/UART4,SPI2/I2S2/SPI3/I2S3/USART1/2/3/UART5,SAI2/USART6/UART4/5/7/8/OTG1_FS,CAN1/TIM12/13/14/QUADSPI/FMC/OTG2_HS,SAI2/QUADSPI/SDMMC2/OTG2_HS/OTG1_FS,SDMMC2 ,UART7/FMC/SDMMC1/OTG2_FS, , ,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , ,SAI2_SD_B , , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B , , , , ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX ,SAI2_SCK_B , , , , , , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , , ,OTG_HS_ULPI_D0 , , , , ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF , , ,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , , , ,OTG_HS_ULPI_CK , , , , ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , , , ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD , , , ,TIM14_CH1 , , ,FMC_SDNWE , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , , , , , , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , , , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS ,SAI2_FS_B ,CAN1_TX ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS , ,UART4_RTS , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , ,UART4_CTS , ,OTG_HS_ULPI_D1 , , , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , , ,OTG_HS_ULPI_D2 , , , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SD , ,QUADSPI_CLK , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , , , ,SDMMC2_D2 , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,SPI2_NSS/I2S2_WS , , ,SDMMC2_D3 , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD ,SPI3_MOSI/I2S3_SD , , , ,OTG_HS_ULPI_D7 , ,FMC_SDCKE1 , , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1, ,I2C1_SCL , , ,USART1_TX , , ,QUADSPI_BK1_NCS , ,FMC_SDNE1 , , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FMC_NL , , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX ,SDMMC2_D4 , ,SDMMC1_D4 , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX ,SDMMC2_D5 , ,SDMMC1_D5 , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , , ,OTG_HS_ULPI_D3 , , , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 , , , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS , ,USART3_CK , , ,OTG_HS_ULPI_D5 , ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , , ,OTG_HS_ULPI_D6 , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO , ,USART3_RTS , ,TIM12_CH1 ,SDMMC2_D0 , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD , , , ,TIM12_CH2 ,SDMMC2_D1 , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , ,SAI2_FS_B , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , , ,EVENTOUT,ADC123_IN10 +PortC,PC1 ,TRACED0 , , , , ,SPI2_MOSI/I2S2_SD ,SAI1_SD_A , , , , , , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO , , , , ,OTG_HS_ULPI_DIR , ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD , , , , ,OTG_HS_ULPI_NXT , ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , ,I2S1_MCK , , , , , , ,FMC_SDNE0 , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , , , , , ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , ,SDMMC2_D6 , ,SDMMC1_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , ,SDMMC2_D7 , ,SDMMC1_D7 , , ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3,TIM8_CH3 , , , ,UART5_RTS ,USART6_CK , , , ,SDMMC1_D0 , , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , ,UART5_CTS , ,QUADSPI_BK1_IO0 , , ,SDMMC1_D1 , , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDMMC1_D2 , , ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDMMC1_D3 , , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI/I2S3_SD ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDMMC1_CMD , , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , ,FMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD ,SAI1_SD_A ,USART2_RX , , , ,SDMMC2_CK ,FMC_NWAIT , , ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK , , , ,SDMMC2_CMD,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , , ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , ,QUADSPI_BK1_IO0 ,SAI2_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1,LPTIM1_IN1 , , , ,USART3_RTS , ,QUADSPI_BK1_IO1 ,SAI2_FS_A , ,FMC_A17/FMC_ALE , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2,LPTIM1_OUT , , , , , ,QUADSPI_BK1_IO3 ,SAI2_SCK_A , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , ,UART8_CTS , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , ,UART8_RTS , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR,LPTIM1_ETR , , , , ,UART8_RX , ,SAI2_MCK_A , ,FMC_NBL0 , , ,EVENTOUT, +PortE,PE1 , , , ,LPTIM1_IN2 , , , , ,UART8_TX , , , ,FMC_NBL1 , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , ,QUADSPI_BK1_IO2 , , ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 , , ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , ,SAI2_MCK_B , ,FMC_A22 , , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART7_RX , ,QUADSPI_BK2_IO0 , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART7_TX , ,QUADSPI_BK2_IO1 , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , ,UART7_RTS , ,QUADSPI_BK2_IO2 , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , ,UART7_CTS , ,QUADSPI_BK2_IO3 , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , ,SAI2_SD_B , ,FMC_D8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCK_B , ,FMC_D11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , ,UART7_RTS ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , ,UART7_CTS ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , , , , ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , ,SAI2_SD_B , ,FMC_SDNRAS , , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FMC_INT , , ,EVENTOUT, +PortG,PG8 , , , , , , , , ,USART6_RTS , , , ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , , , , ,USART6_RX ,QUADSPI_BK2_IO2 ,SAI2_FS_B ,SDMMC2_D0 ,FMC_NE2/FMC_NCE , , ,EVENTOUT, +PortG,PG10, , , , , , , , , , ,SAI2_SD_B ,SDMMC2_D1 ,FMC_NE3 , , ,EVENTOUT, +PortG,PG11, , , , , , , , , , ,SDMMC2_D2 , , , , ,EVENTOUT, +PortG,PG12, , , ,LPTIM1_IN1 , , , , ,USART6_RTS , , ,SDMMC2_D3 ,FMC_NE4 , , ,EVENTOUT, +PortG,PG13,TRACED0 , , ,LPTIM1_OUT , , , , ,USART6_CTS , , , ,FMC_A24 , , ,EVENTOUT, +PortG,PG14,TRACED1 , , ,LPTIM1_ETR , , , , ,USART6_TX ,QUADSPI_BK2_IO3 , , ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , ,LPTIM1_IN2 , , , , , ,QUADSPI_BK2_IO0 ,SAI2_SCK_B , ,FMC_SDCKE0 , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,QUADSPI_BK2_IO1 ,SAI2_MCK_B , ,FMC_SDNE0 , , ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , ,OTG_HS_ULPI_NXT , , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA ,SPI5_SCK , , , ,TIM12_CH1 , , ,FMC_SDNE1 , , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , , ,FMC_SDCKE1 , , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 , , ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA , , , , ,TIM12_CH2 , , ,FMC_D17 , , ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, , , , , , , , , ,FMC_D18 , , ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, , , , , , , , , ,FMC_D19 , , ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, , , , , , , , , ,FMC_D20 , , ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , ,UART4_TX ,CAN1_TX , , ,FMC_D21 , , ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D22 , , ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 , , ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 , , ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 , , ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO , , , , , , ,FMC_D26 , , ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD , , , , , , ,FMC_D27 , , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,SAI2_MCK_A , ,FMC_NBL2 , , ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , ,FMC_NBL3 , , ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , ,FMC_D28 , , ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , ,FMC_D29 , , ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D30 , , ,EVENTOUT, +PortI,PI10, , , , , , , , , , , , ,FMC_D31 , , ,EVENTOUT, +PortI,PI11, , , , , , , , , , ,OTG_HS_ULPI_DIR , , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI15, , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f746_af.csv b/ports/stm32/boards/stm32f746_af.csv index d9e42008d616f..167feb6d62a0a 100644 --- a/ports/stm32/boards/stm32f746_af.csv +++ b/ports/stm32/boards/stm32f746_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2,TIM3/4/5,TIM8/9/10/11/LPTIM1/CEC,I2C1/2/3/4/CEC,SPI1/2/3/4/5/6,SPI3/SAI1,SPI2/3/USART1/2/3/UART5/SPDIFRX,SAI2/USART6/UART4/5/7/8/SPDIFRX,CAN1/2/TIM12/13/14/QUADSPI/LCD,SAI2/QUADSPI/OTG2_HS/OTG1_FS,ETH/OTG1_FS,FMC/SDMMC1/OTG2_FS,DCMI,LCD,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,SAI2_SD_B,ETH_MII_CRS,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,SAI2_MCK_B,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,LCD_R2,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,SAI2_SCK_B,,,ETH_MDIO,,,LCD_R1,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,,,OTG_HS_ULPI_CK,,,,LCD_R4,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,,TIM13_CH1,,,,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,,,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,,,,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,,,,DCMI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,,,DCMI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS,SAI2_FS_B,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,HDMI_CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,,UART4_RTS,,,,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,,UART4_CTS,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,SAI1_SD_A,SPI3_MOSI/I2S3_SD,,QUADSPI_CLK,,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,SPI2_NSS/I2S2_WS,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,HDMI_CEC,I2C1_SCL,,,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,CAN1_RX,,ETH_MII_TXD3,SDMMC1_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,,,,CAN1_TX,,,SDMMC1_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,,USART3_CTS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,,SPI2_MISO,,USART3_RTS,,TIM12_CH1,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI/I2S2_SD,,,,TIM12_CH2,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,,,,,,SAI2_FS_B,,OTG_HS_ULPI_STP,,FMC_SDNWE,,LCD_R5,EVENTOUT,ADC123_IN10 -PortC,PC1,TRACED0,,,,,SPI2_MOSI/I2S2_SD,SAI1_SD_A,,,,,ETH_MDC,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,,,SPI2_MISO,,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,I2S1_MCK,,,SPDIFRX_IN2,,,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,SPDIFRX_IN3,,,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,,USART6_TX,,,,SDMMC1_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,,USART6_RX,,,,SDMMC1_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,UART5_RTS,USART6_CK,,,,SDMMC1_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,UART5_CTS,,QUADSPI_BK1_IO0,,,SDMMC1_D1,DCMI_D3,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDMMC1_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDMMC1_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,,,,,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,,,,,,,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,,UART5_RX,,,,SDMMC1_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,,,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,,,,,USART2_CK,SPDIFRX_IN0,,,,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,SPDIFRX_IN1,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,,I2C4_SMBA,,,USART3_CTS,,QUADSPI_BK1_IO0,SAI2_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,LPTIM1_IN1,I2C4_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,SAI2_FS_A,,FMC_A17/FMC_ALE,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,LPTIM1_OUT,I2C4_SDA,,,,,QUADSPI_BK1_IO3,SAI2_SCK_A,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_RTS,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,LPTIM1_ETR,,,,,UART8_RX,,SAI2_MCK_A,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,LPTIM1_IN2,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,QUADSPI_BK1_IO2,,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,SAI2_MCK_B,,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,,,UART7_RX,,QUADSPI_BK2_IO0,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,,,UART7_TX,,QUADSPI_BK2_IO1,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,,,UART7_RTS,,QUADSPI_BK2_IO2,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,,,UART7_CTS,,QUADSPI_BK2_IO3,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,,,,,SAI2_SD_B,,FMC_D8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9,,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10,,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCK_B,,FMC_D11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,UART7_RTS,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,UART7_CTS,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,,,,,DCMI_D11,LCD_DE,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,I2C4_SCL,,,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,,,USART6_CK,,,,FMC_INT,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,,,SPI6_NSS,,SPDIFRX_IN2,USART6_RTS,,,ETH_PPS_OUT,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,,,SPDIFRX_IN3,USART6_RX,QUADSPI_BK2_IO2,SAI2_FS_B,,FMC_NE2/FMC_NCE,DCMI_VSYNC,,EVENTOUT, -PortG,PG10,,,,,,,,,,LCD_G3,SAI2_SD_B,,FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,,,,,,SPDIFRX_IN0,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,,,LPTIM1_IN1,,SPI6_MISO,,SPDIFRX_IN1,USART6_RTS,LCD_B4,,,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,TRACED0,,,LPTIM1_OUT,,SPI6_SCK,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,LCD_R0,EVENTOUT, -PortG,PG14,TRACED1,,,LPTIM1_ETR,,SPI6_MOSI,,,USART6_TX,QUADSPI_BK2_IO3,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,LCD_B0,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,LPTIM1_IN2,,,,,,QUADSPI_BK2_IO0,SAI2_SCK_B,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT, -PortH,PH3,,,,,,,,,,QUADSPI_BK2_IO1,SAI2_MCK_B,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,,OTG_HS_ULPI_NXT,,,,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,ETH_MII_RXD2,FMC_SDNE1,DCMI_D8,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,EVENTOUT, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,I2C4_SMBA,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,I2C4_SCL,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,I2C4_SDA,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,,,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,TIM8_BKIN2,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,SAI2_MCK_A,,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ6,,,,,,,,,,,,,,,LCD_R7,EVENTOUT, -PortJ,PJ7,,,,,,,,,,,,,,,LCD_G0,EVENTOUT, -PortJ,PJ8,,,,,,,,,,,,,,,LCD_G1,EVENTOUT, -PortJ,PJ9,,,,,,,,,,,,,,,LCD_G2,EVENTOUT, -PortJ,PJ10,,,,,,,,,,,,,,,LCD_G3,EVENTOUT, -PortJ,PJ11,,,,,,,,,,,,,,,LCD_G4,EVENTOUT, -PortJ,PJ12,,,,,,,,,,,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK0,,,,,,,,,,,,,,,LCD_G5,EVENTOUT, -PortK,PK1,,,,,,,,,,,,,,,LCD_G6,EVENTOUT, -PortK,PK2,,,,,,,,,,,,,,,LCD_G7,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,TIM1/2 ,TIM3/4/5,TIM8/9/10/11/LPTIM1/CEC,I2C1/2/3/4/CEC,SPI1/2/3/4/5/6 ,SPI3/SAI1 ,SPI2/3/USART1/2/3/UART5/SPDIFRX,SAI2/USART6/UART4/5/7/8/SPDIFRX,CAN1/2/TIM12/13/14/QUADSPI/LCD,SAI2/QUADSPI/OTG2_HS/OTG1_FS,ETH/OTG1_FS ,FMC/SDMMC1/OTG2_FS,DCMI ,LCD ,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , ,SAI2_SD_B ,ETH_MII_CRS , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , ,LCD_R2 ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX ,SAI2_SCK_B , , ,ETH_MDIO , , ,LCD_R1 ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , , ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , , , ,OTG_HS_ULPI_CK , , , ,LCD_R4 ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , , ,TIM13_CH1 , , , ,DCMI_PIXCLK,LCD_G2 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD, , , ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF , , , ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , , , , ,DCMI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID , , ,DCMI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS ,SAI2_FS_B ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , ,HDMI_CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS , ,UART4_RTS , , , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , , , ,UART4_CTS ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , , , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , , ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SD , ,QUADSPI_CLK , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,SPI2_NSS/I2S2_WS , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2, ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD, , ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1,HDMI_CEC ,I2C1_SCL , , ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS , ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , , ,USART1_RX , , , , ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , , , , ,CAN1_RX , ,ETH_MII_TXD3 ,SDMMC1_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , , ,CAN1_TX , , ,SDMMC1_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , , ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS , ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N , ,SPI2_MISO , ,USART3_RTS , ,TIM12_CH1 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI/I2S2_SD, , , ,TIM12_CH2 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , , , , , , ,SAI2_FS_B , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_IN10 +PortC,PC1 ,TRACED0 , , , , ,SPI2_MOSI/I2S2_SD,SAI1_SD_A , , , , ,ETH_MDC , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , , , ,SPI2_MISO , , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , , , ,SPI2_MOSI/I2S2_SD, , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , ,I2S1_MCK , , ,SPDIFRX_IN2 , , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , ,SPDIFRX_IN3 , , ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , , ,USART6_TX , , , ,SDMMC1_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK , ,USART6_RX , , , ,SDMMC1_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3,TIM8_CH3 , , , ,UART5_RTS ,USART6_CK , , , ,SDMMC1_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , ,UART5_CTS , ,QUADSPI_BK1_IO0 , , ,SDMMC1_D1 ,DCMI_D3 , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDMMC1_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDMMC1_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , , , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDMMC1_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , ,SPI3_MOSI/I2S3_SD,SAI1_SD_A ,USART2_RX , , , , ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , , , , , ,USART2_CK ,SPDIFRX_IN0 , , , ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX ,SPDIFRX_IN1 , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , , ,I2C4_SMBA , , ,USART3_CTS , ,QUADSPI_BK1_IO0 ,SAI2_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1,LPTIM1_IN1 ,I2C4_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 ,SAI2_FS_A , ,FMC_A17/FMC_ALE , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2,LPTIM1_OUT ,I2C4_SDA , , , , ,QUADSPI_BK1_IO3 ,SAI2_SCK_A , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , ,UART8_CTS , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , ,UART8_RTS , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR,LPTIM1_ETR , , , , ,UART8_RX , ,SAI2_MCK_A , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , ,LPTIM1_IN2 , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , ,QUADSPI_BK1_IO2 , ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , ,SAI2_MCK_B , ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , , , ,UART7_RX , ,QUADSPI_BK2_IO0 , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , , , ,UART7_TX , ,QUADSPI_BK2_IO1 , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , , , ,UART7_RTS , ,QUADSPI_BK2_IO2 , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , ,UART7_CTS , ,QUADSPI_BK2_IO3 , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS , , , , ,SAI2_SD_B , ,FMC_D8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9 , ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10 , ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCK_B , ,FMC_D11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , ,UART7_RTS ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , ,UART7_CTS ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , , , , , ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , ,SAI2_SD_B , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,I2C4_SMBA , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,I2C4_SCL , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , , ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , , , ,USART6_CK , , , ,FMC_INT ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , , , ,SPI6_NSS , ,SPDIFRX_IN2 ,USART6_RTS , , ,ETH_PPS_OUT ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , , , ,SPDIFRX_IN3 ,USART6_RX ,QUADSPI_BK2_IO2 ,SAI2_FS_B , ,FMC_NE2/FMC_NCE ,DCMI_VSYNC , ,EVENTOUT, +PortG,PG10, , , , , , , , , ,LCD_G3 ,SAI2_SD_B , ,FMC_NE3 ,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , , , , , , ,SPDIFRX_IN0 , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, , , ,LPTIM1_IN1 , ,SPI6_MISO , ,SPDIFRX_IN1 ,USART6_RTS ,LCD_B4 , , ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13,TRACED0 , , ,LPTIM1_OUT , ,SPI6_SCK , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , ,LCD_R0 ,EVENTOUT, +PortG,PG14,TRACED1 , , ,LPTIM1_ETR , ,SPI6_MOSI , , ,USART6_TX ,QUADSPI_BK2_IO3 , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , ,LCD_B0 ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , ,LPTIM1_IN2 , , , , , ,QUADSPI_BK2_IO0 ,SAI2_SCK_B ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,QUADSPI_BK2_IO1 ,SAI2_MCK_B ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , ,OTG_HS_ULPI_NXT , , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA ,SPI5_SCK , , , ,TIM12_CH1 , ,ETH_MII_RXD2 ,FMC_SDNE1 ,DCMI_D8 , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA , , , , ,TIM12_CH2 , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, ,I2C4_SMBA , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, ,I2C4_SCL , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, ,I2C4_SDA , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO , , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD, , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,SAI2_MCK_A , ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , , ,OTG_HS_ULPI_DIR , , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , , , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , , , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , , ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ6 , , , , , , , , , , , , , , ,LCD_R7 ,EVENTOUT, +PortJ,PJ7 , , , , , , , , , , , , , , ,LCD_G0 ,EVENTOUT, +PortJ,PJ8 , , , , , , , , , , , , , , ,LCD_G1 ,EVENTOUT, +PortJ,PJ9 , , , , , , , , , , , , , , ,LCD_G2 ,EVENTOUT, +PortJ,PJ10, , , , , , , , , , , , , , ,LCD_G3 ,EVENTOUT, +PortJ,PJ11, , , , , , , , , , , , , , ,LCD_G4 ,EVENTOUT, +PortJ,PJ12, , , , , , , , , , , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , , , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK0 , , , , , , , , , , , , , , ,LCD_G5 ,EVENTOUT, +PortK,PK1 , , , , , , , , , , , , , , ,LCD_G6 ,EVENTOUT, +PortK,PK2 , , , , , , , , , , , , , , ,LCD_G7 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32f767_af.csv b/ports/stm32/boards/stm32f767_af.csv index 0c8069ec26129..c86c3bfe314a1 100644 --- a/ports/stm32/boards/stm32f767_af.csv +++ b/ports/stm32/boards/stm32f767_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,I2C4/UART5/TIM1/2,TIM3/4/5,TIM8/9/10/11/LPTIM1/DFSDM1/CEC,I2C1/2/3/4/USART1/CEC,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,SPI2/I2S2/SPI3/I2S3/SAI1/I2C4/UART4/DFSDM1,SPI2/I2S2/SPI3/I2S3/SPI6/USART1/2/3/UART5/DFSDM1/SPDIF,SPI6/SAI2/USART6/UART4/5/7/8/OTG_FS/SPDIF,CAN1/2/TIM12/13/14/QUADSPI/FMC/LCD,SAI2/QUADSPI/SDMMC2/DFSDM1/OTG2_HS/OTG1_FS/LCD,I2C4/CAN3/SDMMC2/ETH,UART7/FMC/SDMMC1/MDIOS/OTG2_FS,DCMI/LCD/DSI,LCD,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,SAI2_SD_B,ETH_MII_CRS,,,,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,SAI2_MCK_B,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,LCD_R2,EVENTOUT,ADC123_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,SAI2_SCK_B,,,ETH_MDIO,MDIOS_MDIO,,LCD_R1,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,LCD_B2,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC123_IN3 -PortA,PA4,,,,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,SPI6_NSS,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,SPI6_SCK,,OTG_HS_ULPI_CK,,,,LCD_R4,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,,SPI6_MISO,TIM13_CH1,,,MDIOS_MDC,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SD,,,SPI6_MOSI,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,,,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,CAN3_RX,UART7_RX,LCD_B3,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,,,,DCMI_D0,LCD_R5,EVENTOUT, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,LCD_B4,OTG_FS_ID,,MDIOS_MDIO,DCMI_D1,LCD_B1,EVENTOUT, -PortA,PA11,,TIM1_CH4,,,,SPI2_NSS/I2S2_WS,UART4_RX,USART1_CTS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,SPI2_SCK/I2S2_CK,UART4_TX,USART1_RTS,SAI2_FS_B,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,HDMI_CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,SPI6_NSS,UART4_RTS,,,CAN3_TX,UART7_TX,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,DFSDM1_CKOUT,,UART4_CTS,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,LCD_G1,EVENTOUT,ADC12_IN8 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,DFSDM1_DATAIN1,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,LCD_G0,EVENTOUT,ADC12_IN9 -PortB,PB2,,,,,,,SAI1_SD_A,SPI3_MOSI/I2S3_SD,,QUADSPI_CLK,DFSDM1_CKIN1,,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,SPI6_SCK,,SDMMC2_D2,CAN3_RX,UART7_RX,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,SPI2_NSS/I2S2_WS,SPI6_MISO,,SDMMC2_D3,CAN3_TX,UART7_TX,,,EVENTOUT, -PortB,PB5,,UART5_RX,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI/I2S1_SD,SPI3_MOSI/I2S3_SD,,SPI6_MOSI,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,LCD_G7,EVENTOUT, -PortB,PB6,,UART5_TX,TIM4_CH1,HDMI_CEC,I2C1_SCL,,DFSDM1_DATAIN5,USART1_TX,,CAN2_TX,QUADSPI_BK1_NCS,I2C4_SCL,FMC_SDNE1,DCMI_D5,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,DFSDM1_CKIN5,USART1_RX,,,,I2C4_SDA,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,I2C4_SCL,TIM4_CH3,TIM10_CH1,I2C1_SCL,,DFSDM1_CKIN7,UART5_RX,,CAN1_RX,SDMMC2_D4,ETH_MII_TXD3,SDMMC1_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,I2C4_SDA,TIM4_CH4,TIM11_CH1,I2C1_SDA,SPI2_NSS/I2S2_WS,DFSDM1_DATAIN7,UART5_TX,,CAN1_TX,SDMMC2_D5,I2C4_SMBA,SDMMC1_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK/I2S2_CK,DFSDM1_DATAIN7,USART3_TX,,QUADSPI_BK1_NCS,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,DFSDM1_CKIN7,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DSI_TE,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,DFSDM1_DATAIN1,USART3_CK,UART5_RX,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,,SPI2_SCK/I2S2_CK,DFSDM1_CKIN1,USART3_CTS,UART5_TX,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,USART1_TX,SPI2_MISO,DFSDM1_DATAIN2,USART3_RTS,UART4_RTS,TIM12_CH1,SDMMC2_D0,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,USART1_RX,SPI2_MOSI/I2S2_SD,DFSDM1_CKIN2,,UART4_CTS,TIM12_CH2,SDMMC2_D1,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,DFSDM1_CKIN0,,,DFSDM1_DATAIN4,,SAI2_FS_B,,OTG_HS_ULPI_STP,,FMC_SDNWE,,LCD_R5,EVENTOUT,ADC123_IN10 -PortC,PC1,TRACED0,,,DFSDM1_DATAIN0,,SPI2_MOSI/I2S2_SD,SAI1_SD_A,,,,DFSDM1_CKIN4,ETH_MDC,MDIOS_MDC,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,,,DFSDM1_CKIN1,,SPI2_MISO,DFSDM1_CKOUT,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,,,DFSDM1_DATAIN1,,SPI2_MOSI/I2S2_SD,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,DFSDM1_CKIN2,,I2S1_MCK,,,SPDIFRX_IN2,,,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,DFSDM1_DATAIN2,,,,,SPDIFRX_IN3,,,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,,DFSDM1_CKIN3,USART6_TX,FMC_NWAIT,SDMMC2_D6,,SDMMC1_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,DFSDM1_DATAIN3,USART6_RX,FMC_NE1,SDMMC2_D7,,SDMMC1_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,UART5_RTS,USART6_CK,FMC_NE2/FMC_NCE,,,SDMMC1_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,UART5_CTS,,QUADSPI_BK1_IO0,LCD_G3,,SDMMC1_D1,DCMI_D3,LCD_B2,EVENTOUT, -PortC,PC10,,,,DFSDM1_CKIN5,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDMMC1_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,DFSDM1_DATAIN5,,,SPI3_MISO,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDMMC1_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,DFSDM1_CKIN6,,,DFSDM1_DATAIN7,,UART4_RX,CAN1_RX,,,FMC_D2,,,EVENTOUT, -PortD,PD1,,,,DFSDM1_DATAIN6,,,DFSDM1_CKIN7,,UART4_TX,CAN1_TX,,,FMC_D3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,,UART5_RX,,,,SDMMC1_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,DFSDM1_CKOUT,,SPI2_SCK/I2S2_CK,DFSDM1_DATAIN0,USART2_CTS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,DFSDM1_CKIN0,USART2_RTS,,,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,,DFSDM1_CKIN4,,SPI3_MOSI/I2S3_SD,SAI1_SD_A,USART2_RX,,,DFSDM1_DATAIN1,SDMMC2_CK,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,DFSDM1_DATAIN4,,SPI1_MOSI/I2S1_SD,DFSDM1_CKIN1,USART2_CK,SPDIFRX_IN0,,,SDMMC2_CMD,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,DFSDM1_CKIN3,,,,USART3_TX,SPDIFRX_IN1,,,,FMC_D13,,,EVENTOUT, -PortD,PD9,,,,DFSDM1_DATAIN3,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT, -PortD,PD10,,,,DFSDM1_CKOUT,,,,USART3_CK,,,,,FMC_D15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,,I2C4_SMBA,,,USART3_CTS,,QUADSPI_BK1_IO0,SAI2_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,LPTIM1_IN1,I2C4_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,SAI2_FS_A,,FMC_A17/FMC_ALE,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,LPTIM1_OUT,I2C4_SDA,,,,,QUADSPI_BK1_IO3,SAI2_SCK_A,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,,FMC_D0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_RTS,,,,FMC_D1,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,LPTIM1_ETR,,,,,UART8_RX,,SAI2_MCK_A,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,,,LPTIM1_IN2,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,,,,SPI4_SCK,SAI1_MCLK_A,,,QUADSPI_BK1_IO2,,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,,,SAI1_SD_B,,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,,,,SPI4_NSS,SAI1_FS_A,,,,DFSDM1_DATAIN3,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,SPI4_MISO,SAI1_SCK_A,,,,DFSDM1_CKIN3,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,,TIM9_CH2,,SPI4_MOSI,SAI1_SD_A,,,,SAI2_MCK_B,,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,DFSDM1_DATAIN2,,UART7_RX,,QUADSPI_BK2_IO0,,FMC_D4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM1_CKIN2,,UART7_TX,,QUADSPI_BK2_IO1,,FMC_D5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,DFSDM1_CKOUT,,UART7_RTS,,QUADSPI_BK2_IO2,,FMC_D6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,DFSDM1_DATAIN4,,UART7_CTS,,QUADSPI_BK2_IO3,,FMC_D7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,,SPI4_NSS,DFSDM1_CKIN4,,,,SAI2_SD_B,,FMC_D8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,DFSDM1_DATAIN5,,,,SAI2_SCK_B,,FMC_D9,,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,DFSDM1_CKIN5,,,,SAI2_FS_B,,FMC_D10,,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCK_B,,FMC_D11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,,FMC_D12,,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN9 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN14 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN15 -PortF,PF6,,,,TIM10_CH1,,SPI5_NSS,SAI1_SD_B,,UART7_RX,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_IN4 -PortF,PF7,,,,TIM11_CH1,,SPI5_SCK,SAI1_MCLK_B,,UART7_TX,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_IN5 -PortF,PF8,,,,,,SPI5_MISO,SAI1_SCK_B,,UART7_RTS,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_IN6 -PortF,PF9,,,,,,SPI5_MOSI,SAI1_FS_B,,UART7_CTS,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_IN7 -PortF,PF10,,,,,,,,,,QUADSPI_CLK,,,,DCMI_D11,LCD_DE,EVENTOUT,ADC3_IN8 -PortF,PF11,,,,,,SPI5_MOSI,,,,,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT, -PortF,PF13,,,,,I2C4_SMBA,,DFSDM1_DATAIN6,,,,,,FMC_A7,,,EVENTOUT, -PortF,PF14,,,,,I2C4_SCL,,DFSDM1_CKIN6,,,,,,FMC_A8,,,EVENTOUT, -PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,FMC_A13,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,FMC_NE3,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,SAI1_MCLK_A,,USART6_CK,,,,FMC_INT,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,,,SPI6_NSS,,SPDIFRX_IN2,USART6_RTS,,,ETH_PPS_OUT,FMC_SDCLK,,LCD_G7,EVENTOUT, -PortG,PG9,,,,,,SPI1_MISO,,SPDIFRX_IN3,USART6_RX,QUADSPI_BK2_IO2,SAI2_FS_B,SDMMC2_D0,FMC_NE2/FMC_NCE,DCMI_VSYNC,,EVENTOUT, -PortG,PG10,,,,,,SPI1_NSS/I2S1_WS,,,,LCD_G3,SAI2_SD_B,SDMMC2_D1,FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,,,,SPI1_SCK/I2S1_CK,,SPDIFRX_IN0,,,SDMMC2_D2,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,,,LPTIM1_IN1,,SPI6_MISO,,SPDIFRX_IN1,USART6_RTS,LCD_B4,,SDMMC2_D3,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,TRACED0,,,LPTIM1_OUT,,SPI6_SCK,,,USART6_CTS,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,LCD_R0,EVENTOUT, -PortG,PG14,TRACED1,,,LPTIM1_ETR,,SPI6_MOSI,,,USART6_TX,QUADSPI_BK2_IO3,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,LCD_B0,EVENTOUT, -PortG,PG15,,,,,,,,,USART6_CTS,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,,,LPTIM1_IN2,,,,,,QUADSPI_BK2_IO0,SAI2_SCK_B,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT, -PortH,PH3,,,,,,,,,,QUADSPI_BK2_IO1,SAI2_MCK_B,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,,,,,LCD_G5,OTG_HS_ULPI_NXT,,,,LCD_G4,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,,,,I2C2_SMBA,SPI5_SCK,,,,TIM12_CH1,,ETH_MII_RXD2,FMC_SDNE1,DCMI_D8,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,EVENTOUT, -PortH,PH8,,,,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,,,I2C3_SMBA,,,,,TIM12_CH2,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,I2C4_SMBA,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,I2C4_SCL,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,I2C4_SDA,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,UART4_TX,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,UART4_RX,CAN1_RX,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,TIM8_BKIN2,,SPI2_SCK/I2S2_CK,,,,,,,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SD,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,SAI2_MCK_A,,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,UART4_RX,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,LCD_G6,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,LCD_G2,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,LCD_R7,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,DSI_TE,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ6,,,,,,,,,,,,,,,LCD_R7,EVENTOUT, -PortJ,PJ7,,,,,,,,,,,,,,,LCD_G0,EVENTOUT, -PortJ,PJ8,,,,,,,,,,,,,,,LCD_G1,EVENTOUT, -PortJ,PJ9,,,,,,,,,,,,,,,LCD_G2,EVENTOUT, -PortJ,PJ10,,,,,,,,,,,,,,,LCD_G3,EVENTOUT, -PortJ,PJ11,,,,,,,,,,,,,,,LCD_G4,EVENTOUT, -PortJ,PJ12,,,,,,,,,,LCD_G3,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,LCD_G4,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK0,,,,,,,,,,,,,,,LCD_G5,EVENTOUT, -PortK,PK1,,,,,,,,,,,,,,,LCD_G6,EVENTOUT, -PortK,PK2,,,,,,,,,,,,,,,LCD_G7,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,I2C4/UART5/TIM1/2,TIM3/4/5,TIM8/9/10/11/LPTIM1/DFSDM1/CEC,I2C1/2/3/4/USART1/CEC,SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,SPI2/I2S2/SPI3/I2S3/SAI1/I2C4/UART4/DFSDM1,SPI2/I2S2/SPI3/I2S3/SPI6/USART1/2/3/UART5/DFSDM1/SPDIF,SPI6/SAI2/USART6/UART4/5/7/8/OTG_FS/SPDIF,CAN1/2/TIM12/13/14/QUADSPI/FMC/LCD,SAI2/QUADSPI/SDMMC2/DFSDM1/OTG2_HS/OTG1_FS/LCD,I2C4/CAN3/SDMMC2/ETH ,UART7/FMC/SDMMC1/MDIOS/OTG2_FS,DCMI/LCD/DSI,LCD ,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , ,SAI2_SD_B ,ETH_MII_CRS , , , ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2, , , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK, , ,LCD_R2 ,EVENTOUT,ADC123_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3,TIM9_CH1 , , , ,USART2_TX ,SAI2_SCK_B , , ,ETH_MDIO ,MDIOS_MDIO , ,LCD_R1 ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4,TIM9_CH2 , , , ,USART2_RX , ,LCD_B2 ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC123_IN3 +PortA,PA4 , , , , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,SPI6_NSS , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR, ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,SPI6_SCK , ,OTG_HS_ULPI_CK , , , ,LCD_R4 ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1,TIM8_BKIN , ,SPI1_MISO , , ,SPI6_MISO ,TIM13_CH1 , , ,MDIOS_MDC ,DCMI_PIXCLK ,LCD_G2 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2,TIM8_CH1N , ,SPI1_MOSI/I2S1_SD , , ,SPI6_MOSI ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE , , ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF ,CAN3_RX ,UART7_RX ,LCD_B3 ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , , , , ,DCMI_D0 ,LCD_R5 ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , ,LCD_B4 ,OTG_FS_ID , ,MDIOS_MDIO ,DCMI_D1 ,LCD_B1 ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , , , ,SPI2_NSS/I2S2_WS ,UART4_RX ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI2_SCK/I2S2_CK ,UART4_TX ,USART1_RTS ,SAI2_FS_B ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR, , ,HDMI_CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,SPI6_NSS ,UART4_RTS , , ,CAN3_TX ,UART7_TX , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3,TIM8_CH2N , , ,DFSDM1_CKOUT , ,UART4_CTS ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , ,LCD_G1 ,EVENTOUT,ADC12_IN8 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4,TIM8_CH3N , , ,DFSDM1_DATAIN1 , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , ,LCD_G0 ,EVENTOUT,ADC12_IN9 +PortB,PB2 , , , , , , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SD , ,QUADSPI_CLK ,DFSDM1_CKIN1 , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , ,SPI6_SCK , ,SDMMC2_D2 ,CAN3_RX ,UART7_RX , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1, , ,SPI1_MISO ,SPI3_MISO ,SPI2_NSS/I2S2_WS ,SPI6_MISO , ,SDMMC2_D3 ,CAN3_TX ,UART7_TX , , ,EVENTOUT, +PortB,PB5 , ,UART5_RX ,TIM3_CH2, ,I2C1_SMBA ,SPI1_MOSI/I2S1_SD ,SPI3_MOSI/I2S3_SD , ,SPI6_MOSI ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 ,LCD_G7 ,EVENTOUT, +PortB,PB6 , ,UART5_TX ,TIM4_CH1,HDMI_CEC ,I2C1_SCL , ,DFSDM1_DATAIN5 ,USART1_TX , ,CAN2_TX ,QUADSPI_BK1_NCS ,I2C4_SCL ,FMC_SDNE1 ,DCMI_D5 , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2, ,I2C1_SDA , ,DFSDM1_CKIN5 ,USART1_RX , , , ,I2C4_SDA ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , ,I2C4_SCL ,TIM4_CH3,TIM10_CH1 ,I2C1_SCL , ,DFSDM1_CKIN7 ,UART5_RX , ,CAN1_RX ,SDMMC2_D4 ,ETH_MII_TXD3 ,SDMMC1_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , ,I2C4_SDA ,TIM4_CH4,TIM11_CH1 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,DFSDM1_DATAIN7 ,UART5_TX , ,CAN1_TX ,SDMMC2_D5 ,I2C4_SMBA ,SDMMC1_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,DFSDM1_DATAIN7 ,USART3_TX , ,QUADSPI_BK1_NCS ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , ,DFSDM1_CKIN7 ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DSI_TE ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,DFSDM1_DATAIN1 ,USART3_CK ,UART5_RX ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , , ,SPI2_SCK/I2S2_CK ,DFSDM1_CKIN1 ,USART3_CTS ,UART5_TX ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N ,USART1_TX ,SPI2_MISO ,DFSDM1_DATAIN2 ,USART3_RTS ,UART4_RTS ,TIM12_CH1 ,SDMMC2_D0 , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SD ,DFSDM1_CKIN2 , ,UART4_CTS ,TIM12_CH2 ,SDMMC2_D1 , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , ,DFSDM1_CKIN0 , , ,DFSDM1_DATAIN4 , ,SAI2_FS_B , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_IN10 +PortC,PC1 ,TRACED0 , , ,DFSDM1_DATAIN0 , ,SPI2_MOSI/I2S2_SD ,SAI1_SD_A , , , ,DFSDM1_CKIN4 ,ETH_MDC ,MDIOS_MDC , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , , , ,DFSDM1_CKIN1 , ,SPI2_MISO ,DFSDM1_CKOUT , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , , , ,DFSDM1_DATAIN1 , ,SPI2_MOSI/I2S2_SD , , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , ,DFSDM1_CKIN2 , ,I2S1_MCK , , ,SPDIFRX_IN2 , , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , ,DFSDM1_DATAIN2 , , , , ,SPDIFRX_IN3 , , ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , ,TIM3_CH1,TIM8_CH1 , ,I2S2_MCK , ,DFSDM1_CKIN3 ,USART6_TX ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2,TIM8_CH2 , , ,I2S3_MCK ,DFSDM1_DATAIN3 ,USART6_RX ,FMC_NE1 ,SDMMC2_D7 , ,SDMMC1_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3,TIM8_CH3 , , , ,UART5_RTS ,USART6_CK ,FMC_NE2/FMC_NCE , , ,SDMMC1_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , ,UART5_CTS , ,QUADSPI_BK1_IO0 ,LCD_G3 , ,SDMMC1_D1 ,DCMI_D3 ,LCD_B2 ,EVENTOUT, +PortC,PC10, , , ,DFSDM1_CKIN5 , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDMMC1_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , ,DFSDM1_DATAIN5 , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDMMC1_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI/I2S3_SD ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,DFSDM1_CKIN6 , , ,DFSDM1_DATAIN7 , ,UART4_RX ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , ,DFSDM1_DATAIN6 , , ,DFSDM1_CKIN7 , ,UART4_TX ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR, , , , , ,UART5_RX , , , ,SDMMC1_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , ,DFSDM1_CKOUT , ,SPI2_SCK/I2S2_CK ,DFSDM1_DATAIN0 ,USART2_CTS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , ,DFSDM1_CKIN0 ,USART2_RTS , , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , ,DFSDM1_CKIN4 , ,SPI3_MOSI/I2S3_SD ,SAI1_SD_A ,USART2_RX , , ,DFSDM1_DATAIN1 ,SDMMC2_CK ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , ,DFSDM1_DATAIN4 , ,SPI1_MOSI/I2S1_SD ,DFSDM1_CKIN1 ,USART2_CK ,SPDIFRX_IN0 , , ,SDMMC2_CMD ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , ,DFSDM1_CKIN3 , , , ,USART3_TX ,SPDIFRX_IN1 , , , ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , ,DFSDM1_DATAIN3 , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT, +PortD,PD10, , , ,DFSDM1_CKOUT , , , ,USART3_CK , , , , ,FMC_D15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , , ,I2C4_SMBA , , ,USART3_CTS , ,QUADSPI_BK1_IO0 ,SAI2_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1,LPTIM1_IN1 ,I2C4_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 ,SAI2_FS_A , ,FMC_A17/FMC_ALE , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2,LPTIM1_OUT ,I2C4_SDA , , , , ,QUADSPI_BK1_IO3 ,SAI2_SCK_A , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3, , , , , ,UART8_CTS , , , ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4, , , , , ,UART8_RTS , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR,LPTIM1_ETR , , , , ,UART8_RX , ,SAI2_MCK_A , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , , , ,LPTIM1_IN2 , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , , , , ,SPI4_SCK ,SAI1_MCLK_A , , ,QUADSPI_BK1_IO2 , ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , , , ,SAI1_SD_B , , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , , , , ,SPI4_NSS ,SAI1_FS_A , , , ,DFSDM1_DATAIN3 , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , ,SPI4_MISO ,SAI1_SCK_A , , , ,DFSDM1_CKIN3 , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 , ,TIM9_CH2 , ,SPI4_MOSI ,SAI1_SD_A , , , ,SAI2_MCK_B , ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM1_DATAIN2 , ,UART7_RX , ,QUADSPI_BK2_IO0 , ,FMC_D4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM1_CKIN2 , ,UART7_TX , ,QUADSPI_BK2_IO1 , ,FMC_D5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM1_CKOUT , ,UART7_RTS , ,QUADSPI_BK2_IO2 , ,FMC_D6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , ,DFSDM1_DATAIN4 , ,UART7_CTS , ,QUADSPI_BK2_IO3 , ,FMC_D7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , ,SPI4_NSS ,DFSDM1_CKIN4 , , , ,SAI2_SD_B , ,FMC_D8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK ,DFSDM1_DATAIN5 , , , ,SAI2_SCK_B , ,FMC_D9 , ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO ,DFSDM1_CKIN5 , , , ,SAI2_FS_B , ,FMC_D10 , ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCK_B , ,FMC_D11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , , ,FMC_D12 , ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN9 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN14 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN15 +PortF,PF6 , , , ,TIM10_CH1 , ,SPI5_NSS ,SAI1_SD_B , ,UART7_RX ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_IN4 +PortF,PF7 , , , ,TIM11_CH1 , ,SPI5_SCK ,SAI1_MCLK_B , ,UART7_TX ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_IN5 +PortF,PF8 , , , , , ,SPI5_MISO ,SAI1_SCK_B , ,UART7_RTS ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_IN6 +PortF,PF9 , , , , , ,SPI5_MOSI ,SAI1_FS_B , ,UART7_CTS ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_IN7 +PortF,PF10, , , , , , , , , ,QUADSPI_CLK , , , ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_IN8 +PortF,PF11, , , , , ,SPI5_MOSI , , , , ,SAI2_SD_B , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,I2C4_SMBA , ,DFSDM1_DATAIN6 , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,I2C4_SCL , ,DFSDM1_CKIN6 , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , ,FMC_NE3 ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , ,SAI1_MCLK_A , ,USART6_CK , , , ,FMC_INT ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , , , ,SPI6_NSS , ,SPDIFRX_IN2 ,USART6_RTS , , ,ETH_PPS_OUT ,FMC_SDCLK , ,LCD_G7 ,EVENTOUT, +PortG,PG9 , , , , , ,SPI1_MISO , ,SPDIFRX_IN3 ,USART6_RX ,QUADSPI_BK2_IO2 ,SAI2_FS_B ,SDMMC2_D0 ,FMC_NE2/FMC_NCE ,DCMI_VSYNC , ,EVENTOUT, +PortG,PG10, , , , , ,SPI1_NSS/I2S1_WS , , , ,LCD_G3 ,SAI2_SD_B ,SDMMC2_D1 ,FMC_NE3 ,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , , , , ,SPI1_SCK/I2S1_CK , ,SPDIFRX_IN0 , , ,SDMMC2_D2 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, , , ,LPTIM1_IN1 , ,SPI6_MISO , ,SPDIFRX_IN1 ,USART6_RTS ,LCD_B4 , ,SDMMC2_D3 ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13,TRACED0 , , ,LPTIM1_OUT , ,SPI6_SCK , , ,USART6_CTS , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , ,LCD_R0 ,EVENTOUT, +PortG,PG14,TRACED1 , , ,LPTIM1_ETR , ,SPI6_MOSI , , ,USART6_TX ,QUADSPI_BK2_IO3 , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , ,LCD_B0 ,EVENTOUT, +PortG,PG15, , , , , , , , ,USART6_CTS , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , ,LPTIM1_IN2 , , , , , ,QUADSPI_BK2_IO0 ,SAI2_SCK_B ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,QUADSPI_BK2_IO1 ,SAI2_MCK_B ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , ,LCD_G5 ,OTG_HS_ULPI_NXT , , , ,LCD_G4 ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA ,SPI5_SCK , , , ,TIM12_CH1 , ,ETH_MII_RXD2 ,FMC_SDNE1 ,DCMI_D8 , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA , , , , ,TIM12_CH2 , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1, ,I2C4_SMBA , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2, ,I2C4_SCL , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3, ,I2C4_SDA , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , ,UART4_TX ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4, , ,SPI2_NSS/I2S2_WS , , , , , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,SPI2_SCK/I2S2_CK , , , , , , ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO , , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SD , , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,SAI2_MCK_A , ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , , , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , ,LCD_G6 ,OTG_HS_ULPI_DIR , , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , , , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , ,LCD_G2 , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , ,LCD_R7 , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , ,DSI_TE ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ6 , , , , , , , , , , , , , , ,LCD_R7 ,EVENTOUT, +PortJ,PJ7 , , , , , , , , , , , , , , ,LCD_G0 ,EVENTOUT, +PortJ,PJ8 , , , , , , , , , , , , , , ,LCD_G1 ,EVENTOUT, +PortJ,PJ9 , , , , , , , , , , , , , , ,LCD_G2 ,EVENTOUT, +PortJ,PJ10, , , , , , , , , , , , , , ,LCD_G3 ,EVENTOUT, +PortJ,PJ11, , , , , , , , , , , , , , ,LCD_G4 ,EVENTOUT, +PortJ,PJ12, , , , , , , , , ,LCD_G3 , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , ,LCD_G4 , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK0 , , , , , , , , , , , , , , ,LCD_G5 ,EVENTOUT, +PortK,PK1 , , , , , , , , , , , , , , ,LCD_G6 ,EVENTOUT, +PortK,PK2 , , , , , , , , , , , , , , ,LCD_G7 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32g0b1_af.csv b/ports/stm32/boards/stm32g0b1_af.csv index bea1c1e156337..609360fb229b7 100644 --- a/ports/stm32/boards/stm32g0b1_af.csv +++ b/ports/stm32/boards/stm32g0b1_af.csv @@ -1,96 +1,96 @@ -Port,Pin,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,ADC -PortA,PA0,SPI2_SCK/I2S2_CK,USART2_CTS,TIM2_CH1/TIM2_ETR,,USART4_TX,LPTIM1_OUT,UCPD2_FRSTX,COMP1_OUT,,,,,,,,,ADC1_IN0 -PortA,PA1,SPI1_SCK/I2S1_CK,USART2_RTS/USART2_DE/USART2_CK,TIM2_CH2,,USART4_RX,TIM15_CH1N,I2C1_SMBA,EVENTOUT,,,,,,,,,ADC1_IN1 -PortA,PA2,SPI1_MOSI/I2S1_SD,USART2_TX,TIM2_CH3,,UCPD1_FRSTX,TIM15_CH1,LPUART1_TX,COMP2_OUT,,,,,,,,,ADC1_IN2 -PortA,PA3,SPI2_MISO/I2S2_MCK,USART2_RX,TIM2_CH4,,UCPD2_FRSTX,TIM15_CH2,LPUART1_RX,EVENTOUT,,,,,,,,,ADC1_IN3 -PortA,PA4,SPI1_NSS/I2S1_WS,SPI2_MOSI/I2S2_SD,USB_NOE,USART6_TX,TIM14_CH1,LPTIM2_OUT,UCPD2_FRSTX,EVENTOUT,,SPI3_NSS,,,,,,,ADC1_IN4 -PortA,PA5,SPI1_SCK/I2S1_CK,CEC,TIM2_CH1/TIM2_ETR,USART6_RX,USART3_TX,LPTIM2_ETR,UCPD1_FRSTX,EVENTOUT,,,,,,,,,ADC1_IN5 -PortA,PA6,SPI1_MISO/I2S1_MCK,TIM3_CH1,TIM1_BKIN,USART6_CTS,USART3_CTS,TIM16_CH1,LPUART1_CTS,COMP1_OUT,I2C2_SDA,I2C3_SDA,,,,,,,ADC1_IN6 -PortA,PA7,SPI1_MOSI/I2S1_SD,TIM3_CH2,TIM1_CH1N,USART6_RTS/USART6_DE/USART6_CK,TIM14_CH1,TIM17_CH1,UCPD1_FRSTX,COMP2_OUT,I2C2_SCL,I2C3_SCL,,,,,,,ADC1_IN7 -PortA,PA8,MCO,SPI2_NSS/I2S2_WS,TIM1_CH1,,CRS1_SYNC,LPTIM2_OUT,,EVENTOUT,I2C2_SMBA,,,,,,,, -PortA,PA9,MCO,USART1_TX,TIM1_CH2,,SPI2_MISO/I2S2_MCK,TIM15_BKIN,I2C1_SCL,EVENTOUT,I2C2_SCL,,,,,,,, -PortA,PA10,SPI2_MOSI/I2S2_SD,USART1_RX,TIM1_CH3,MCO2,,TIM17_BKIN,I2C1_SDA,EVENTOUT,I2C2_SDA,,,,,,,, -PortA,PA11,SPI1_MISO/I2S1_MCK,USART1_CTS,TIM1_CH4,FDCAN1_RX,,TIM1_BKIN2,I2C2_SCL,COMP1_OUT,,,,,,,,, -PortA,PA12,SPI1_MOSI/I2S1_SD,USART1_RTS/USART1_DE/USART1_CK,TIM1_ETR,FDCAN1_TX,,I2S_CKIN,I2C2_SDA,COMP2_OUT,,,,,,,,, -PortA,PA13,SWDIO,IR_OUT,USB_NOE,,,,,EVENTOUT,,,LPUART2_RX,,,,,, -PortA,PA14,SWCLK,USART2_TX,,,,,,EVENTOUT,,,LPUART2_TX,,,,,, -PortA,PA15,SPI1_NSS/I2S1_WS,USART2_RX,TIM2_CH1/TIM2_ETR,MCO2,USART4_RTS/USART4_DE/USART4_CK,USART3_RTS/USART3_DE/USART3_CK,USB_NOE,EVENTOUT,I2C2_SMBA,SPI3_NSS,,,,,,, -PortB,PB0,SPI1_NSS/I2S1_WS,TIM3_CH3,TIM1_CH2N,FDCAN2_RX,USART3_RX,LPTIM1_OUT,UCPD1_FRSTX,COMP1_OUT,USART5_TX,,LPUART2_CTS,,,,,,ADC1_IN8 -PortB,PB1,TIM14_CH1,TIM3_CH4,TIM1_CH3N,FDCAN2_TX,USART3_RTS/USART3_DE/USART3_CK,LPTIM2_IN1,LPUART1_RTS/LPUART1_DE,COMP3_OUT,USART5_RX,,LPUART2_RTS/LPUART2_DE,,,,,,ADC1_IN9 -PortB,PB2,,SPI2_MISO/I2S2_MCK,,MCO2,USART3_TX,LPTIM1_OUT,,EVENTOUT,,,,,,,,,ADC1_IN10 -PortB,PB3,SPI1_SCK/I2S1_CK,TIM1_CH2,TIM2_CH2,USART5_TX,USART1_RTS/USART1_DE/USART1_CK,,I2C3_SCL,EVENTOUT,I2C2_SCL,SPI3_SCK,,,,,,, -PortB,PB4,SPI1_MISO/I2S1_MCK,TIM3_CH1,,USART5_RX,USART1_CTS,TIM17_BKIN,I2C3_SDA,EVENTOUT,I2C2_SDA,SPI3_MISO,,,,,,, -PortB,PB5,SPI1_MOSI/I2S1_SD,TIM3_CH2,TIM16_BKIN,FDCAN2_RX,,LPTIM1_IN1,I2C1_SMBA,COMP2_OUT,USART5_RTS/USART5_DE/USART5_CK,SPI3_MOSI,,,,,,, -PortB,PB6,USART1_TX,TIM1_CH3,TIM16_CH1N,FDCAN2_TX,SPI2_MISO/I2S2_MCK,LPTIM1_ETR,I2C1_SCL,EVENTOUT,USART5_CTS,TIM4_CH1,LPUART2_TX,,,,,, -PortB,PB7,USART1_RX,SPI2_MOSI/I2S2_SD,TIM17_CH1N,,USART4_CTS,LPTIM1_IN2,I2C1_SDA,EVENTOUT,,TIM4_CH2,LPUART2_RX,,,,,, -PortB,PB8,CEC,SPI2_SCK/I2S2_CK,TIM16_CH1,FDCAN1_RX,USART3_TX,TIM15_BKIN,I2C1_SCL,EVENTOUT,USART6_TX,TIM4_CH3,,,,,,, -PortB,PB9,IR_OUT,UCPD2_FRSTX,TIM17_CH1,FDCAN1_TX,USART3_RX,SPI2_NSS/I2S2_WS,I2C1_SDA,EVENTOUT,USART6_RX,TIM4_CH4,,,,,,, -PortB,PB10,CEC,LPUART1_RX,TIM2_CH3,,USART3_TX,SPI2_SCK/I2S2_CK,I2C2_SCL,COMP1_OUT,,,,,,,,,ADC1_IN11 -PortB,PB11,SPI2_MOSI/I2S2_SD,LPUART1_TX,TIM2_CH4,,USART3_RX,,I2C2_SDA,COMP2_OUT,,,,,,,,, -PortB,PB12,SPI2_NSS/I2S2_WS,LPUART1_RTS/LPUART1_DE,TIM1_BKIN,FDCAN2_RX,,TIM15_BKIN,UCPD2_FRSTX,EVENTOUT,I2C2_SMBA,,,,,,,, -PortB,PB13,SPI2_SCK/I2S2_CK,LPUART1_CTS,TIM1_CH1N,FDCAN2_TX,USART3_CTS,TIM15_CH1N,I2C2_SCL,EVENTOUT,,,,,,,,, -PortB,PB14,SPI2_MISO/I2S2_MCK,UCPD1_FRSTX,TIM1_CH2N,,USART3_RTS/USART3_DE/USART3_CK,TIM15_CH1,I2C2_SDA,EVENTOUT,USART6_RTS/USART6_DE/USART6_CK,,,,,,,, -PortB,PB15,SPI2_MOSI/I2S2_SD,,TIM1_CH3N,,TIM15_CH1N,TIM15_CH2,,EVENTOUT,USART6_CTS,,,,,,,, -PortC,PC0,LPTIM1_IN1,LPUART1_RX,LPTIM2_IN1,LPUART2_TX,USART6_TX,,I2C3_SCL,COMP3_OUT,,,,,,,,, -PortC,PC1,LPTIM1_OUT,LPUART1_TX,TIM15_CH1,LPUART2_RX,USART6_RX,,I2C3_SDA,,,,,,,,,, -PortC,PC2,LPTIM1_IN2,SPI2_MISO/I2S2_MCK,TIM15_CH2,FDCAN2_RX,,,,COMP3_OUT,,,,,,,,, -PortC,PC3,LPTIM1_ETR,SPI2_MOSI/I2S2_SD,LPTIM2_ETR,FDCAN2_TX,,,,,,,,,,,,, -PortC,PC4,USART3_TX,USART1_TX,TIM2_CH1/TIM2_ETR,FDCAN1_RX,,,,,,,,,,,,, -PortC,PC5,USART3_RX,USART1_RX,TIM2_CH2,FDCAN1_TX,,,,,,,,,,,,,ADC1_IN18 -PortC,PC6,UCPD1_FRSTX,TIM3_CH1,TIM2_CH3,LPUART2_TX,,,,,,,,,,,,, -PortC,PC7,UCPD2_FRSTX,TIM3_CH2,TIM2_CH4,LPUART2_RX,,,,,,,,,,,,, -PortC,PC8,UCPD2_FRSTX,TIM3_CH3,TIM1_CH1,LPUART2_CTS,,,,,,,,,,,,, -PortC,PC9,I2S_CKIN,TIM3_CH4,TIM1_CH2,LPUART2_RTS/LPUART2_DE,,,USB_NOE,,,,,,,,,, -PortC,PC10,USART3_TX,USART4_TX,TIM1_CH3,,SPI3_SCK,,,,,,,,,,,, -PortC,PC11,USART3_RX,USART4_RX,TIM1_CH4,,SPI3_MISO,,,,,,,,,,,, -PortC,PC12,LPTIM1_IN1,UCPD1_FRSTX,TIM14_CH1,USART5_TX,SPI3_MOSI,,,,,,,,,,,, -PortC,PC13,,,TIM1_BKIN,,,,,,,,,,,,,, -PortC,PC14,,,TIM1_BKIN2,,,,,,,,,,,,,, -PortC,PC15,OSC32_EN,OSC_EN,TIM15_BKIN,,,,,,,,,,,,,, -PortD,PD0,EVENTOUT,SPI2_NSS/I2S2_WS,TIM16_CH1,FDCAN1_RX,,,,,,,,,,,,, -PortD,PD1,EVENTOUT,SPI2_SCK/I2S2_CK,TIM17_CH1,FDCAN1_TX,,,,,,,,,,,,, -PortD,PD2,USART3_RTS/USART3_DE/USART3_CK,TIM3_ETR,TIM1_CH1N,USART5_RX,,,,,,,,,,,,, -PortD,PD3,USART2_CTS,SPI2_MISO/I2S2_MCK,TIM1_CH2N,USART5_TX,,,,,,,,,,,,, -PortD,PD4,USART2_RTS/USART2_DE/USART2_CK,SPI2_MOSI/I2S2_SD,TIM1_CH3N,USART5_RTS/USART5_DE/USART5_CK,,,,,,,,,,,,, -PortD,PD5,USART2_TX,SPI1_MISO/I2S1_MCK,TIM1_BKIN,USART5_CTS,,,,,,,,,,,,, -PortD,PD6,USART2_RX,SPI1_MOSI/I2S1_SD,LPTIM2_OUT,,,,,,,,,,,,,, -PortD,PD7,,,,MCO2,,,,,,,,,,,,, -PortD,PD8,USART3_TX,SPI1_SCK/I2S1_CK,LPTIM1_OUT,,,,,,,,,,,,,, -PortD,PD9,USART3_RX,SPI1_NSS/I2S1_WS,TIM1_BKIN2,,,,,,,,,,,,,, -PortD,PD10,MCO,,,,,,,,,,,,,,,, -PortD,PD11,USART3_CTS,LPTIM2_ETR,,,,,,,,,,,,,,, -PortD,PD12,USART3_RTS/USART3_DE/USART3_CK,LPTIM2_IN1,TIM4_CH1,FDCAN1_RX,,,,,,,,,,,,, -PortD,PD13,,LPTIM2_OUT,TIM4_CH2,FDCAN1_TX,,,,,,,,,,,,, -PortD,PD14,,LPUART2_CTS,TIM4_CH3,FDCAN2_RX,,,,,,,,,,,,, -PortD,PD15,CRS1_SYNC,LPUART2_RTS/LPUART2_DE,TIM4_CH4,FDCAN2_TX,,,,,,,,,,,,, -PortE,PE0,TIM16_CH1,EVENTOUT,TIM4_ETR,,,,,,,,,,,,,, -PortE,PE1,TIM17_CH1,EVENTOUT,,,,,,,,,,,,,,, -PortE,PE2,,TIM3_ETR,,,,,,,,,,,,,,, -PortE,PE3,,TIM3_CH1,,,,,,,,,,,,,,, -PortE,PE4,,TIM3_CH2,,,,,,,,,,,,,,, -PortE,PE5,,TIM3_CH3,,,,,,,,,,,,,,, -PortE,PE6,,TIM3_CH4,,,,,,,,,,,,,,, -PortE,PE7,,TIM1_ETR,,USART5_RTS/USART5_DE/USART5_CK,,,,,,,,,,,,, -PortE,PE8,USART4_TX,TIM1_CH1N,,,,,,,,,,,,,,, -PortE,PE9,USART4_RX,TIM1_CH1,,,,,,,,,,,,,,, -PortE,PE10,,TIM1_CH2N,,USART5_TX,,,,,,,,,,,,, -PortE,PE11,,TIM1_CH2,,USART5_RX,,,,,,,,,,,,, -PortE,PE12,SPI1_NSS/I2S1_WS,TIM1_CH3N,,,,,,,,,,,,,,, -PortE,PE13,SPI1_SCK/I2S1_CK,TIM1_CH3,,,,,,,,,,,,,,, -PortE,PE14,SPI1_MISO/I2S1_MCK,TIM1_CH4,TIM1_BK2,,,,,,,,,,,,,, -PortE,PE15,SPI1_MOSI/I2S1_SD,TIM1_BK,,,,,,,,,,,,,,, -PortF,PF0,CRS1_SYNC,EVENTOUT,TIM14_CH1,,,,,,,,,,,,,, -PortF,PF1,OSC_EN,EVENTOUT,TIM15_CH1N,,,,,,,,,,,,,, -PortF,PF2,MCO,LPUART2_TX,,LPUART2_RTS/LPUART2_DE,,,,,,,,,,,,, -PortF,PF3,,LPUART2_RX,,USART6_RTS/USART6_DE/USART6_CK,,,,,,,,,,,,, -PortF,PF4,,LPUART1_TX,,,,,,,,,,,,,,, -PortF,PF5,,LPUART1_RX,,,,,,,,,,,,,,, -PortF,PF6,,LPUART1_RTS/LPUART1_DE,,,,,,,,,,,,,,, -PortF,PF7,,LPUART1_CTS,,USART5_CTS,,,,,,,,,,,,, -PortF,PF8,,,,,,,,,,,,,,,,, -PortF,PF9,,,,USART6_TX,,,,,,,,,,,,, -PortF,PF10,,,,USART6_RX,,,,,,,,,,,,, -PortF,PF11,,,,USART6_RTS/USART6_DE/USART6_CK,,,,,,,,,,,,, -PortF,PF12,TIM15_CH1,,,USART6_CTS,,,,,,,,,,,,, -PortF,PF13,TIM15_CH2,,,,,,,,,,,,,,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12,AF13,AF14,AF15,ADC + , ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12,AF13,AF14,AF15,ADC +PortA,PA0 ,SPI2_SCK/I2S2_CK ,USART2_CTS ,TIM2_CH1/TIM2_ETR, ,USART4_TX ,LPTIM1_OUT ,UCPD2_FRSTX ,COMP1_OUT, , , , , , , , ,ADC1_IN0 +PortA,PA1 ,SPI1_SCK/I2S1_CK ,USART2_RTS/USART2_DE/USART2_CK,TIM2_CH2 , ,USART4_RX ,TIM15_CH1N ,I2C1_SMBA ,EVENTOUT , , , , , , , , ,ADC1_IN1 +PortA,PA2 ,SPI1_MOSI/I2S1_SD ,USART2_TX ,TIM2_CH3 , ,UCPD1_FRSTX ,TIM15_CH1 ,LPUART1_TX ,COMP2_OUT, , , , , , , , ,ADC1_IN2 +PortA,PA3 ,SPI2_MISO/I2S2_MCK ,USART2_RX ,TIM2_CH4 , ,UCPD2_FRSTX ,TIM15_CH2 ,LPUART1_RX ,EVENTOUT , , , , , , , , ,ADC1_IN3 +PortA,PA4 ,SPI1_NSS/I2S1_WS ,SPI2_MOSI/I2S2_SD ,USB_NOE ,USART6_TX ,TIM14_CH1 ,LPTIM2_OUT ,UCPD2_FRSTX ,EVENTOUT , ,SPI3_NSS , , , , , , ,ADC1_IN4 +PortA,PA5 ,SPI1_SCK/I2S1_CK ,CEC ,TIM2_CH1/TIM2_ETR,USART6_RX ,USART3_TX ,LPTIM2_ETR ,UCPD1_FRSTX ,EVENTOUT , , , , , , , , ,ADC1_IN5 +PortA,PA6 ,SPI1_MISO/I2S1_MCK ,TIM3_CH1 ,TIM1_BKIN ,USART6_CTS ,USART3_CTS ,TIM16_CH1 ,LPUART1_CTS ,COMP1_OUT,I2C2_SDA ,I2C3_SDA , , , , , , ,ADC1_IN6 +PortA,PA7 ,SPI1_MOSI/I2S1_SD ,TIM3_CH2 ,TIM1_CH1N ,USART6_RTS/USART6_DE/USART6_CK,TIM14_CH1 ,TIM17_CH1 ,UCPD1_FRSTX ,COMP2_OUT,I2C2_SCL ,I2C3_SCL , , , , , , ,ADC1_IN7 +PortA,PA8 ,MCO ,SPI2_NSS/I2S2_WS ,TIM1_CH1 , ,CRS1_SYNC ,LPTIM2_OUT , ,EVENTOUT ,I2C2_SMBA , , , , , , , , +PortA,PA9 ,MCO ,USART1_TX ,TIM1_CH2 , ,SPI2_MISO/I2S2_MCK ,TIM15_BKIN ,I2C1_SCL ,EVENTOUT ,I2C2_SCL , , , , , , , , +PortA,PA10,SPI2_MOSI/I2S2_SD ,USART1_RX ,TIM1_CH3 ,MCO2 , ,TIM17_BKIN ,I2C1_SDA ,EVENTOUT ,I2C2_SDA , , , , , , , , +PortA,PA11,SPI1_MISO/I2S1_MCK ,USART1_CTS ,TIM1_CH4 ,FDCAN1_RX , ,TIM1_BKIN2 ,I2C2_SCL ,COMP1_OUT, , , , , , , , , +PortA,PA12,SPI1_MOSI/I2S1_SD ,USART1_RTS/USART1_DE/USART1_CK,TIM1_ETR ,FDCAN1_TX , ,I2S_CKIN ,I2C2_SDA ,COMP2_OUT, , , , , , , , , +PortA,PA13,SWDIO ,IR_OUT ,USB_NOE , , , , ,EVENTOUT , , ,LPUART2_RX , , , , , , +PortA,PA14,SWCLK ,USART2_TX , , , , , ,EVENTOUT , , ,LPUART2_TX , , , , , , +PortA,PA15,SPI1_NSS/I2S1_WS ,USART2_RX ,TIM2_CH1/TIM2_ETR,MCO2 ,USART4_RTS/USART4_DE/USART4_CK,USART3_RTS/USART3_DE/USART3_CK,USB_NOE ,EVENTOUT ,I2C2_SMBA ,SPI3_NSS , , , , , , , +PortB,PB0 ,SPI1_NSS/I2S1_WS ,TIM3_CH3 ,TIM1_CH2N ,FDCAN2_RX ,USART3_RX ,LPTIM1_OUT ,UCPD1_FRSTX ,COMP1_OUT,USART5_TX , ,LPUART2_CTS , , , , , ,ADC1_IN8 +PortB,PB1 ,TIM14_CH1 ,TIM3_CH4 ,TIM1_CH3N ,FDCAN2_TX ,USART3_RTS/USART3_DE/USART3_CK,LPTIM2_IN1 ,LPUART1_RTS/LPUART1_DE,COMP3_OUT,USART5_RX , ,LPUART2_RTS/LPUART2_DE, , , , , ,ADC1_IN9 +PortB,PB2 , ,SPI2_MISO/I2S2_MCK , ,MCO2 ,USART3_TX ,LPTIM1_OUT , ,EVENTOUT , , , , , , , , ,ADC1_IN10 +PortB,PB3 ,SPI1_SCK/I2S1_CK ,TIM1_CH2 ,TIM2_CH2 ,USART5_TX ,USART1_RTS/USART1_DE/USART1_CK, ,I2C3_SCL ,EVENTOUT ,I2C2_SCL ,SPI3_SCK , , , , , , , +PortB,PB4 ,SPI1_MISO/I2S1_MCK ,TIM3_CH1 , ,USART5_RX ,USART1_CTS ,TIM17_BKIN ,I2C3_SDA ,EVENTOUT ,I2C2_SDA ,SPI3_MISO, , , , , , , +PortB,PB5 ,SPI1_MOSI/I2S1_SD ,TIM3_CH2 ,TIM16_BKIN ,FDCAN2_RX , ,LPTIM1_IN1 ,I2C1_SMBA ,COMP2_OUT,USART5_RTS/USART5_DE/USART5_CK,SPI3_MOSI, , , , , , , +PortB,PB6 ,USART1_TX ,TIM1_CH3 ,TIM16_CH1N ,FDCAN2_TX ,SPI2_MISO/I2S2_MCK ,LPTIM1_ETR ,I2C1_SCL ,EVENTOUT ,USART5_CTS ,TIM4_CH1 ,LPUART2_TX , , , , , , +PortB,PB7 ,USART1_RX ,SPI2_MOSI/I2S2_SD ,TIM17_CH1N , ,USART4_CTS ,LPTIM1_IN2 ,I2C1_SDA ,EVENTOUT , ,TIM4_CH2 ,LPUART2_RX , , , , , , +PortB,PB8 ,CEC ,SPI2_SCK/I2S2_CK ,TIM16_CH1 ,FDCAN1_RX ,USART3_TX ,TIM15_BKIN ,I2C1_SCL ,EVENTOUT ,USART6_TX ,TIM4_CH3 , , , , , , , +PortB,PB9 ,IR_OUT ,UCPD2_FRSTX ,TIM17_CH1 ,FDCAN1_TX ,USART3_RX ,SPI2_NSS/I2S2_WS ,I2C1_SDA ,EVENTOUT ,USART6_RX ,TIM4_CH4 , , , , , , , +PortB,PB10,CEC ,LPUART1_RX ,TIM2_CH3 , ,USART3_TX ,SPI2_SCK/I2S2_CK ,I2C2_SCL ,COMP1_OUT, , , , , , , , ,ADC1_IN11 +PortB,PB11,SPI2_MOSI/I2S2_SD ,LPUART1_TX ,TIM2_CH4 , ,USART3_RX , ,I2C2_SDA ,COMP2_OUT, , , , , , , , , +PortB,PB12,SPI2_NSS/I2S2_WS ,LPUART1_RTS/LPUART1_DE ,TIM1_BKIN ,FDCAN2_RX , ,TIM15_BKIN ,UCPD2_FRSTX ,EVENTOUT ,I2C2_SMBA , , , , , , , , +PortB,PB13,SPI2_SCK/I2S2_CK ,LPUART1_CTS ,TIM1_CH1N ,FDCAN2_TX ,USART3_CTS ,TIM15_CH1N ,I2C2_SCL ,EVENTOUT , , , , , , , , , +PortB,PB14,SPI2_MISO/I2S2_MCK ,UCPD1_FRSTX ,TIM1_CH2N , ,USART3_RTS/USART3_DE/USART3_CK,TIM15_CH1 ,I2C2_SDA ,EVENTOUT ,USART6_RTS/USART6_DE/USART6_CK, , , , , , , , +PortB,PB15,SPI2_MOSI/I2S2_SD , ,TIM1_CH3N , ,TIM15_CH1N ,TIM15_CH2 , ,EVENTOUT ,USART6_CTS , , , , , , , , +PortC,PC0 ,LPTIM1_IN1 ,LPUART1_RX ,LPTIM2_IN1 ,LPUART2_TX ,USART6_TX , ,I2C3_SCL ,COMP3_OUT, , , , , , , , , +PortC,PC1 ,LPTIM1_OUT ,LPUART1_TX ,TIM15_CH1 ,LPUART2_RX ,USART6_RX , ,I2C3_SDA , , , , , , , , , , +PortC,PC2 ,LPTIM1_IN2 ,SPI2_MISO/I2S2_MCK ,TIM15_CH2 ,FDCAN2_RX , , , ,COMP3_OUT, , , , , , , , , +PortC,PC3 ,LPTIM1_ETR ,SPI2_MOSI/I2S2_SD ,LPTIM2_ETR ,FDCAN2_TX , , , , , , , , , , , , , +PortC,PC4 ,USART3_TX ,USART1_TX ,TIM2_CH1/TIM2_ETR,FDCAN1_RX , , , , , , , , , , , , , +PortC,PC5 ,USART3_RX ,USART1_RX ,TIM2_CH2 ,FDCAN1_TX , , , , , , , , , , , , ,ADC1_IN18 +PortC,PC6 ,UCPD1_FRSTX ,TIM3_CH1 ,TIM2_CH3 ,LPUART2_TX , , , , , , , , , , , , , +PortC,PC7 ,UCPD2_FRSTX ,TIM3_CH2 ,TIM2_CH4 ,LPUART2_RX , , , , , , , , , , , , , +PortC,PC8 ,UCPD2_FRSTX ,TIM3_CH3 ,TIM1_CH1 ,LPUART2_CTS , , , , , , , , , , , , , +PortC,PC9 ,I2S_CKIN ,TIM3_CH4 ,TIM1_CH2 ,LPUART2_RTS/LPUART2_DE , , ,USB_NOE , , , , , , , , , , +PortC,PC10,USART3_TX ,USART4_TX ,TIM1_CH3 , ,SPI3_SCK , , , , , , , , , , , , +PortC,PC11,USART3_RX ,USART4_RX ,TIM1_CH4 , ,SPI3_MISO , , , , , , , , , , , , +PortC,PC12,LPTIM1_IN1 ,UCPD1_FRSTX ,TIM14_CH1 ,USART5_TX ,SPI3_MOSI , , , , , , , , , , , , +PortC,PC13, , ,TIM1_BKIN , , , , , , , , , , , , , , +PortC,PC14, , ,TIM1_BKIN2 , , , , , , , , , , , , , , +PortC,PC15,OSC32_EN ,OSC_EN ,TIM15_BKIN , , , , , , , , , , , , , , +PortD,PD0 ,EVENTOUT ,SPI2_NSS/I2S2_WS ,TIM16_CH1 ,FDCAN1_RX , , , , , , , , , , , , , +PortD,PD1 ,EVENTOUT ,SPI2_SCK/I2S2_CK ,TIM17_CH1 ,FDCAN1_TX , , , , , , , , , , , , , +PortD,PD2 ,USART3_RTS/USART3_DE/USART3_CK,TIM3_ETR ,TIM1_CH1N ,USART5_RX , , , , , , , , , , , , , +PortD,PD3 ,USART2_CTS ,SPI2_MISO/I2S2_MCK ,TIM1_CH2N ,USART5_TX , , , , , , , , , , , , , +PortD,PD4 ,USART2_RTS/USART2_DE/USART2_CK,SPI2_MOSI/I2S2_SD ,TIM1_CH3N ,USART5_RTS/USART5_DE/USART5_CK, , , , , , , , , , , , , +PortD,PD5 ,USART2_TX ,SPI1_MISO/I2S1_MCK ,TIM1_BKIN ,USART5_CTS , , , , , , , , , , , , , +PortD,PD6 ,USART2_RX ,SPI1_MOSI/I2S1_SD ,LPTIM2_OUT , , , , , , , , , , , , , , +PortD,PD7 , , , ,MCO2 , , , , , , , , , , , , , +PortD,PD8 ,USART3_TX ,SPI1_SCK/I2S1_CK ,LPTIM1_OUT , , , , , , , , , , , , , , +PortD,PD9 ,USART3_RX ,SPI1_NSS/I2S1_WS ,TIM1_BKIN2 , , , , , , , , , , , , , , +PortD,PD10,MCO , , , , , , , , , , , , , , , , +PortD,PD11,USART3_CTS ,LPTIM2_ETR , , , , , , , , , , , , , , , +PortD,PD12,USART3_RTS/USART3_DE/USART3_CK,LPTIM2_IN1 ,TIM4_CH1 ,FDCAN1_RX , , , , , , , , , , , , , +PortD,PD13, ,LPTIM2_OUT ,TIM4_CH2 ,FDCAN1_TX , , , , , , , , , , , , , +PortD,PD14, ,LPUART2_CTS ,TIM4_CH3 ,FDCAN2_RX , , , , , , , , , , , , , +PortD,PD15,CRS1_SYNC ,LPUART2_RTS/LPUART2_DE ,TIM4_CH4 ,FDCAN2_TX , , , , , , , , , , , , , +PortE,PE0 ,TIM16_CH1 ,EVENTOUT ,TIM4_ETR , , , , , , , , , , , , , , +PortE,PE1 ,TIM17_CH1 ,EVENTOUT , , , , , , , , , , , , , , , +PortE,PE2 , ,TIM3_ETR , , , , , , , , , , , , , , , +PortE,PE3 , ,TIM3_CH1 , , , , , , , , , , , , , , , +PortE,PE4 , ,TIM3_CH2 , , , , , , , , , , , , , , , +PortE,PE5 , ,TIM3_CH3 , , , , , , , , , , , , , , , +PortE,PE6 , ,TIM3_CH4 , , , , , , , , , , , , , , , +PortE,PE7 , ,TIM1_ETR , ,USART5_RTS/USART5_DE/USART5_CK, , , , , , , , , , , , , +PortE,PE8 ,USART4_TX ,TIM1_CH1N , , , , , , , , , , , , , , , +PortE,PE9 ,USART4_RX ,TIM1_CH1 , , , , , , , , , , , , , , , +PortE,PE10, ,TIM1_CH2N , ,USART5_TX , , , , , , , , , , , , , +PortE,PE11, ,TIM1_CH2 , ,USART5_RX , , , , , , , , , , , , , +PortE,PE12,SPI1_NSS/I2S1_WS ,TIM1_CH3N , , , , , , , , , , , , , , , +PortE,PE13,SPI1_SCK/I2S1_CK ,TIM1_CH3 , , , , , , , , , , , , , , , +PortE,PE14,SPI1_MISO/I2S1_MCK ,TIM1_CH4 ,TIM1_BK2 , , , , , , , , , , , , , , +PortE,PE15,SPI1_MOSI/I2S1_SD ,TIM1_BK , , , , , , , , , , , , , , , +PortF,PF0 ,CRS1_SYNC ,EVENTOUT ,TIM14_CH1 , , , , , , , , , , , , , , +PortF,PF1 ,OSC_EN ,EVENTOUT ,TIM15_CH1N , , , , , , , , , , , , , , +PortF,PF2 ,MCO ,LPUART2_TX , ,LPUART2_RTS/LPUART2_DE , , , , , , , , , , , , , +PortF,PF3 , ,LPUART2_RX , ,USART6_RTS/USART6_DE/USART6_CK, , , , , , , , , , , , , +PortF,PF4 , ,LPUART1_TX , , , , , , , , , , , , , , , +PortF,PF5 , ,LPUART1_RX , , , , , , , , , , , , , , , +PortF,PF6 , ,LPUART1_RTS/LPUART1_DE , , , , , , , , , , , , , , , +PortF,PF7 , ,LPUART1_CTS , ,USART5_CTS , , , , , , , , , , , , , +PortF,PF8 , , , , , , , , , , , , , , , , , +PortF,PF9 , , , ,USART6_TX , , , , , , , , , , , , , +PortF,PF10, , , ,USART6_RX , , , , , , , , , , , , , +PortF,PF11, , , ,USART6_RTS/USART6_DE/USART6_CK, , , , , , , , , , , , , +PortF,PF12,TIM15_CH1 , , ,USART6_CTS , , , , , , , , , , , , , +PortF,PF13,TIM15_CH2 , , , , , , , , , , , , , , , , diff --git a/ports/stm32/boards/stm32g474_af.csv b/ports/stm32/boards/stm32g474_af.csv index 0108ee90138ae..34ab2858374b3 100644 --- a/ports/stm32/boards/stm32g474_af.csv +++ b/ports/stm32/boards/stm32g474_af.csv @@ -1,109 +1,109 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,I2C4/SYS_AF,LPTIM1/TIM2/5/15/16/17,I2C1/3/TIM1/2/3/4/5/8/20/15/COMP1,QUADSPI1/I2C3/4/SAI1/USB/HRTIM1/TIM8/20/15/COMP3,I2C1/2/3/4/TIM1/8/16/17,QUADSPI1/SPI1/2/3/4/I2S2/3/I2C4/UART4/5/TIM8/Infrared,QUADSPI1/SPI2/3/I2S2/3/TIM1/5/8/20/Infrared,USART1/2/3/CAN/COMP7/5/6,I2C3/4/UART4/5/LPUART1/COMP1/2/7/4/5/6/3,CAN/TIM1/8/15/CAN1/2,QUADSPI1/TIM2/3/4/8/17,LPTIM1/TIM1/8/CAN1/3,FMC/LPUART1/SAI1/HRTIM1/TIM1,SAI1SAI1/HRTIM1/OPAMP2,UART4/5/SAI1/TIM2/15/UCPD1,SYS,ADC,COMP,DAC,OPAMP -PortA,PA0,,TIM2_CH1,TIM5_CH1,,,,,USART2_CTS,COMP1_OUT,TIM8_BKIN,TIM8_ETR,,,,TIM2_ETR,EVENTOUT,ADC12_IN1,COMP1_INM/COMP3_INP,, -PortA,PA1,RTC_REFIN,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS_DE,,TIM15_CH1N,,,,,,EVENTOUT,ADC12_IN2,COMP1_INP,,OPAMP1_VINP/OPAMP3_VINP/OPAMP6_VINM -PortA,PA2,,TIM2_CH3,TIM5_CH3,,,,,USART2_TX,COMP2_OUT,TIM15_CH1,QUADSPI1_BK1_NCS,,LPUART1_TX,,UCPD1_FRSTX,EVENTOUT,ADC1_IN3,COMP2_INM,,OPAMP1_VOUT -PortA,PA3,,TIM2_CH4,TIM5_CH4,SAI1_CK1,,,,USART2_RX,,TIM15_CH2,QUADSPI1_CLK,,LPUART1_RX,SAI1_MCLK_A,,EVENTOUT,ADC1_IN4,COMP2_INP,,OPAMP1_VINM/OPAMP1_VINP/OPAMP5_VINM -PortA,PA4,,,TIM3_CH2,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,,SAI1_FS_B,,EVENTOUT,ADC2_IN17,COMP1_INM,DAC1_OUT1, -PortA,PA5,,TIM2_CH1,TIM2_ETR,,,SPI1_SCK,,,,,,,,,UCPD1_FRSTX,EVENTOUT,ADC2_IN13,COMP2_INM,DAC1_OUT2,OPAMP2_VINM -PortA,PA6,,TIM16_CH1,TIM3_CH1,,TIM8_BKIN,SPI1_MISO,TIM1_BKIN,,COMP1_OUT,,QUADSPI1_BK1_IO3,,LPUART1_CTS,,,EVENTOUT,ADC2_IN3,,DAC2_OUT1,OPAMP2_VOUT -PortA,PA7,,TIM17_CH1,TIM3_CH2,,TIM8_CH1N,SPI1_MOSI,TIM1_CH1N,,COMP2_OUT,,QUADSPI1_BK1_IO2,,,,UCPD1_FRSTX,EVENTOUT,ADC2_IN4,COMP2_INP,,OPAMP1_VINP/OPAMP2_VINP -PortA,PA8,MCO,,I2C3_SCL,,I2C2_SDA,I2S2_MCK,TIM1_CH1,USART1_CK,COMP7_OUT,,TIM4_ETR,CAN3_RX,SAI1_CK2,HRTIM1_CHA1,SAI1_SCK_A,EVENTOUT,ADC5_IN1,,,OPAMP5_VOUT -PortA,PA9,,,I2C3_SMBA,,I2C2_SCL,I2S3_MCK,TIM1_CH2,USART1_TX,COMP5_OUT,TIM15_BKIN,TIM2_CH3,,,HRTIM1_CHA2,SAI1_FS_A,EVENTOUT,ADC5_IN2,,, -PortA,PA10,,TIM17_BKIN,,USB_CRS_SYNC,I2C2_SMBA,SPI2_MISO,TIM1_CH3,USART1_RX,COMP6_OUT,,TIM2_CH4,TIM8_BKIN,SAI1_D1,HRTIM1_CHB1,SAI1_SD_A,EVENTOUT,,,, -PortA,PA11,,,,,,SPI2_MOSI/I2S2_SD,TIM1_CH1N,USART1_CTS,COMP1_OUT,CAN1_RX,TIM4_CH1,TIM1_CH4,TIM1_BKIN2,HRTIM1_CHB2,,EVENTOUT,,,, -PortA,PA12,,TIM16_CH1,,,,I2SCKIN,TIM1_CH2N,USART1_RTS_DE,COMP2_OUT,CAN1_TX,TIM4_CH2,TIM1_ETR,,HRTIM1_FLT1,,EVENTOUT,,,, -PortA,PA13,SWDIOJTMS,TIM16_CH1N,,I2C4_SCL,I2C1_SCL,IR_OUT,,USART3_CTS,,,TIM4_CH3,,,SAI1_SD_B,,EVENTOUT,,,, -PortA,PA14,SWCLKJTCK,LPTIM1_OUT,,I2C4_SMBA,I2C1_SDA,TIM8_CH2,TIM1_BKIN,USART2_TX,,,,,,SAI1_FS_B,,EVENTOUT,,,, -PortA,PA15,JTDI,TIM2_CH1,TIM8_CH1,,I2C1_SCL,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_RX,UART4_RTS_DE,TIM1_BKIN,,CAN3_TX,,HRTIM1_FLT2,TIM2_ETR,EVENTOUT,,,, -PortB,PB0,,,TIM3_CH3,,TIM8_CH2N,,TIM1_CH2N,,,,QUADSPI1_BK1_IO1,,,HRTIM1_FLT5,UCPD1_FRSTX,EVENTOUT,ADC3_IN12/ADC1_IN15,COMP4_INP,,OPAMP2_VINP/OPAMP3_VINP -PortB,PB1,,,TIM3_CH4,,TIM8_CH3N,,TIM1_CH3N,,COMP4_OUT,,QUADSPI1_BK1_IO0,,LPUART1_RTS_DE,HRTIM1_SCOUT,,EVENTOUT,ADC3_IN1/ADC1_IN12,COMP1_INP,,OPAMP3_VOUT/OPAMP6_VINM -PortB,PB2,RTC_OUT2,LPTIM1_OUT,TIM5_CH1,TIM20_CH1,I2C3_SMBA,,,,,,QUADSPI1_BK2_IO1,,,HRTIM1_SCIN,,EVENTOUT,ADC2_IN12,COMP4_INM,,OPAMP3_VINM -PortB,PB3,JTDOTRACESWO,TIM2_CH2,TIM4_ETR,USB_CRS_SYNC,TIM8_CH1N,SPI1_SCK,SPI3_SCK/I2S3_CK,USART2_TX,,,TIM3_ETR,CAN3_RX,HRTIM1_SCOUT,HRTIM1_EEV9,SAI1_SCK_B,EVENTOUT,,,, -PortB,PB4,JTRST,TIM16_CH1,TIM3_CH1,,TIM8_CH2N,SPI1_MISO,SPI3_MISO,USART2_RX,UART5_RTS_DE,,TIM17_BKIN,CAN3_TX,,HRTIM1_EEV7,SAI1_MCLK_B,EVENTOUT,,,, -PortB,PB5,,TIM16_BKIN,TIM3_CH2,TIM8_CH3N,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,USART2_CK,I2C3_SDA,CAN2_RX,TIM17_CH1,LPTIM1_IN1,SAI1_SD_B,HRTIM1_EEV6,UART5_CTS,EVENTOUT,,,, -PortB,PB6,,TIM16_CH1N,TIM4_CH1,,,TIM8_CH1,TIM8_ETR,USART1_TX,COMP4_OUT,CAN2_TX,TIM8_BKIN2,LPTIM1_ETR,HRTIM1_SCIN,HRTIM1_EEV4,SAI1_FS_B,EVENTOUT,,,, -PortB,PB7,,TIM17_CH1N,TIM4_CH2,I2C4_SDA,I2C1_SDA,TIM8_BKIN,,USART1_RX,COMP3_OUT,,TIM3_CH4,LPTIM1_IN2,FMC_NL,HRTIM1_EEV3,UART4_CTS,EVENTOUT,,,, -PortB,PB8,,TIM16_CH1,TIM4_CH3,SAI1_CK1,I2C1_SCL,,,USART3_RX,COMP1_OUT,CAN1_RX,TIM8_CH2,,TIM1_BKIN,HRTIM1_EEV8,SAI1_MCLK_A,EVENTOUT,,,, -PortB,PB9,,TIM17_CH1,TIM4_CH4,SAI1_D2,I2C1_SDA,,IR_OUT,USART3_TX,COMP2_OUT,CAN1_TX,TIM8_CH3,,TIM1_CH3N,HRTIM1_EEV5,SAI1_FS_A,EVENTOUT,,,, -PortB,PB10,,TIM2_CH3,,,,,,USART3_TX,LPUART1_RX,,QUADSPI1_CLK,,TIM1_BKIN,HRTIM1_FLT3,SAI1_SCK_A,EVENTOUT,,COMP5_INM,,OPAMP3_VINM/OPAMP4_VINM -PortB,PB11,,TIM2_CH4,,,,,,USART3_RX,LPUART1_TX,,QUADSPI1_BK1_NCS,,,HRTIM1_FLT4,,EVENTOUT,ADC12_IN14,COMP6_INP,,OPAMP4_VINP/OPAMP6_VOUT -PortB,PB12,,,TIM5_ETR,,I2C2_SMBA,SPI2_NSS/I2S2_WS,TIM1_BKIN,USART3_CK,LPUART1_RTS_DE,CAN2_RX,,,,HRTIM1_CHC1,,EVENTOUT,ADC4_IN3/ADC1_IN11,COMP7_INM,,OPAMP4_VOUT/OPAMP6_VINP -PortB,PB13,,,,,,SPI2_SCK/I2S2_CK,TIM1_CH1N,USART3_CTS,LPUART1_CTS,CAN2_TX,,,,HRTIM1_CHC2,,EVENTOUT,ADC3_IN5,COMP5_INP,,OPAMP3_VINP/OPAMP4_VINP/OPAMP6_VINP -PortB,PB14,,TIM15_CH1,,,,SPI2_MISO,TIM1_CH2N,USART3_RTS_DE,COMP4_OUT,,,,,HRTIM1_CHD1,,EVENTOUT,ADC4_IN4/ADC1_IN5,COMP7_INP,,OPAMP2_VINP/OPAMP5_VINP -PortB,PB15,RTC_REFIN,TIM15_CH2,TIM15_CH1N,COMP3_OUT,TIM1_CH3N,SPI2_MOSI/I2S2_SD,,,,,,,,HRTIM1_CHD2,,EVENTOUT,ADC4_IN5/ADC2_IN15,COMP6_INM,,OPAMP5_VINM -PortC,PC0,,LPTIM1_IN1,TIM1_CH1,,,,,,LPUART1_RX,,,,,,,EVENTOUT,ADC12_IN6,COMP3_INM, -PortC,PC1,,LPTIM1_OUT,TIM1_CH2,,,,,,LPUART1_TX,,QUADSPI1_BK2_IO0,,,SAI1_SD_A,,EVENTOUT,ADC12_IN7,COMP3_INP,, -PortC,PC2,,LPTIM1_IN2,TIM1_CH3,COMP3_OUT,,,TIM20_CH2,,,,QUADSPI1_BK2_IO1,,,,,EVENTOUT,ADC12_IN8,, -PortC,PC3,,LPTIM1_ETR,TIM1_CH4,SAI1_D1,,,TIM1_BKIN2,,,,QUADSPI1_BK2_IO2,,,SAI1_SD_A,,EVENTOUT,ADC12_IN9,,,OPAMP5_VINP -PortC,PC4,,,TIM1_ETR,,I2C2_SCL,,,USART1_TX,,,QUADSPI1_BK2_IO3,,,,,EVENTOUT,ADC2_IN5,,, -PortC,PC5,,,TIM15_BKIN,SAI1_D3,,,TIM1_CH4N,USART1_RX,,,,,,HRTIM1_EEV10,,EVENTOUT,ADC2_IN11,,,OPAMP1_VINM/OPAMP2_VINM -PortC,PC6,,,TIM3_CH1,HRTIM1_EEV10,TIM8_CH1,,I2S2_MCK,COMP6_OUT,I2C4_SCL,,,,,HRTIM1_CHF1,,EVENTOUT,,,, -PortC,PC7,,,TIM3_CH2,HRTIM1_FLT5,TIM8_CH2,,I2S3_MCK,COMP5_OUT,I2C4_SDA,,,,,HRTIM1_CHF2,,EVENTOUT,,,, -PortC,PC8,,,TIM3_CH3,HRTIM1_CHE1,TIM8_CH3,,TIM20_CH3,COMP7_OUT,I2C3_SCL,,,,,,,EVENTOUT,,,, -PortC,PC9,,,TIM3_CH4,HRTIM1_CHE2,TIM8_CH4,I2SCKIN,TIM8_BKIN2,,I2C3_SDA,,,,,,,EVENTOUT,,,, -PortC,PC10,,,,,TIM8_CH1N,UART4_TX,SPI3_SCK/I2S3_CK,USART3_TX,,,,,,HRTIM1_FLT6,,EVENTOUT,,,, -PortC,PC11,,,,HRTIM1_EEV2,TIM8_CH2N,UART4_RX,SPI3_MISO,USART3_RX,I2C3_SDA,,,,,,,EVENTOUT,,,, -PortC,PC12,,TIM5_CH2,,HRTIM1_EEV1,TIM8_CH3N,UART5_TX,SPI3_MOSI/I2S3_SD,USART3_CK,,,,,,,UCPD1_FRSTX,EVENTOUT,,,, -PortC,PC13,,,TIM1_BKIN,,TIM1_CH1N,,TIM8_CH4N,,,,,,,,,EVENTOUT,,,, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT,,,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT,,,, -PortD,PD0,,,,,,,TIM8_CH4N,,,CAN1_RX,,,FMC_D2,,,EVENTOUT,,,, -PortD,PD1,,,,,TIM8_CH4,,TIM8_BKIN2,,,CAN1_TX,,,FMC_D3,,,EVENTOUT,,,, -PortD,PD2,,,TIM3_ETR,,TIM8_BKIN,UART5_RX,,,,,,,,,,EVENTOUT,,,, -PortD,PD3,,,TIM2_CH1/TIM2_ETR,,,,,USART2_CTS,,,QUADSPI1_BK2_NCS,,FMC_CLK,,,EVENTOUT,,,, -PortD,PD4,,,TIM2_CH2,,,,,USART2_RTS_DE,,,QUADSPI1_BK2_IO0,,FMC_NOE,,,EVENTOUT,,,, -PortD,PD5,,,,,,,,USART2_TX,,,QUADSPI1_BK2_IO1,,FMC_NWE,,,EVENTOUT,,,, -PortD,PD6,,,TIM2_CH4,SAI1_D1,,,,USART2_RX,,,QUADSPI1_BK2_IO2,,FMC_NWAIT,SAI1_SD_A,,EVENTOUT,,,, -PortD,PD7,,,TIM2_CH3,,,,,USART2_CK,,,QUADSPI1_BK2_IO3,,FMC_NCE/FMC_NE1,,,EVENTOUT,,,, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13,,,EVENTOUT,ADC4_IN12/ADC5_IN12,,,OPAMP4_VINM -PortD,PD9,,,,,,,,USART3_RX,,,,,FMC_D14,,,EVENTOUT,ADC4_IN13/ADC5_IN13,,,OPAMP6_VINP -PortD,PD10,,,,,,,,USART3_CK,,,,,FMC_D15,,,EVENTOUT,ADC345_IN7,COMP6_INM,, -PortD,PD11,,TIM5_ETR,,,I2C4_SMBA,,,USART3_CTS,,,,,FMC_A16,,,EVENTOUT,ADC345_IN8,COMP6_INP,,OPAMP4_VINP -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS_DE,,,,,FMC_A17,,,EVENTOUT,ADC345_IN9,COMP5_INP,,OPAMP5_VINP -PortD,PD13,,,TIM4_CH2,,,,,,,,,,FMC_A18,,,EVENTOUT,ADC345_IN10,COMP5_INM,, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,FMC_D0,,,EVENTOUT,ADC345_IN11,COMP7_INP,,OPAMP2_VINP -PortD,PD15,,,TIM4_CH4,,,,SPI2_NSS,,,,,,FMC_D1,,,EVENTOUT,,COMP7_INM,, -PortE,PE0,,,TIM4_ETR,TIM20_CH4N,TIM16_CH1,,TIM20_ETR,USART1_TX,,CAN1_RXFD,,,FMC_NBL0,,,EVENTOUT,,,, -PortE,PE1,,,,,TIM17_CH1,,TIM20_CH4,USART1_RX,,,,,FMC_NBL1,,,EVENTOUT,,,, -PortE,PE2,TRACECK,,TIM3_CH1,SAI1_CK1,,SPI4_SCK,TIM20_CH1,,,,,,FMC_A23,SAI1_MCLK_A,,EVENTOUT,,,, -PortE,PE3,TRACED0,,TIM3_CH2,,,SPI4_NSS,TIM20_CH2,,,,,,FMC_A19,SAI1_SD_B,,EVENTOUT,,,, -PortE,PE4,TRACED1,,TIM3_CH3,SAI1_D2,,SPI4_NSS,TIM20_CH1N,,,,,,FMC_A20,SAI1_FS_A,,EVENTOUT,,,, -PortE,PE5,TRACED2,,TIM3_CH4,SAI1_CK2,,SPI4_MISO,TIM20_CH2N,,,,,,FMC_A21,SAI1_SCK_A,,EVENTOUT,,,, -PortE,PE6,TRACED3,,,SAI1_D1,,SPI4_MOSI,TIM20_CH3N,,,,,,FMC_A22,SAI1_SD_A,,EVENTOUT,,,, -PortE,PE7,,,TIM1_ETR,,,,,,,,,,FMC_D4,SAI1_SD_B,,EVENTOUT,ADC3_IN4,COMP4_INP,, -PortE,PE8,,TIM5_CH3,TIM1_CH1N,,,,,,,,,,FMC_D5,SAI1_SCK_B,,EVENTOUT,ADC345_IN6,COMP4_INM,, -PortE,PE9,,TIM5_CH4,TIM1_CH1,,,,,,,,,,FMC_D6,SAI1_FS_B,,EVENTOUT,ADC3_IN2,,, -PortE,PE10,,,TIM1_CH2N,,,,,,,,QUADSPI1_CLK,,FMC_D7,SAI1_MCLK_B,,EVENTOUT,ADC345_IN14,,, -PortE,PE11,,,TIM1_CH2,,,SPI4_NSS,,,,,QUADSPI1_BK1_NCS,,FMC_D8,,,EVENTOUT,ADC345_IN15,,, -PortE,PE12,,,TIM1_CH3N,,,SPI4_SCK,,,,,QUADSPI1_BK1_IO0,,FMC_D9,,,EVENTOUT,ADC345_IN16,,, -PortE,PE13,,,TIM1_CH3,,,SPI4_MISO,,,,,QUADSPI1_BK1_IO1,,FMC_D10,,,EVENTOUT,ADC3_IN3,,, -PortE,PE14,,,TIM1_CH4,,,SPI4_MOSI,TIM1_BKIN2,,,,QUADSPI1_BK1_IO2,,FMC_D11,,,EVENTOUT,ADC4_IN1,,, -PortE,PE15,,,TIM1_BKIN,,,,TIM1_CH4N,USART3_RX,,,QUADSPI1_BK1_IO3,,FMC_D12,,,EVENTOUT,ADC4_IN2,,, -PortF,PF0,,,,,I2C2_SDA,SPI2_NSS/I2S2_WS,TIM1_CH3N,,,,,,,,,EVENTOUT,ADC1_IN10,,, -PortF,PF1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,,,,EVENTOUT,ADC2_IN10,COMP3_INM,, -PortF,PF2,,,TIM20_CH3,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT,,,, -PortF,PF3,,,TIM20_CH4,,I2C3_SCL,,,,,,,,FMC_A3,,,EVENTOUT,,,, -PortF,PF4,,,COMP1_OUT,TIM20_CH1N,I2C3_SDA,,,,,,,,FMC_A4,,,EVENTOUT,,,, -PortF,PF5,,,TIM20_CH2N,,,,,,,,,,FMC_A5,,,EVENTOUT,,,, -PortF,PF6,,TIM5_ETR,TIM4_CH4,SAI1_SD_B,I2C2_SCL,,TIM5_CH1,USART3_RTS,,,QUADSPI1_BK1_IO3,,,,,EVENTOUT,,,, -PortF,PF7,,,TIM20_BKIN,,,,TIM5_CH2,,,,QUADSPI1_BK1_IO2,,FMC_A1,SAI1_MCLK_B,,EVENTOUT,,,, -PortF,PF8,,,TIM20_BKIN2,,,,TIM5_CH3,,,,QUADSPI1_BK1_IO0,,FMC_A24,SAI1_SCK_B,,EVENTOUT,,,, -PortF,PF9,,,TIM20_BKIN,TIM15_CH1,,SPI2_SCK,TIM5_CH4,,,,QUADSPI1_BK1_IO1,,FMC_A25,SAI1_FS_B,,EVENTOUT,,,, -PortF,PF10,,,TIM20_BKIN2,TIM15_CH2,,SPI2_SCK,,,,,QUADSPI1_CLK,,FMC_A0,SAI1_D3,,EVENTOUT,,,, -PortF,PF11,,,TIM20_ETR,,,,,,,,,,FMC_NE4,,,EVENTOUT,,,, -PortF,PF12,,,TIM20_CH1,,,,,,,,,,FMC_A6,,,EVENTOUT,,,, -PortF,PF13,,,TIM20_CH2,,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT,,,, -PortF,PF14,,,TIM20_CH3,,I2C4_SCL,,,,,,,,FMC_A8,,,EVENTOUT,,,, -PortF,PF15,,,TIM20_CH4,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT,,,, -PortG,PG0,,,TIM20_CH1N,,,,,,,,,,FMC_A10,,,EVENTOUT,,,, -PortG,PG1,,,TIM20_CH2N,,,,,,,,,,FMC_A11,,,EVENTOUT,,,, -PortG,PG2,,,TIM20_CH3N,,,SPI1_SCK,,,,,,,FMC_A12,,,EVENTOUT,,,, -PortG,PG3,,,TIM20_BKIN,,I2C4_SCL,SPI1_MISO,TIM20_CH4N,,,,,,FMC_A13,,,EVENTOUT,,,, -PortG,PG4,,,TIM20_BKIN2,,I2C4_SDA,SPI1_MOSI,,,,,,,FMC_A14,,,EVENTOUT,,,, -PortG,PG5,,,TIM20_ETR,,,SPI1_NSS,,,LPUART1_CTS,,,,FMC_A15,,,EVENTOUT,,,, -PortG,PG6,,,TIM20_BKIN,,I2C3_SMBA,,,,LPUART1_RTS_DE,,,,FMC_INT,,,EVENTOUT,,,, -PortG,PG7,,,,SAI1_CK1,I2C3_SCL,,,,LPUART1_TX,,,,FMC_INT,SAI1_MCLK_A,,EVENTOUT,,,, -PortG,PG8,,,,,I2C3_SDA,,,,LPUART1_RX,,,,FMC_NE3,,,EVENTOUT,,,, -PortG,PG9,,,,,,,SPI3_SCK,USART1_TX,,,,,FMC_NCE/FMC_NE2,,TIM15_CH1N,EVENTOUT,,,, -PortG,PG10,MCO,,,,,,,,,,,,,,,EVENTOUT +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,I2C4/SYS_AF ,LPTIM1/TIM2/5/15/16/17,I2C1/3/TIM1/2/3/4/5/8/20/15/COMP1,QUADSPI1/I2C3/4/SAI1/USB/HRTIM1/TIM8/20/15/COMP3,I2C1/2/3/4/TIM1/8/16/17,QUADSPI1/SPI1/2/3/4/I2S2/3/I2C4/UART4/5/TIM8/Infrared,QUADSPI1/SPI2/3/I2S2/3/TIM1/5/8/20/Infrared,USART1/2/3/CAN/COMP7/5/6,I2C3/4/UART4/5/LPUART1/COMP1/2/7/4/5/6/3,CAN/TIM1/8/15/CAN1/2,QUADSPI1/TIM2/3/4/8/17,LPTIM1/TIM1/8/CAN1/3,FMC/LPUART1/SAI1/HRTIM1/TIM1,SAI1SAI1/HRTIM1/OPAMP2,UART4/5/SAI1/TIM2/15/UCPD1,SYS ,ADC +PortA,PA0 , ,TIM2_CH1 ,TIM5_CH1 , , , , ,USART2_CTS ,COMP1_OUT ,TIM8_BKIN ,TIM8_ETR , , , ,TIM2_ETR ,EVENTOUT,ADC12_IN1 +PortA,PA1 ,RTC_REFIN ,TIM2_CH2 ,TIM5_CH2 , , , , ,USART2_RTS_DE , ,TIM15_CH1N , , , , , ,EVENTOUT,ADC12_IN2 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , , , , ,USART2_TX ,COMP2_OUT ,TIM15_CH1 ,QUADSPI1_BK1_NCS , ,LPUART1_TX , ,UCPD1_FRSTX ,EVENTOUT,ADC1_IN3 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,SAI1_CK1 , , , ,USART2_RX , ,TIM15_CH2 ,QUADSPI1_CLK , ,LPUART1_RX ,SAI1_MCLK_A , ,EVENTOUT,ADC1_IN4 +PortA,PA4 , , ,TIM3_CH2 , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , , ,SAI1_FS_B , ,EVENTOUT,ADC2_IN17 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_SCK , , , , , , , , ,UCPD1_FRSTX ,EVENTOUT,ADC2_IN13 +PortA,PA6 , ,TIM16_CH1 ,TIM3_CH1 , ,TIM8_BKIN ,SPI1_MISO ,TIM1_BKIN , ,COMP1_OUT , ,QUADSPI1_BK1_IO3 , ,LPUART1_CTS , , ,EVENTOUT,ADC2_IN3 +PortA,PA7 , ,TIM17_CH1 ,TIM3_CH2 , ,TIM8_CH1N ,SPI1_MOSI ,TIM1_CH1N , ,COMP2_OUT , ,QUADSPI1_BK1_IO2 , , , ,UCPD1_FRSTX ,EVENTOUT,ADC2_IN4 +PortA,PA8 ,MCO , ,I2C3_SCL , ,I2C2_SDA ,I2S2_MCK ,TIM1_CH1 ,USART1_CK ,COMP7_OUT , ,TIM4_ETR ,CAN3_RX ,SAI1_CK2 ,HRTIM1_CHA1 ,SAI1_SCK_A ,EVENTOUT,ADC5_IN1 +PortA,PA9 , , ,I2C3_SMBA , ,I2C2_SCL ,I2S3_MCK ,TIM1_CH2 ,USART1_TX ,COMP5_OUT ,TIM15_BKIN ,TIM2_CH3 , , ,HRTIM1_CHA2 ,SAI1_FS_A ,EVENTOUT,ADC5_IN2 +PortA,PA10, ,TIM17_BKIN , ,USB_CRS_SYNC ,I2C2_SMBA ,SPI2_MISO ,TIM1_CH3 ,USART1_RX ,COMP6_OUT , ,TIM2_CH4 ,TIM8_BKIN ,SAI1_D1 ,HRTIM1_CHB1 ,SAI1_SD_A ,EVENTOUT, +PortA,PA11, , , , , ,SPI2_MOSI/I2S2_SD ,TIM1_CH1N ,USART1_CTS ,COMP1_OUT ,CAN1_RX ,TIM4_CH1 ,TIM1_CH4 ,TIM1_BKIN2 ,HRTIM1_CHB2 , ,EVENTOUT, +PortA,PA12, ,TIM16_CH1 , , , ,I2SCKIN ,TIM1_CH2N ,USART1_RTS_DE ,COMP2_OUT ,CAN1_TX ,TIM4_CH2 ,TIM1_ETR , ,HRTIM1_FLT1 , ,EVENTOUT, +PortA,PA13,SWDIOJTMS ,TIM16_CH1N , ,I2C4_SCL ,I2C1_SCL ,IR_OUT , ,USART3_CTS , , ,TIM4_CH3 , , ,SAI1_SD_B , ,EVENTOUT, +PortA,PA14,SWCLKJTCK ,LPTIM1_OUT , ,I2C4_SMBA ,I2C1_SDA ,TIM8_CH2 ,TIM1_BKIN ,USART2_TX , , , , , ,SAI1_FS_B , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM8_CH1 , ,I2C1_SCL ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_RX ,UART4_RTS_DE ,TIM1_BKIN , ,CAN3_TX , ,HRTIM1_FLT2 ,TIM2_ETR ,EVENTOUT, +PortB,PB0 , , ,TIM3_CH3 , ,TIM8_CH2N , ,TIM1_CH2N , , , ,QUADSPI1_BK1_IO1 , , ,HRTIM1_FLT5 ,UCPD1_FRSTX ,EVENTOUT,ADC3_IN12/ADC1_IN15 +PortB,PB1 , , ,TIM3_CH4 , ,TIM8_CH3N , ,TIM1_CH3N , ,COMP4_OUT , ,QUADSPI1_BK1_IO0 , ,LPUART1_RTS_DE ,HRTIM1_SCOUT , ,EVENTOUT,ADC3_IN1/ADC1_IN12 +PortB,PB2 ,RTC_OUT2 ,LPTIM1_OUT ,TIM5_CH1 ,TIM20_CH1 ,I2C3_SMBA , , , , , ,QUADSPI1_BK2_IO1 , , ,HRTIM1_SCIN , ,EVENTOUT,ADC2_IN12 +PortB,PB3 ,JTDOTRACESWO,TIM2_CH2 ,TIM4_ETR ,USB_CRS_SYNC ,TIM8_CH1N ,SPI1_SCK ,SPI3_SCK/I2S3_CK ,USART2_TX , , ,TIM3_ETR ,CAN3_RX ,HRTIM1_SCOUT ,HRTIM1_EEV9 ,SAI1_SCK_B ,EVENTOUT, +PortB,PB4 ,JTRST ,TIM16_CH1 ,TIM3_CH1 , ,TIM8_CH2N ,SPI1_MISO ,SPI3_MISO ,USART2_RX ,UART5_RTS_DE , ,TIM17_BKIN ,CAN3_TX , ,HRTIM1_EEV7 ,SAI1_MCLK_B ,EVENTOUT, +PortB,PB5 , ,TIM16_BKIN ,TIM3_CH2 ,TIM8_CH3N ,I2C1_SMBA ,SPI1_MOSI ,SPI3_MOSI/I2S3_SD ,USART2_CK ,I2C3_SDA ,CAN2_RX ,TIM17_CH1 ,LPTIM1_IN1 ,SAI1_SD_B ,HRTIM1_EEV6 ,UART5_CTS ,EVENTOUT, +PortB,PB6 , ,TIM16_CH1N ,TIM4_CH1 , , ,TIM8_CH1 ,TIM8_ETR ,USART1_TX ,COMP4_OUT ,CAN2_TX ,TIM8_BKIN2 ,LPTIM1_ETR ,HRTIM1_SCIN ,HRTIM1_EEV4 ,SAI1_FS_B ,EVENTOUT, +PortB,PB7 , ,TIM17_CH1N ,TIM4_CH2 ,I2C4_SDA ,I2C1_SDA ,TIM8_BKIN , ,USART1_RX ,COMP3_OUT , ,TIM3_CH4 ,LPTIM1_IN2 ,FMC_NL ,HRTIM1_EEV3 ,UART4_CTS ,EVENTOUT, +PortB,PB8 , ,TIM16_CH1 ,TIM4_CH3 ,SAI1_CK1 ,I2C1_SCL , , ,USART3_RX ,COMP1_OUT ,CAN1_RX ,TIM8_CH2 , ,TIM1_BKIN ,HRTIM1_EEV8 ,SAI1_MCLK_A ,EVENTOUT, +PortB,PB9 , ,TIM17_CH1 ,TIM4_CH4 ,SAI1_D2 ,I2C1_SDA , ,IR_OUT ,USART3_TX ,COMP2_OUT ,CAN1_TX ,TIM8_CH3 , ,TIM1_CH3N ,HRTIM1_EEV5 ,SAI1_FS_A ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , , , , ,USART3_TX ,LPUART1_RX , ,QUADSPI1_CLK , ,TIM1_BKIN ,HRTIM1_FLT3 ,SAI1_SCK_A ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , , , , ,USART3_RX ,LPUART1_TX , ,QUADSPI1_BK1_NCS , , ,HRTIM1_FLT4 , ,EVENTOUT,ADC12_IN14 +PortB,PB12, , ,TIM5_ETR , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,TIM1_BKIN ,USART3_CK ,LPUART1_RTS_DE ,CAN2_RX , , , ,HRTIM1_CHC1 , ,EVENTOUT,ADC4_IN3/ADC1_IN11 +PortB,PB13, , , , , ,SPI2_SCK/I2S2_CK ,TIM1_CH1N ,USART3_CTS ,LPUART1_CTS ,CAN2_TX , , , ,HRTIM1_CHC2 , ,EVENTOUT,ADC3_IN5 +PortB,PB14, ,TIM15_CH1 , , , ,SPI2_MISO ,TIM1_CH2N ,USART3_RTS_DE ,COMP4_OUT , , , , ,HRTIM1_CHD1 , ,EVENTOUT,ADC4_IN4/ADC1_IN5 +PortB,PB15,RTC_REFIN ,TIM15_CH2 ,TIM15_CH1N ,COMP3_OUT ,TIM1_CH3N ,SPI2_MOSI/I2S2_SD , , , , , , , ,HRTIM1_CHD2 , ,EVENTOUT,ADC4_IN5/ADC2_IN15 +PortC,PC0 , ,LPTIM1_IN1 ,TIM1_CH1 , , , , , ,LPUART1_RX , , , , , , ,EVENTOUT,ADC12_IN6 +PortC,PC1 , ,LPTIM1_OUT ,TIM1_CH2 , , , , , ,LPUART1_TX , ,QUADSPI1_BK2_IO0 , , ,SAI1_SD_A , ,EVENTOUT,ADC12_IN7 +PortC,PC2 , ,LPTIM1_IN2 ,TIM1_CH3 ,COMP3_OUT , , ,TIM20_CH2 , , , ,QUADSPI1_BK2_IO1 , , , , ,EVENTOUT,ADC12_IN8 +PortC,PC3 , ,LPTIM1_ETR ,TIM1_CH4 ,SAI1_D1 , , ,TIM1_BKIN2 , , , ,QUADSPI1_BK2_IO2 , , ,SAI1_SD_A , ,EVENTOUT,ADC12_IN9 +PortC,PC4 , , ,TIM1_ETR , ,I2C2_SCL , , ,USART1_TX , , ,QUADSPI1_BK2_IO3 , , , , ,EVENTOUT,ADC2_IN5 +PortC,PC5 , , ,TIM15_BKIN ,SAI1_D3 , , ,TIM1_CH4N ,USART1_RX , , , , , ,HRTIM1_EEV10 , ,EVENTOUT,ADC2_IN11 +PortC,PC6 , , ,TIM3_CH1 ,HRTIM1_EEV10 ,TIM8_CH1 , ,I2S2_MCK ,COMP6_OUT ,I2C4_SCL , , , , ,HRTIM1_CHF1 , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 ,HRTIM1_FLT5 ,TIM8_CH2 , ,I2S3_MCK ,COMP5_OUT ,I2C4_SDA , , , , ,HRTIM1_CHF2 , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 ,HRTIM1_CHE1 ,TIM8_CH3 , ,TIM20_CH3 ,COMP7_OUT ,I2C3_SCL , , , , , , ,EVENTOUT, +PortC,PC9 , , ,TIM3_CH4 ,HRTIM1_CHE2 ,TIM8_CH4 ,I2SCKIN ,TIM8_BKIN2 , ,I2C3_SDA , , , , , , ,EVENTOUT, +PortC,PC10, , , , ,TIM8_CH1N ,UART4_TX ,SPI3_SCK/I2S3_CK ,USART3_TX , , , , , ,HRTIM1_FLT6 , ,EVENTOUT, +PortC,PC11, , , ,HRTIM1_EEV2 ,TIM8_CH2N ,UART4_RX ,SPI3_MISO ,USART3_RX ,I2C3_SDA , , , , , , ,EVENTOUT, +PortC,PC12, ,TIM5_CH2 , ,HRTIM1_EEV1 ,TIM8_CH3N ,UART5_TX ,SPI3_MOSI/I2S3_SD ,USART3_CK , , , , , , ,UCPD1_FRSTX ,EVENTOUT, +PortC,PC13, , ,TIM1_BKIN , ,TIM1_CH1N , ,TIM8_CH4N , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , , ,TIM8_CH4N , , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , ,TIM8_CH4 , ,TIM8_BKIN2 , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , ,TIM8_BKIN ,UART5_RX , , , , , , , , , ,EVENTOUT, +PortD,PD3 , , ,TIM2_CH1/TIM2_ETR , , , , ,USART2_CTS , , ,QUADSPI1_BK2_NCS , ,FMC_CLK , , ,EVENTOUT, +PortD,PD4 , , ,TIM2_CH2 , , , , ,USART2_RTS_DE , , ,QUADSPI1_BK2_IO0 , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , ,QUADSPI1_BK2_IO1 , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , ,TIM2_CH4 ,SAI1_D1 , , , ,USART2_RX , , ,QUADSPI1_BK2_IO2 , ,FMC_NWAIT ,SAI1_SD_A , ,EVENTOUT, +PortD,PD7 , , ,TIM2_CH3 , , , , ,USART2_CK , , ,QUADSPI1_BK2_IO3 , ,FMC_NCE/FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13 , , ,EVENTOUT,ADC4_IN12/ADC5_IN12 +PortD,PD9 , , , , , , , ,USART3_RX , , , , ,FMC_D14 , , ,EVENTOUT,ADC4_IN13/ADC5_IN13 +PortD,PD10, , , , , , , ,USART3_CK , , , , ,FMC_D15 , , ,EVENTOUT,ADC345_IN7 +PortD,PD11, ,TIM5_ETR , , ,I2C4_SMBA , , ,USART3_CTS , , , , ,FMC_A16 , , ,EVENTOUT,ADC345_IN8 +PortD,PD12, , ,TIM4_CH1 , , , , ,USART3_RTS_DE , , , , ,FMC_A17 , , ,EVENTOUT,ADC345_IN9 +PortD,PD13, , ,TIM4_CH2 , , , , , , , , , ,FMC_A18 , , ,EVENTOUT,ADC345_IN10 +PortD,PD14, , ,TIM4_CH3 , , , , , , , , , ,FMC_D0 , , ,EVENTOUT,ADC345_IN11 +PortD,PD15, , ,TIM4_CH4 , , , ,SPI2_NSS , , , , , ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR ,TIM20_CH4N ,TIM16_CH1 , ,TIM20_ETR ,USART1_TX , ,CAN1_RXFD , , ,FMC_NBL0 , , ,EVENTOUT, +PortE,PE1 , , , , ,TIM17_CH1 , ,TIM20_CH4 ,USART1_RX , , , , ,FMC_NBL1 , , ,EVENTOUT, +PortE,PE2 ,TRACECK , ,TIM3_CH1 ,SAI1_CK1 , ,SPI4_SCK ,TIM20_CH1 , , , , , ,FMC_A23 ,SAI1_MCLK_A , ,EVENTOUT, +PortE,PE3 ,TRACED0 , ,TIM3_CH2 , , ,SPI4_NSS ,TIM20_CH2 , , , , , ,FMC_A19 ,SAI1_SD_B , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,TIM3_CH3 ,SAI1_D2 , ,SPI4_NSS ,TIM20_CH1N , , , , , ,FMC_A20 ,SAI1_FS_A , ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,TIM3_CH4 ,SAI1_CK2 , ,SPI4_MISO ,TIM20_CH2N , , , , , ,FMC_A21 ,SAI1_SCK_A , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,SAI1_D1 , ,SPI4_MOSI ,TIM20_CH3N , , , , , ,FMC_A22 ,SAI1_SD_A , ,EVENTOUT, +PortE,PE7 , , ,TIM1_ETR , , , , , , , , , ,FMC_D4 ,SAI1_SD_B , ,EVENTOUT,ADC3_IN4 +PortE,PE8 , ,TIM5_CH3 ,TIM1_CH1N , , , , , , , , , ,FMC_D5 ,SAI1_SCK_B , ,EVENTOUT,ADC345_IN6 +PortE,PE9 , ,TIM5_CH4 ,TIM1_CH1 , , , , , , , , , ,FMC_D6 ,SAI1_FS_B , ,EVENTOUT,ADC3_IN2 +PortE,PE10, , ,TIM1_CH2N , , , , , , , ,QUADSPI1_CLK , ,FMC_D7 ,SAI1_MCLK_B , ,EVENTOUT,ADC345_IN14 +PortE,PE11, , ,TIM1_CH2 , , ,SPI4_NSS , , , , ,QUADSPI1_BK1_NCS , ,FMC_D8 , , ,EVENTOUT,ADC345_IN15 +PortE,PE12, , ,TIM1_CH3N , , ,SPI4_SCK , , , , ,QUADSPI1_BK1_IO0 , ,FMC_D9 , , ,EVENTOUT,ADC345_IN16 +PortE,PE13, , ,TIM1_CH3 , , ,SPI4_MISO , , , , ,QUADSPI1_BK1_IO1 , ,FMC_D10 , , ,EVENTOUT,ADC3_IN3 +PortE,PE14, , ,TIM1_CH4 , , ,SPI4_MOSI ,TIM1_BKIN2 , , , ,QUADSPI1_BK1_IO2 , ,FMC_D11 , , ,EVENTOUT,ADC4_IN1 +PortE,PE15, , ,TIM1_BKIN , , , ,TIM1_CH4N ,USART3_RX , , ,QUADSPI1_BK1_IO3 , ,FMC_D12 , , ,EVENTOUT,ADC4_IN2 +PortF,PF0 , , , , ,I2C2_SDA ,SPI2_NSS/I2S2_WS ,TIM1_CH3N , , , , , , , , ,EVENTOUT,ADC1_IN10 +PortF,PF1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , , , , ,EVENTOUT,ADC2_IN10 +PortF,PF2 , , ,TIM20_CH3 , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , ,TIM20_CH4 , ,I2C3_SCL , , , , , , , ,FMC_A3 , , ,EVENTOUT, +PortF,PF4 , , ,COMP1_OUT ,TIM20_CH1N ,I2C3_SDA , , , , , , , ,FMC_A4 , , ,EVENTOUT, +PortF,PF5 , , ,TIM20_CH2N , , , , , , , , , ,FMC_A5 , , ,EVENTOUT, +PortF,PF6 , ,TIM5_ETR ,TIM4_CH4 ,SAI1_SD_B ,I2C2_SCL , ,TIM5_CH1 ,USART3_RTS , , ,QUADSPI1_BK1_IO3 , , , , ,EVENTOUT, +PortF,PF7 , , ,TIM20_BKIN , , , ,TIM5_CH2 , , , ,QUADSPI1_BK1_IO2 , ,FMC_A1 ,SAI1_MCLK_B , ,EVENTOUT, +PortF,PF8 , , ,TIM20_BKIN2 , , , ,TIM5_CH3 , , , ,QUADSPI1_BK1_IO0 , ,FMC_A24 ,SAI1_SCK_B , ,EVENTOUT, +PortF,PF9 , , ,TIM20_BKIN ,TIM15_CH1 , ,SPI2_SCK ,TIM5_CH4 , , , ,QUADSPI1_BK1_IO1 , ,FMC_A25 ,SAI1_FS_B , ,EVENTOUT, +PortF,PF10, , ,TIM20_BKIN2 ,TIM15_CH2 , ,SPI2_SCK , , , , ,QUADSPI1_CLK , ,FMC_A0 ,SAI1_D3 , ,EVENTOUT, +PortF,PF11, , ,TIM20_ETR , , , , , , , , , ,FMC_NE4 , , ,EVENTOUT, +PortF,PF12, , ,TIM20_CH1 , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , ,TIM20_CH2 , ,I2C4_SMBA , , , , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , ,TIM20_CH3 , ,I2C4_SCL , , , , , , , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , ,TIM20_CH4 , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , ,TIM20_CH1N , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , ,TIM20_CH2N , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , ,TIM20_CH3N , , ,SPI1_SCK , , , , , , ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , ,TIM20_BKIN , ,I2C4_SCL ,SPI1_MISO ,TIM20_CH4N , , , , , ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , , ,TIM20_BKIN2 , ,I2C4_SDA ,SPI1_MOSI , , , , , , ,FMC_A14 , , ,EVENTOUT, +PortG,PG5 , , ,TIM20_ETR , , ,SPI1_NSS , , ,LPUART1_CTS , , , ,FMC_A15 , , ,EVENTOUT, +PortG,PG6 , , ,TIM20_BKIN , ,I2C3_SMBA , , , ,LPUART1_RTS_DE , , , ,FMC_INT , , ,EVENTOUT, +PortG,PG7 , , , ,SAI1_CK1 ,I2C3_SCL , , , ,LPUART1_TX , , , ,FMC_INT ,SAI1_MCLK_A , ,EVENTOUT, +PortG,PG8 , , , , ,I2C3_SDA , , , ,LPUART1_RX , , , ,FMC_NE3 , , ,EVENTOUT, +PortG,PG9 , , , , , , ,SPI3_SCK ,USART1_TX , , , , ,FMC_NCE/FMC_NE2 , ,TIM15_CH1N ,EVENTOUT, +PortG,PG10,MCO , , , , , , , , , , , , , , , ,EVENTOUT diff --git a/ports/stm32/boards/stm32h573_af.csv b/ports/stm32/boards/stm32h573_af.csv index bdc29ebe2a0a3..b47bb3c8ff0f2 100644 --- a/ports/stm32/boards/stm32h573_af.csv +++ b/ports/stm32/boards/stm32h573_af.csv @@ -1,142 +1,142 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,LPTIM1/TIM1/2/16/17,LPTIM3/PDM_SAI1/TIM3/4/5/12/15,I3C1/LPTIM2/3/LPUART1/OCTOSPI/TIM1/8,CEC/DCMI/I2C1/2/3/4/LPTIM1/2/SPI1/I2S1/TIM15/USART1,CEC/I3C1/LPTIM1/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,I2C4/OCTOSPI/SAI1/SPI3/I2S3/SPI4/UART4/12/USART10/USB_PD,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/UART7/8/12/USART1/2/3/6/10/11,LPUART1/SAI2/SDMMC1/SPI6/UART4/5/8,FDCAN1/2/FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/OCTOSPI/SDMMC2/TIM13/14,CRS/FMC[NAND16]/OCTOSPI/SAI2/SDMMC2/TIM8/USB_,ETH[MII/RMII]/FMC[NAND16]/OCTOSPI/SDMMC2/UART7/9/USB_PD,FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/FMC[SDRAM_16bit]/SDMMC1,DCMI/FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/LPTIM5,LPTIM3/4/5/6/TIM2/UART5,SYS,ADC -PortA,PA0,,TIM2_CH1,TIM5_CH1,TIM8_ETR,TIM15_BKIN,SPI6_NSS,SPI3_RDY,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI2_SD_B,ETH_MII_CRS,,,TIM2_ETR,EVENTOUT,ADC12_INP0/ADC12_INN1 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,TIM15_CH1N,LPTIM1_IN1,OCTOSPI1_DQS,USART2_RTS,UART4_RX,OCTOSPI1_IO3,SAI2_MCLK_B,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,,EVENTOUT,ADC12_INP1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,,TIM15_CH1,LPTIM1_IN2,,USART2_TX,SAI2_SCK_B,,,ETH_MDIO,,,,EVENTOUT,ADC12_INP14 -PortA,PA3,,TIM2_CH4,TIM5_CH4,OCTOSPI1_CLK,TIM15_CH2,SPI2_NSS/I2S2_WS,SAI1_SD_B,USART2_RX,,,,ETH_MII_COL,,,,EVENTOUT,ADC12_INP15 -PortA,PA4,,,TIM5_ETR,LPTIM2_CH1,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,SPI6_NSS,,,,,DCMI_HSYNC/PSSI_DE,,EVENTOUT,ADC12_INP18 -PortA,PA5,,TIM2_CH1,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,SPI6_SCK,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,,PSSI_D14,TIM2_ETR,EVENTOUT,ADC12_INP19/ADC12_INN18 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO/I2S1_SDI,OCTOSPI1_IO3,USART11_TX,SPI6_MISO,TIM13_CH1,,,,DCMI_PIXCLK/PSSI_PDCK,,EVENTOUT,ADC12_INP3 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SDO,,USART11_RX,SPI6_MOSI,TIM14_CH1,OCTOSPI1_IO2,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,FMC_NWE,,EVENTOUT,ADC12_INP7/ADC12_INN3 -PortA,PA8,MCO1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,SPI1_RDY,,USART1_CK,,,USB_SOF,UART7_RX,FMC_NOE,DCMI_D3/PSSI_D3,,EVENTOUT, -PortA,PA9,,TIM1_CH2,,LPUART1_TX,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,,,ETH_MII_TX_ER,FMC_NWE,DCMI_D0/PSSI_D0,,EVENTOUT, -PortA,PA10,,TIM1_CH3,,LPUART1_RX,LPTIM2_IN2,,UCPD1_FRSTX,USART1_RX,,FDCAN2_TX,,,SDMMC1_D0,DCMI_D1/PSSI_D1,,EVENTOUT, -PortA,PA11,,TIM1_CH4,,LPUART1_CTS,,SPI2_NSS/I2S2_WS,UART4_RX,USART1_CTS/USART1_NSS,,FDCAN1_RX,USB_DM,,,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,LPUART1_RTS,,SPI2_SCK/I2S2_CK,UART4_TX,USART1_RTS,SAI2_FS_B,FDCAN1_TX,USB_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1,LPTIM3_IN2,,HDMI_CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,SPI6_NSS,UART4_RTS,,,UART7_TX,FMC_NBL1,DCMI_D11/PSSI_D11,TIM2_ETR,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,OCTOSPI1_IO1,USART11_CK,UART4_CTS,,,ETH_MII_RXD2,,,LPTIM3_CH1,EVENTOUT,ADC12_INP9/ADC12_INN5 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,OCTOSPI1_IO0,,,,,ETH_MII_RXD3,,,LPTIM3_CH2,EVENTOUT,ADC12_INP5 -PortB,PB2,RTC_OUT2,,SAI1_D1,TIM8_CH4N,SPI1_RDY,LPTIM1_CH1,SAI1_SD_A,SPI3_MOSI/I2S3_SDO,,OCTOSPI1_CLK,OCTOSPI1_DQS,,SDMMC1_CMD,LPTIM5_ETR,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,I2C2_SDA,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,UART12_CTS/UART12_NSS,SPI6_SCK,SDMMC2_D2,CRS_SYNC,UART7_RX,,,LPTIM6_ETR,EVENTOUT, -PortB,PB4,NJTRST,TIM16_BKIN,TIM3_CH1,OCTOSPI1_CLK,LPTIM1_CH2,SPI1_MISO/I2S1_SDI,SPI3_MISO/I2S3_SDI,SPI2_NSS/I2S2_WS,SPI6_MISO,SDMMC2_D3,,UART7_TX,,DCMI_D7/PSSI_D7,,EVENTOUT, -PortB,PB5,,TIM17_BKIN,TIM3_CH2,OCTOSPI1_NCLK,I2C1_SMBA,SPI1_MOSI/I2S1_SDO,I2C4_SMBA,SPI3_MOSI/I2S3_SDO,SPI6_MOSI,FDCAN2_RX,,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10/PSSI_D10,UART5_RX,EVENTOUT, -PortB,PB6,,TIM16_CH1N,TIM4_CH1,I3C1_SCL,I2C1_SCL,HDMI_CEC,I2C4_SCL,USART1_TX,LPUART1_TX,FDCAN2_TX,OCTOSPI1_NCS,,FMC_SDNE1,DCMI_D5/PSSI_D5,UART5_TX,EVENTOUT, -PortB,PB7,,TIM17_CH1N,TIM4_CH2,I3C1_SDA,I2C1_SDA,,I2C4_SDA,USART1_RX,LPUART1_RX,FDCAN1_TX,SDMMC2_D5,SDMMC2_CKIN,FMC_NL,DCMI_VSYNC/PSSI_RDY,,EVENTOUT, -PortB,PB8,,TIM16_CH1,TIM4_CH3,I3C1_SCL,I2C1_SCL,SPI4_RDY,I2C4_SCL,SDMMC1_CKIN,UART4_RX,FDCAN1_RX,SDMMC2_D4,ETH_MII_TXD3,SDMMC1_D4,DCMI_D6/PSSI_D6,,EVENTOUT, -PortB,PB9,,TIM17_CH1,TIM4_CH4,I3C1_SDA,I2C1_SDA,SPI2_NSS/I2S2_WS,I2C4_SDA,SDMMC1_CDIR,UART4_TX,FDCAN1_TX,SDMMC2_D5,SDMMC2_CKIN,SDMMC1_D5,DCMI_D7/PSSI_D7,,EVENTOUT, -PortB,PB10,,TIM2_CH3,LPTIM3_CH1,LPTIM2_IN1,I2C2_SCL,SPI2_SCK/I2S2_CK,,USART3_TX,,OCTOSPI1_NCS,,ETH_MII_RX_ER,,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,LPTIM2_ETR,I2C2_SDA,SPI2_RDY,SPI4_RDY,USART3_RX,,,,ETH_MII_TX_EN/ETH_RMII_TX_EN,FMC_NBL1,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,OCTOSPI1_NCLK,I2C2_SDA,SPI2_NSS/I2S2_WS,UCPD1_FRSTX,USART3_CK,,FDCAN2_RX,,ETH_MII_TXD0/ETH_RMII_TXD0,,,UART5_RX,EVENTOUT, -PortB,PB13,,TIM1_CH1N,LPTIM3_IN1,LPTIM2_CH1,I2C2_SMBA,SPI2_SCK/I2S2_CK,,USART3_CTS/USART3_NSS,,FDCAN2_TX,,,SDMMC1_D0,,UART5_TX,EVENTOUT, -PortB,PB14,,TIM1_CH2N,TIM12_CH1,TIM8_CH2N,USART1_TX,SPI2_MISO/I2S2_SDI,,USART3_RTS,UART4_RTS,SDMMC2_D0,,,,,LPTIM3_ETR,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,TIM12_CH2,TIM8_CH3N,USART1_RX,SPI2_MOSI/I2S2_SDO,,USART11_CTS/USART11_NSS,UART4_CTS,SDMMC2_D1,OCTOSPI1_CLK,ETH_MII_TXD1/ETH_RMII_TXD1,,DCMI_D2/PSSI_D2,UART5_RX,EVENTOUT, -PortC,PC0,,TIM16_BKIN,,,,,SAI1_MCLK_A,SPI2_RDY,SAI2_FS_B,FMC_A25,OCTOSPI1_IO7,,FMC_SDNWE,,,EVENTOUT,ADC12_INP10 -PortC,PC1,TRACED0,,SAI1_D1,,,SPI2_MOSI/I2S2_SDO,SAI1_SD_A,USART11_RTS,SAI2_SD_A,SDMMC2_CK,OCTOSPI1_IO4,ETH_MDC,,,,EVENTOUT,ADC12_INP11/ADC12_INN10 -PortC,PC2,PWR_CSLEEP,TIM17_CH1,TIM4_CH4,,,SPI2_MISO/I2S2_SDI,OCTOSPI1_IO5,,,OCTOSPI1_IO2,,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC12_INP12/ADC12_INN11 -PortC,PC3,PWR_CSTOP,,SAI1_D3,LPTIM3_CH1,,SPI2_MOSI/I2S2_SDO,OCTOSPI1_IO6,,,OCTOSPI1_IO0,,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC12_INP13/ADC12_INN12 -PortC,PC4,,TIM2_CH4,SAI1_CK1,LPTIM2_ETR,,I2S1_MCK,,USART3_RX,,,,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,,EVENTOUT,ADC12_INP4 -PortC,PC5,,TIM1_CH4N,SAI1_D3,,PSSI_D15,,SAI1_FS_A,UART12_RTS,,,OCTOSPI1_DQS,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,,,EVENTOUT,ADC12_INP8/ADC12_INN4 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,I2S2_MCK,SAI1_SCK_A,USART6_TX,SDMMC1_D0DIR,FMC_NWAIT,SDMMC2_D6,OCTOSPI1_IO5,SDMMC1_D6,DCMI_D0/PSSI_D0,,EVENTOUT, -PortC,PC7,TRGIO,,TIM3_CH2,TIM8_CH2,,,I2S3_MCK,USART6_RX,SDMMC1_D123DIR,FMC_NE1,SDMMC2_D7,OCTOSPI1_IO6,SDMMC1_D7,DCMI_D1/PSSI_D1,,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,USART6_CK,UART5_RTS,FMC_NE2/FMC_NCE,FMC_INT,FMC_ALE,SDMMC1_D0,DCMI_D2/PSSI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,AUDIOCLK,,,UART5_CTS,OCTOSPI1_IO0,,FMC_CLE,SDMMC1_D1,DCMI_D3/PSSI_D3,,EVENTOUT, -PortC,PC10,,,LPTIM3_ETR,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,OCTOSPI1_IO1,,ETH_MII_TXD0/ETH_RMII_TXD0,SDMMC1_D2,DCMI_D8/PSSI_D8,,EVENTOUT, -PortC,PC11,,,LPTIM3_IN1,,,,SPI3_MISO/I2S3_SDI,USART3_RX,UART4_RX,OCTOSPI1_NCS,,,SDMMC1_D3,DCMI_D4/PSSI_D4,,EVENTOUT, -PortC,PC12,TRACED3,,TIM15_CH1,,,SPI6_SCK,SPI3_MOSI/I2S3_SDO,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9/PSSI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,TIM8_CH4N,,,,,UART4_RX,FDCAN1_RX,,UART9_CTS,FMC_D2/FMC_AD2,,,EVENTOUT, -PortD,PD1,,,,,,,,,UART4_TX,FDCAN1_TX,,,FMC_D3/FMC_AD3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,TIM15_BKIN,,,,UART5_RX,,,,SDMMC1_CMD,DCMI_D11/PSSI_D11,LPTIM4_ETR,EVENTOUT, -PortD,PD3,,,,,,SPI2_SCK/I2S2_CK,,USART2_CTS/USART2_NSS,,,,,FMC_CLK,DCMI_D5/PSSI_D5,,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS,,,OCTOSPI1_IO4,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,TIM1_CH4N,,,,SPI2_RDY,,USART2_TX,,FDCAN1_TX,OCTOSPI1_IO5,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,SAI1_D1,,,SPI3_MOSI/I2S3_SDO,SAI1_SD_A,USART2_RX,,,OCTOSPI1_IO6,SDMMC2_CK,FMC_NWAIT,DCMI_D10/PSSI_D10,,EVENTOUT, -PortD,PD7,,,,,,SPI1_MOSI/I2S1_SDO,,USART2_CK,,,OCTOSPI1_IO7,SDMMC2_CMD,FMC_NE1/FMC_NCE,,LPTIM4_OUT,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,FMC_D13/FMC_AD13,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,FDCAN2_RX,,,FMC_D14/FMC_AD14,,,EVENTOUT, -PortD,PD10,,,,LPTIM2_CH2,,,,USART3_CK,,,,,FMC_D15/FMC_AD15,,,EVENTOUT, -PortD,PD11,,,SAI1_CK1,LPTIM2_IN2,I2C4_SMBA,,,USART3_CTS/USART3_NSS,UART4_RX,OCTOSPI1_IO0,SAI2_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,LPTIM1_IN1,TIM4_CH1,LPTIM2_IN1,I2C4_SCL,I3C1_SCL,SAI1_D1,USART3_RTS,UART4_TX,OCTOSPI1_IO1,SAI2_FS_A,,FMC_A17/FMC_ALE,DCMI_D12/PSSI_D12,,EVENTOUT, -PortD,PD13,,LPTIM1_CH1,TIM4_CH2,LPTIM2_CH1,I2C4_SDA,I3C1_SDA,,,,OCTOSPI1_IO3,SAI2_SCK_A,UART9_RTS,FMC_A18,DCMI_D13/PSSI_D13,LPTIM4_IN1,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,UART9_RX,FMC_D0/FMC_AD0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_RTS,,,UART9_TX,FMC_D1/FMC_AD1,,,EVENTOUT, -PortE,PE0,,LPTIM1_ETR,TIM4_ETR,LPTIM2_CH2,LPTIM2_ETR,,SPI3_RDY,,UART8_RX,FDCAN1_RX,SAI2_MCLK_A,,FMC_NBL0,DCMI_D2/PSSI_D2,,EVENTOUT, -PortE,PE1,,LPTIM1_IN2,,,,,,,UART8_TX,FDCAN1_TX,,,FMC_NBL1,DCMI_D3/PSSI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,LPTIM1_IN2,SAI1_CK1,,,SPI4_SCK,SAI1_MCLK_A,USART10_RX,UART8_TX,OCTOSPI1_IO2,,ETH_MII_TXD3,FMC_A23,DCMI_D3/PSSI_D3,,EVENTOUT, -PortE,PE3,TRACED0,,,,TIM15_BKIN,,SAI1_SD_B,USART10_TX,,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,SAI1_D2,,TIM15_CH1N,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4/PSSI_D4,,EVENTOUT, -PortE,PE5,TRACED2,,SAI1_CK2,,TIM15_CH1,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6/PSSI_D6,,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,SAI1_D1,,TIM15_CH2,SPI4_MOSI,SAI1_SD_A,,,,SAI2_MCLK_B,,FMC_A22,DCMI_D7/PSSI_D7,,EVENTOUT, -PortE,PE7,,TIM1_ETR,,,,,UART12_RTS,UART7_RX,,,OCTOSPI1_IO4,,FMC_D4/FMC_AD4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,,,,UART12_CTS/UART12_NSS,UART7_TX,,,OCTOSPI1_IO5,,FMC_D5/FMC_AD5,,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,,,,UART12_RX,UART7_RTS,,,OCTOSPI1_IO6,,FMC_D6/FMC_AD6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,,,,UART12_TX,UART7_CTS,,,OCTOSPI1_IO7,,FMC_D7/FMC_AD7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,,SPI1_RDY,SPI4_NSS,OCTOSPI1_NCS,,,,SAI2_SD_B,,FMC_D8/FMC_AD8,,,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9/FMC_AD9,,,EVENTOUT, -PortE,PE13,,TIM1_CH3,,,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10/FMC_AD10,,,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCLK_B,,FMC_D11/FMC_AD11,,,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,TIM1_CH4N,,,,USART10_CK,,,,,FMC_D12/FMC_AD12,,,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,LPTIM5_CH1,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,LPTIM5_CH2,,EVENTOUT, -PortF,PF2,,,LPTIM3_CH2,LPTIM3_IN2,I2C2_SMBA,,UART12_TX,USART11_CK,,,,,FMC_A2,LPTIM5_IN1,,EVENTOUT, -PortF,PF3,,,LPTIM3_IN1,,,,,USART11_TX,,,,,FMC_A3,LPTIM5_IN2,,EVENTOUT, -PortF,PF4,,,LPTIM3_ETR,,,,,USART11_RX,,,,,FMC_A4,,,EVENTOUT, -PortF,PF5,,,LPTIM3_CH1,,I2C4_SCL,I3C1_SCL,UART12_RX,USART11_CTS/USART11_NSS,,,,,FMC_A5,,LPTIM3_IN1,EVENTOUT, -PortF,PF6,,TIM16_CH1,,,,SPI5_NSS,SAI1_SD_B,UART7_RX,,,OCTOSPI1_IO3,,,LPTIM5_CH1,,EVENTOUT, -PortF,PF7,,TIM17_CH1,,,,SPI5_SCK,SAI1_MCLK_B,UART7_TX,,,OCTOSPI1_IO2,,,LPTIM5_CH2,,EVENTOUT, -PortF,PF8,,TIM16_CH1N,,,,SPI5_MISO,SAI1_SCK_B,UART7_RTS,,TIM13_CH1,OCTOSPI1_IO0,,,LPTIM5_IN1,,EVENTOUT, -PortF,PF9,,TIM17_CH1N,,,,SPI5_MOSI,SAI1_FS_B,UART7_CTS,,TIM14_CH1,OCTOSPI1_IO1,,,LPTIM5_IN2,,EVENTOUT, -PortF,PF10,,TIM16_BKIN,SAI1_D3,,PSSI_D15,,,,,OCTOSPI1_CLK,,,,DCMI_D11/PSSI_D11,,EVENTOUT, -PortF,PF11,,,,,,SPI5_MOSI,,,,OCTOSPI1_NCLK,SAI2_SD_B,,FMC_NRAS,DCMI_D12/PSSI_D12,LPTIM6_CH1,EVENTOUT,ADC1_INP2 -PortF,PF12,,,,,,,,,,,,,FMC_A6,,LPTIM6_CH2,EVENTOUT,ADC1_INP6/ADC1_INN2 -PortF,PF13,,,,,I2C4_SMBA,,,,,,,,FMC_A7,,LPTIM6_IN1,EVENTOUT,ADC2_INP2 -PortF,PF14,,,,,,,,,,,,,FMC_A8,,LPTIM6_IN2,EVENTOUT,ADC2_INP6/ADC2_INN2 -PortF,PF15,,,,,I2C4_SDA,I3C1_SDA,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,UART9_RX,FMC_A10,,LPTIM4_IN1,EVENTOUT, -PortG,PG1,,,,,,,,SPI2_MOSI/I2S2_SDO,,,,UART9_TX,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,TIM8_BKIN,,,,UART12_RX,,,,,FMC_A12,,LPTIM6_ETR,EVENTOUT, -PortG,PG3,,,,TIM8_BKIN2,,,,UART12_TX,,,,,FMC_A13,LPTIM5_ETR,,EVENTOUT, -PortG,PG4,,TIM1_BKIN2,,,,,,,,,,,FMC_A14/FMC_BA0,,LPTIM4_ETR,EVENTOUT, -PortG,PG5,,TIM1_ETR,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,TIM17_BKIN,,I3C1_SDA,I2C4_SDA,SPI1_RDY,,,,,OCTOSPI1_NCS,UCPD1_FRSTX,FMC_NE3,DCMI_D12/PSSI_D12,,EVENTOUT, -PortG,PG7,,,SAI1_CK2,I3C1_SCL,I2C4_SCL,,SAI1_MCLK_A,USART6_CK,,,,UCPD1_FRSTX,FMC_INT,DCMI_D13/PSSI_D13,,EVENTOUT, -PortG,PG8,,,,TIM8_ETR,,SPI6_NSS,,USART6_RTS,,,,ETH_PPS_OUT,FMC_SDCLK,,,EVENTOUT, -PortG,PG9,,,,,,SPI1_MISO/I2S1_SDI,,USART6_RX,,OCTOSPI1_IO6,SAI2_FS_B,SDMMC2_D0,FMC_NE2/FMC_NCE,DCMI_VSYNC/PSSI_RDY,,EVENTOUT, -PortG,PG10,,,,,,SPI1_NSS/I2S1_WS,,,,,SAI2_SD_B,SDMMC2_D1,FMC_NE3,DCMI_D2/PSSI_D2,,EVENTOUT, -PortG,PG11,,LPTIM1_IN2,,,,SPI1_SCK/I2S1_CK,USART10_RX,USART11_RTS,,,SDMMC2_D2,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3/PSSI_D3,,EVENTOUT, -PortG,PG12,,LPTIM1_IN1,,,PSSI_D15,SPI6_MISO,USART10_TX,USART6_RTS,,,SDMMC2_D3,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_NE4,DCMI_D11/PSSI_D11,LPTIM5_CH1,EVENTOUT, -PortG,PG13,TRACED0,LPTIM1_CH1,,,,SPI6_SCK,USART10_CTS/USART10_NSS,USART6_CTS/USART6_NSS,,,SDMMC2_D6,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,LPTIM5_CH2,,EVENTOUT, -PortG,PG14,TRACED1,LPTIM1_ETR,,,LPTIM1_CH2,SPI6_MOSI,USART10_RTS,USART6_TX,,OCTOSPI1_IO7,SDMMC2_D7,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,LPTIM5_IN1,,EVENTOUT, -PortG,PG15,,,,,,SPI4_RDY,USART10_CK,USART6_CTS/USART6_NSS,,,,,FMC_NCAS,DCMI_D13/PSSI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,LPTIM1_IN2,,,,,,,,OCTOSPI1_IO4,SAI2_SCK_B,ETH_MII_CRS,FMC_SDCKE0,,,EVENTOUT, -PortH,PH3,,,,,,,,,,OCTOSPI1_IO5,SAI2_MCLK_B,ETH_MII_COL,FMC_SDNE0,,,EVENTOUT, -PortH,PH4,,,,,I2C2_SCL,SPI5_RDY,,SPI6_RDY,,,,,,PSSI_D14,,EVENTOUT, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,SPI6_RDY,,,,,FMC_SDNWE,,,EVENTOUT, -PortH,PH6,,TIM1_CH3N,TIM12_CH1,TIM8_CH1,I2C2_SMBA,SPI5_SCK,,,,,,ETH_MII_RXD2,FMC_SDNE1,DCMI_D8/PSSI_D8,,EVENTOUT, -PortH,PH7,,TIM1_CH3,,TIM8_CH1N,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9/PSSI_D9,,EVENTOUT, -PortH,PH8,,TIM1_CH2N,TIM5_ETR,TIM8_CH2,I2C3_SDA,SPI5_MOSI,,,,,,,,DCMI_HSYNC/PSSI_DE,,EVENTOUT, -PortH,PH9,,TIM1_CH2,TIM12_CH2,TIM8_CH2N,I2C3_SMBA,SPI5_NSS,,,,,,,,DCMI_D0/PSSI_D0,,EVENTOUT, -PortH,PH10,,TIM1_CH1N,TIM5_CH1,TIM8_CH3,I2C4_SMBA,SPI5_RDY,,,,,,,,DCMI_D1/PSSI_D1,,EVENTOUT, -PortH,PH11,,TIM1_CH1,TIM5_CH2,TIM8_CH3N,I2C4_SCL,I3C1_SCL,,,,,,,,DCMI_D2/PSSI_D2,,EVENTOUT, -PortH,PH12,,TIM1_BKIN,TIM5_CH3,TIM8_BKIN,I2C4_SDA,I3C1_SDA,,,,,TIM8_CH4N,,,DCMI_D3/PSSI_D3,,EVENTOUT, -PortH,PH13,,LPTIM1_IN2,,TIM8_CH1N,,,,UART8_TX,UART4_TX,FDCAN1_TX,,,,DCMI_D3/PSSI_D3,,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,UART4_RX,FDCAN1_RX,,,,DCMI_D4/PSSI_D4,,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,,DCMI_D11/PSSI_D11,,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,,,,,DCMI_D13/PSSI_D13,,EVENTOUT, -PortI,PI1,,,,TIM8_BKIN2,,SPI2_SCK/I2S2_CK,,,,,,,,DCMI_D8/PSSI_D8,,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO/I2S2_SDI,,,,,,,,DCMI_D9/PSSI_D9,,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SDO,,,,,,,,DCMI_D10/PSSI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,SPI2_RDY,,,SAI2_MCLK_A,,,DCMI_D5/PSSI_D5,,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,,DCMI_VSYNC/PSSI_RDY,,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,,DCMI_D6/PSSI_D6,,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,,DCMI_D7/PSSI_D7,,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,UART4_RX,FDCAN1_RX,,,,,,EVENTOUT, -PortI,PI10,,,,,,,,,,FDCAN1_RX,,ETH_MII_RX_ER,,PSSI_D14,,EVENTOUT, -PortI,PI11,,,,,,,,,,,,,,PSSI_D15,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,LPTIM1/TIM1/2/16/17,LPTIM3/PDM_SAI1/TIM3/4/5/12/15,I3C1/LPTIM2/3/LPUART1/OCTOSPI/TIM1/8,CEC/DCMI/I2C1/2/3/4/LPTIM1/2/SPI1/I2S1/TIM15/USART1,CEC/I3C1/LPTIM1/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,I2C4/OCTOSPI/SAI1/SPI3/I2S3/SPI4/UART4/12/USART10/USB_PD,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/UART7/8/12/USART1/2/3/6/10/11,LPUART1/SAI2/SDMMC1/SPI6/UART4/5/8,FDCAN1/2/FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/OCTOSPI/SDMMC2/TIM13/14,CRS/FMC[NAND16]/OCTOSPI/SAI2/SDMMC2/TIM8/USB_,ETH[MII/RMII]/FMC[NAND16]/OCTOSPI/SDMMC2/UART7/9/USB_PD,FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/FMC[SDRAM_16bit]/SDMMC1,DCMI/FMC[NAND16]/FMC[NORmux]/FMC[NOR_RAM]/LPTIM5,LPTIM3/4/5/6/TIM2/UART5,SYS ,ADC +PortA,PA0 , ,TIM2_CH1 ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN ,SPI6_NSS ,SPI3_RDY ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B ,ETH_MII_CRS , , ,TIM2_ETR ,EVENTOUT,ADC12_INP0/ADC12_INN1 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , ,TIM15_CH1N ,LPTIM1_IN1 ,OCTOSPI1_DQS ,USART2_RTS ,UART4_RX ,OCTOSPI1_IO3 ,SAI2_MCLK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK , , , ,EVENTOUT,ADC12_INP1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , ,TIM15_CH1 ,LPTIM1_IN2 , ,USART2_TX ,SAI2_SCK_B , , ,ETH_MDIO , , , ,EVENTOUT,ADC12_INP14 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,OCTOSPI1_CLK ,TIM15_CH2 ,SPI2_NSS/I2S2_WS ,SAI1_SD_B ,USART2_RX , , , ,ETH_MII_COL , , , ,EVENTOUT,ADC12_INP15 +PortA,PA4 , , ,TIM5_ETR ,LPTIM2_CH1 , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,SPI6_NSS , , , , ,DCMI_HSYNC/PSSI_DE , ,EVENTOUT,ADC12_INP18 +PortA,PA5 , ,TIM2_CH1 , ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,SPI6_SCK , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,PSSI_D14 ,TIM2_ETR ,EVENTOUT,ADC12_INP19/ADC12_INN18 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO/I2S1_SDI ,OCTOSPI1_IO3 ,USART11_TX ,SPI6_MISO ,TIM13_CH1 , , , ,DCMI_PIXCLK/PSSI_PDCK , ,EVENTOUT,ADC12_INP3 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI/I2S1_SDO , ,USART11_RX ,SPI6_MOSI ,TIM14_CH1 ,OCTOSPI1_IO2 ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE ,FMC_NWE , ,EVENTOUT,ADC12_INP7/ADC12_INN3 +PortA,PA8 ,MCO1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL ,SPI1_RDY , ,USART1_CK , , ,USB_SOF ,UART7_RX ,FMC_NOE ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,LPUART1_TX ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , , , ,ETH_MII_TX_ER ,FMC_NWE ,DCMI_D0/PSSI_D0 , ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , ,LPUART1_RX ,LPTIM2_IN2 , ,UCPD1_FRSTX ,USART1_RX , ,FDCAN2_TX , , ,SDMMC1_D0 ,DCMI_D1/PSSI_D1 , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , ,LPUART1_CTS , ,SPI2_NSS/I2S2_WS ,UART4_RX ,USART1_CTS/USART1_NSS , ,FDCAN1_RX ,USB_DM , , , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , ,LPUART1_RTS , ,SPI2_SCK/I2S2_CK ,UART4_TX ,USART1_RTS ,SAI2_FS_B ,FDCAN1_TX ,USB_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,LPTIM3_IN2 , ,HDMI_CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,SPI6_NSS ,UART4_RTS , , ,UART7_TX ,FMC_NBL1 ,DCMI_D11/PSSI_D11 ,TIM2_ETR ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , , ,OCTOSPI1_IO1 ,USART11_CK ,UART4_CTS , , ,ETH_MII_RXD2 , , ,LPTIM3_CH1 ,EVENTOUT,ADC12_INP9/ADC12_INN5 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,OCTOSPI1_IO0 , , , , ,ETH_MII_RXD3 , , ,LPTIM3_CH2 ,EVENTOUT,ADC12_INP5 +PortB,PB2 ,RTC_OUT2 , ,SAI1_D1 ,TIM8_CH4N ,SPI1_RDY ,LPTIM1_CH1 ,SAI1_SD_A ,SPI3_MOSI/I2S3_SDO , ,OCTOSPI1_CLK ,OCTOSPI1_DQS , ,SDMMC1_CMD ,LPTIM5_ETR , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , ,I2C2_SDA ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK ,UART12_CTS/UART12_NSS ,SPI6_SCK ,SDMMC2_D2 ,CRS_SYNC ,UART7_RX , , ,LPTIM6_ETR ,EVENTOUT, +PortB,PB4 ,NJTRST ,TIM16_BKIN ,TIM3_CH1 ,OCTOSPI1_CLK ,LPTIM1_CH2 ,SPI1_MISO/I2S1_SDI ,SPI3_MISO/I2S3_SDI ,SPI2_NSS/I2S2_WS ,SPI6_MISO ,SDMMC2_D3 , ,UART7_TX , ,DCMI_D7/PSSI_D7 , ,EVENTOUT, +PortB,PB5 , ,TIM17_BKIN ,TIM3_CH2 ,OCTOSPI1_NCLK ,I2C1_SMBA ,SPI1_MOSI/I2S1_SDO ,I2C4_SMBA ,SPI3_MOSI/I2S3_SDO ,SPI6_MOSI ,FDCAN2_RX , ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10/PSSI_D10 ,UART5_RX ,EVENTOUT, +PortB,PB6 , ,TIM16_CH1N ,TIM4_CH1 ,I3C1_SCL ,I2C1_SCL ,HDMI_CEC ,I2C4_SCL ,USART1_TX ,LPUART1_TX ,FDCAN2_TX ,OCTOSPI1_NCS , ,FMC_SDNE1 ,DCMI_D5/PSSI_D5 ,UART5_TX ,EVENTOUT, +PortB,PB7 , ,TIM17_CH1N ,TIM4_CH2 ,I3C1_SDA ,I2C1_SDA , ,I2C4_SDA ,USART1_RX ,LPUART1_RX ,FDCAN1_TX ,SDMMC2_D5 ,SDMMC2_CKIN ,FMC_NL ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortB,PB8 , ,TIM16_CH1 ,TIM4_CH3 ,I3C1_SCL ,I2C1_SCL ,SPI4_RDY ,I2C4_SCL ,SDMMC1_CKIN ,UART4_RX ,FDCAN1_RX ,SDMMC2_D4 ,ETH_MII_TXD3 ,SDMMC1_D4 ,DCMI_D6/PSSI_D6 , ,EVENTOUT, +PortB,PB9 , ,TIM17_CH1 ,TIM4_CH4 ,I3C1_SDA ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,I2C4_SDA ,SDMMC1_CDIR ,UART4_TX ,FDCAN1_TX ,SDMMC2_D5 ,SDMMC2_CKIN ,SDMMC1_D5 ,DCMI_D7/PSSI_D7 , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 ,LPTIM3_CH1 ,LPTIM2_IN1 ,I2C2_SCL ,SPI2_SCK/I2S2_CK , ,USART3_TX , ,OCTOSPI1_NCS , ,ETH_MII_RX_ER , , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , ,LPTIM2_ETR ,I2C2_SDA ,SPI2_RDY ,SPI4_RDY ,USART3_RX , , , ,ETH_MII_TX_EN/ETH_RMII_TX_EN ,FMC_NBL1 , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,OCTOSPI1_NCLK ,I2C2_SDA ,SPI2_NSS/I2S2_WS ,UCPD1_FRSTX ,USART3_CK , ,FDCAN2_RX , ,ETH_MII_TXD0/ETH_RMII_TXD0 , , ,UART5_RX ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N ,LPTIM3_IN1 ,LPTIM2_CH1 ,I2C2_SMBA ,SPI2_SCK/I2S2_CK , ,USART3_CTS/USART3_NSS , ,FDCAN2_TX , , ,SDMMC1_D0 , ,UART5_TX ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8_CH2N ,USART1_TX ,SPI2_MISO/I2S2_SDI , ,USART3_RTS ,UART4_RTS ,SDMMC2_D0 , , , , ,LPTIM3_ETR ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SDO , ,USART11_CTS/USART11_NSS ,UART4_CTS ,SDMMC2_D1 ,OCTOSPI1_CLK ,ETH_MII_TXD1/ETH_RMII_TXD1 , ,DCMI_D2/PSSI_D2 ,UART5_RX ,EVENTOUT, +PortC,PC0 , ,TIM16_BKIN , , , , ,SAI1_MCLK_A ,SPI2_RDY ,SAI2_FS_B ,FMC_A25 ,OCTOSPI1_IO7 , ,FMC_SDNWE , , ,EVENTOUT,ADC12_INP10 +PortC,PC1 ,TRACED0 , ,SAI1_D1 , , ,SPI2_MOSI/I2S2_SDO ,SAI1_SD_A ,USART11_RTS ,SAI2_SD_A ,SDMMC2_CK ,OCTOSPI1_IO4 ,ETH_MDC , , , ,EVENTOUT,ADC12_INP11/ADC12_INN10 +PortC,PC2 ,PWR_CSLEEP ,TIM17_CH1 ,TIM4_CH4 , , ,SPI2_MISO/I2S2_SDI ,OCTOSPI1_IO5 , , ,OCTOSPI1_IO2 , ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_INP12/ADC12_INN11 +PortC,PC3 ,PWR_CSTOP , ,SAI1_D3 ,LPTIM3_CH1 , ,SPI2_MOSI/I2S2_SDO ,OCTOSPI1_IO6 , , ,OCTOSPI1_IO0 , ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INP13/ADC12_INN12 +PortC,PC4 , ,TIM2_CH4 ,SAI1_CK1 ,LPTIM2_ETR , ,I2S1_MCK , ,USART3_RX , , , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_INP4 +PortC,PC5 , ,TIM1_CH4N ,SAI1_D3 , ,PSSI_D15 , ,SAI1_FS_A ,UART12_RTS , , ,OCTOSPI1_DQS ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INP8/ADC12_INN4 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 , ,I2S2_MCK ,SAI1_SCK_A ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 ,OCTOSPI1_IO5 ,SDMMC1_D6 ,DCMI_D0/PSSI_D0 , ,EVENTOUT, +PortC,PC7 ,TRGIO , ,TIM3_CH2 ,TIM8_CH2 , , ,I2S3_MCK ,USART6_RX ,SDMMC1_D123DIR ,FMC_NE1 ,SDMMC2_D7 ,OCTOSPI1_IO6 ,SDMMC1_D7 ,DCMI_D1/PSSI_D1 , ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3 ,TIM8_CH3 , , , ,USART6_CK ,UART5_RTS ,FMC_NE2/FMC_NCE ,FMC_INT ,FMC_ALE ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,AUDIOCLK , , ,UART5_CTS ,OCTOSPI1_IO0 , ,FMC_CLE ,SDMMC1_D1 ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortC,PC10, , ,LPTIM3_ETR , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,OCTOSPI1_IO1 , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,SDMMC1_D2 ,DCMI_D8/PSSI_D8 , ,EVENTOUT, +PortC,PC11, , ,LPTIM3_IN1 , , , ,SPI3_MISO/I2S3_SDI ,USART3_RX ,UART4_RX ,OCTOSPI1_NCS , , ,SDMMC1_D3 ,DCMI_D4/PSSI_D4 , ,EVENTOUT, +PortC,PC12,TRACED3 , ,TIM15_CH1 , , ,SPI6_SCK ,SPI3_MOSI/I2S3_SDO ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9/PSSI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,TIM8_CH4N , , , , ,UART4_RX ,FDCAN1_RX , ,UART9_CTS ,FMC_D2/FMC_AD2 , , ,EVENTOUT, +PortD,PD1 , , , , , , , , ,UART4_TX ,FDCAN1_TX , , ,FMC_D3/FMC_AD3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR , ,TIM15_BKIN , , , ,UART5_RX , , , ,SDMMC1_CMD ,DCMI_D11/PSSI_D11 ,LPTIM4_ETR ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_SCK/I2S2_CK , ,USART2_CTS/USART2_NSS , , , , ,FMC_CLK ,DCMI_D5/PSSI_D5 , ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS , , ,OCTOSPI1_IO4 , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , ,TIM1_CH4N , , , ,SPI2_RDY , ,USART2_TX , ,FDCAN1_TX ,OCTOSPI1_IO5 , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , ,SAI1_D1 , , ,SPI3_MOSI/I2S3_SDO ,SAI1_SD_A ,USART2_RX , , ,OCTOSPI1_IO6 ,SDMMC2_CK ,FMC_NWAIT ,DCMI_D10/PSSI_D10 , ,EVENTOUT, +PortD,PD7 , , , , , ,SPI1_MOSI/I2S1_SDO , ,USART2_CK , , ,OCTOSPI1_IO7 ,SDMMC2_CMD ,FMC_NE1/FMC_NCE , ,LPTIM4_OUT ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , ,FMC_D13/FMC_AD13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , ,FDCAN2_RX , , ,FMC_D14/FMC_AD14 , , ,EVENTOUT, +PortD,PD10, , , ,LPTIM2_CH2 , , , ,USART3_CK , , , , ,FMC_D15/FMC_AD15 , , ,EVENTOUT, +PortD,PD11, , ,SAI1_CK1 ,LPTIM2_IN2 ,I2C4_SMBA , , ,USART3_CTS/USART3_NSS ,UART4_RX ,OCTOSPI1_IO0 ,SAI2_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, ,LPTIM1_IN1 ,TIM4_CH1 ,LPTIM2_IN1 ,I2C4_SCL ,I3C1_SCL ,SAI1_D1 ,USART3_RTS ,UART4_TX ,OCTOSPI1_IO1 ,SAI2_FS_A , ,FMC_A17/FMC_ALE ,DCMI_D12/PSSI_D12 , ,EVENTOUT, +PortD,PD13, ,LPTIM1_CH1 ,TIM4_CH2 ,LPTIM2_CH1 ,I2C4_SDA ,I3C1_SDA , , , ,OCTOSPI1_IO3 ,SAI2_SCK_A ,UART9_RTS ,FMC_A18 ,DCMI_D13/PSSI_D13 ,LPTIM4_IN1 ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , ,UART8_CTS , , ,UART9_RX ,FMC_D0/FMC_AD0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , ,UART8_RTS , , ,UART9_TX ,FMC_D1/FMC_AD1 , , ,EVENTOUT, +PortE,PE0 , ,LPTIM1_ETR ,TIM4_ETR ,LPTIM2_CH2 ,LPTIM2_ETR , ,SPI3_RDY , ,UART8_RX ,FDCAN1_RX ,SAI2_MCLK_A , ,FMC_NBL0 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortE,PE1 , ,LPTIM1_IN2 , , , , , , ,UART8_TX ,FDCAN1_TX , , ,FMC_NBL1 ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK ,LPTIM1_IN2 ,SAI1_CK1 , , ,SPI4_SCK ,SAI1_MCLK_A ,USART10_RX ,UART8_TX ,OCTOSPI1_IO2 , ,ETH_MII_TXD3 ,FMC_A23 ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , ,TIM15_BKIN , ,SAI1_SD_B ,USART10_TX , , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,SAI1_D2 , ,TIM15_CH1N ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4/PSSI_D4 , ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,SAI1_CK2 , ,TIM15_CH1 ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6/PSSI_D6 , ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 ,SAI1_D1 , ,TIM15_CH2 ,SPI4_MOSI ,SAI1_SD_A , , , ,SAI2_MCLK_B , ,FMC_A22 ,DCMI_D7/PSSI_D7 , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,UART12_RTS ,UART7_RX , , ,OCTOSPI1_IO4 , ,FMC_D4/FMC_AD4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,UART12_CTS/UART12_NSS ,UART7_TX , , ,OCTOSPI1_IO5 , ,FMC_D5/FMC_AD5 , , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,UART12_RX ,UART7_RTS , , ,OCTOSPI1_IO6 , ,FMC_D6/FMC_AD6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , ,UART12_TX ,UART7_CTS , , ,OCTOSPI1_IO7 , ,FMC_D7/FMC_AD7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , ,SPI1_RDY ,SPI4_NSS ,OCTOSPI1_NCS , , , ,SAI2_SD_B , ,FMC_D8/FMC_AD8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9/FMC_AD9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10/FMC_AD10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCLK_B , ,FMC_D11/FMC_AD11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , ,TIM1_CH4N , , , ,USART10_CK , , , , ,FMC_D12/FMC_AD12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 ,LPTIM5_CH1 , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 ,LPTIM5_CH2 , ,EVENTOUT, +PortF,PF2 , , ,LPTIM3_CH2 ,LPTIM3_IN2 ,I2C2_SMBA , ,UART12_TX ,USART11_CK , , , , ,FMC_A2 ,LPTIM5_IN1 , ,EVENTOUT, +PortF,PF3 , , ,LPTIM3_IN1 , , , , ,USART11_TX , , , , ,FMC_A3 ,LPTIM5_IN2 , ,EVENTOUT, +PortF,PF4 , , ,LPTIM3_ETR , , , , ,USART11_RX , , , , ,FMC_A4 , , ,EVENTOUT, +PortF,PF5 , , ,LPTIM3_CH1 , ,I2C4_SCL ,I3C1_SCL ,UART12_RX ,USART11_CTS/USART11_NSS , , , , ,FMC_A5 , ,LPTIM3_IN1 ,EVENTOUT, +PortF,PF6 , ,TIM16_CH1 , , , ,SPI5_NSS ,SAI1_SD_B ,UART7_RX , , ,OCTOSPI1_IO3 , , ,LPTIM5_CH1 , ,EVENTOUT, +PortF,PF7 , ,TIM17_CH1 , , , ,SPI5_SCK ,SAI1_MCLK_B ,UART7_TX , , ,OCTOSPI1_IO2 , , ,LPTIM5_CH2 , ,EVENTOUT, +PortF,PF8 , ,TIM16_CH1N , , , ,SPI5_MISO ,SAI1_SCK_B ,UART7_RTS , ,TIM13_CH1 ,OCTOSPI1_IO0 , , ,LPTIM5_IN1 , ,EVENTOUT, +PortF,PF9 , ,TIM17_CH1N , , , ,SPI5_MOSI ,SAI1_FS_B ,UART7_CTS , ,TIM14_CH1 ,OCTOSPI1_IO1 , , ,LPTIM5_IN2 , ,EVENTOUT, +PortF,PF10, ,TIM16_BKIN ,SAI1_D3 , ,PSSI_D15 , , , , ,OCTOSPI1_CLK , , , ,DCMI_D11/PSSI_D11 , ,EVENTOUT, +PortF,PF11, , , , , ,SPI5_MOSI , , , ,OCTOSPI1_NCLK ,SAI2_SD_B , ,FMC_NRAS ,DCMI_D12/PSSI_D12 ,LPTIM6_CH1 ,EVENTOUT,ADC1_INP2 +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , ,LPTIM6_CH2 ,EVENTOUT,ADC1_INP6/ADC1_INN2 +PortF,PF13, , , , ,I2C4_SMBA , , , , , , , ,FMC_A7 , ,LPTIM6_IN1 ,EVENTOUT,ADC2_INP2 +PortF,PF14, , , , , , , , , , , , ,FMC_A8 , ,LPTIM6_IN2 ,EVENTOUT,ADC2_INP6/ADC2_INN2 +PortF,PF15, , , , ,I2C4_SDA ,I3C1_SDA , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , ,UART9_RX ,FMC_A10 , ,LPTIM4_IN1 ,EVENTOUT, +PortG,PG1 , , , , , , , ,SPI2_MOSI/I2S2_SDO , , , ,UART9_TX ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , ,TIM8_BKIN , , , ,UART12_RX , , , , ,FMC_A12 , ,LPTIM6_ETR ,EVENTOUT, +PortG,PG3 , , , ,TIM8_BKIN2 , , , ,UART12_TX , , , , ,FMC_A13 ,LPTIM5_ETR , ,EVENTOUT, +PortG,PG4 , ,TIM1_BKIN2 , , , , , , , , , , ,FMC_A14/FMC_BA0 , ,LPTIM4_ETR ,EVENTOUT, +PortG,PG5 , ,TIM1_ETR , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , ,TIM17_BKIN , ,I3C1_SDA ,I2C4_SDA ,SPI1_RDY , , , , ,OCTOSPI1_NCS ,UCPD1_FRSTX ,FMC_NE3 ,DCMI_D12/PSSI_D12 , ,EVENTOUT, +PortG,PG7 , , ,SAI1_CK2 ,I3C1_SCL ,I2C4_SCL , ,SAI1_MCLK_A ,USART6_CK , , , ,UCPD1_FRSTX ,FMC_INT ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortG,PG8 , , , ,TIM8_ETR , ,SPI6_NSS , ,USART6_RTS , , , ,ETH_PPS_OUT ,FMC_SDCLK , , ,EVENTOUT, +PortG,PG9 , , , , , ,SPI1_MISO/I2S1_SDI , ,USART6_RX , ,OCTOSPI1_IO6 ,SAI2_FS_B ,SDMMC2_D0 ,FMC_NE2/FMC_NCE ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortG,PG10, , , , , ,SPI1_NSS/I2S1_WS , , , , ,SAI2_SD_B ,SDMMC2_D1 ,FMC_NE3 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortG,PG11, ,LPTIM1_IN2 , , , ,SPI1_SCK/I2S1_CK ,USART10_RX ,USART11_RTS , , ,SDMMC2_D2 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortG,PG12, ,LPTIM1_IN1 , , ,PSSI_D15 ,SPI6_MISO ,USART10_TX ,USART6_RTS , , ,SDMMC2_D3 ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_NE4 ,DCMI_D11/PSSI_D11 ,LPTIM5_CH1 ,EVENTOUT, +PortG,PG13,TRACED0 ,LPTIM1_CH1 , , , ,SPI6_SCK ,USART10_CTS/USART10_NSS ,USART6_CTS/USART6_NSS , , ,SDMMC2_D6 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 ,LPTIM5_CH2 , ,EVENTOUT, +PortG,PG14,TRACED1 ,LPTIM1_ETR , , ,LPTIM1_CH2 ,SPI6_MOSI ,USART10_RTS ,USART6_TX , ,OCTOSPI1_IO7 ,SDMMC2_D7 ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 ,LPTIM5_IN1 , ,EVENTOUT, +PortG,PG15, , , , , ,SPI4_RDY ,USART10_CK ,USART6_CTS/USART6_NSS , , , , ,FMC_NCAS ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , ,LPTIM1_IN2 , , , , , , , ,OCTOSPI1_IO4 ,SAI2_SCK_B ,ETH_MII_CRS ,FMC_SDCKE0 , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,OCTOSPI1_IO5 ,SAI2_MCLK_B ,ETH_MII_COL ,FMC_SDNE0 , , ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL ,SPI5_RDY , ,SPI6_RDY , , , , , ,PSSI_D14 , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , ,SPI6_RDY , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , ,TIM1_CH3N ,TIM12_CH1 ,TIM8_CH1 ,I2C2_SMBA ,SPI5_SCK , , , , , ,ETH_MII_RXD2 ,FMC_SDNE1 ,DCMI_D8/PSSI_D8 , ,EVENTOUT, +PortH,PH7 , ,TIM1_CH3 , ,TIM8_CH1N ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9/PSSI_D9 , ,EVENTOUT, +PortH,PH8 , ,TIM1_CH2N ,TIM5_ETR ,TIM8_CH2 ,I2C3_SDA ,SPI5_MOSI , , , , , , , ,DCMI_HSYNC/PSSI_DE , ,EVENTOUT, +PortH,PH9 , ,TIM1_CH2 ,TIM12_CH2 ,TIM8_CH2N ,I2C3_SMBA ,SPI5_NSS , , , , , , , ,DCMI_D0/PSSI_D0 , ,EVENTOUT, +PortH,PH10, ,TIM1_CH1N ,TIM5_CH1 ,TIM8_CH3 ,I2C4_SMBA ,SPI5_RDY , , , , , , , ,DCMI_D1/PSSI_D1 , ,EVENTOUT, +PortH,PH11, ,TIM1_CH1 ,TIM5_CH2 ,TIM8_CH3N ,I2C4_SCL ,I3C1_SCL , , , , , , , ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortH,PH12, ,TIM1_BKIN ,TIM5_CH3 ,TIM8_BKIN ,I2C4_SDA ,I3C1_SDA , , , , ,TIM8_CH4N , , ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortH,PH13, ,LPTIM1_IN2 , ,TIM8_CH1N , , , ,UART8_TX ,UART4_TX ,FDCAN1_TX , , , ,DCMI_D3/PSSI_D3 , ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , ,UART4_RX ,FDCAN1_RX , , , ,DCMI_D4/PSSI_D4 , ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , , ,DCMI_D11/PSSI_D11 , ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4 , , ,SPI2_NSS/I2S2_WS , , , , , , , ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,SPI2_SCK/I2S2_CK , , , , , , , ,DCMI_D8/PSSI_D8 , ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO/I2S2_SDI , , , , , , , ,DCMI_D9/PSSI_D9 , ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SDO , , , , , , , ,DCMI_D10/PSSI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , ,SPI2_RDY , , ,SAI2_MCLK_A , , ,DCMI_D5/PSSI_D5 , ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , , ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , , ,DCMI_D6/PSSI_D6 , ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , , ,DCMI_D7/PSSI_D7 , ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , ,UART4_RX ,FDCAN1_RX , , , , , ,EVENTOUT, +PortI,PI10, , , , , , , , , ,FDCAN1_RX , ,ETH_MII_RX_ER , ,PSSI_D14 , ,EVENTOUT, +PortI,PI11, , , , , , , , , , , , , ,PSSI_D15 , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32h723_af.csv b/ports/stm32/boards/stm32h723_af.csv index 701e9381b209f..aa873797863cd 100644 --- a/ports/stm32/boards/stm32h723_af.csv +++ b/ports/stm32/boards/stm32h723_af.csv @@ -1,116 +1,116 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,FMC/LPTIM1/SAI4/TIM16/17/TIM1x/TIM2x,FDCAN3/PDM_SAI1/TIM3/4/5/12/15,DFSDM1/LCD/LPTIM2/3/4/5/LPUART1/OCTOSPIM_P1/2/TIM8,CEC/DCMI/PSSI/DFSDM1/I2C1/2/3/4/5/LPTIM2/OCTOSPIM_P1/TIM15/USART1/10,CEC/FDCAN3/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,DFSDM1/I2C4/5/OCTOSPIM_P1/SAI1/SPI3/I2S3/UART4,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/UART7/USART1/2/3/6,LPUART1/SAI4/SDMMC1/SPDIFRX1/SPI6/UART4/5/8,FDCAN1/2/FMC/LCD/OCTOSPIM_P1/2/SAI4/SDMMC2/SPDIFRX1/TIM13/14,CRS/FMC/LCD/OCTOSPIM_P1/OTG1_FS/OTG1_HS/SAI4/SDMMC2/TIM8,DFSDM1/ETH/I2C4/LCD/MDIOS/OCTOSPIM_P1/SDMMC2/SWPMI1/TIM1x/TIM8/UART7/9/USART10,FMC/LCD/MDIOS/OCTOSPIM_P1/SDMMC1/TIM1x/TIM8,COMP/DCMI/PSSI/LCD/TIM1x/TIM23,LCD/TIM24/UART5,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,TIM15_BKIN,SPI6_NSS/I2S6_WS,,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI4_SD_B,ETH_MII_CRS,FMC_A19,,,EVENTOUT,ADC1_INP16 -PortA,PA1,,TIM2_CH2,TIM5_CH2,LPTIM3_OUT,TIM15_CH1N,,,USART2_RTS/USART2_DE,UART4_RX,OCTOSPIM_P1_IO3,SAI4_MCLK_B,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,OCTOSPIM_P1_DQS,,LCD_R2,EVENTOUT,ADC1_INP17/ADC1_INN16 -PortA,PA2,,TIM2_CH3,TIM5_CH3,LPTIM4_OUT,TIM15_CH1,,OCTOSPIM_P1_IO0,USART2_TX,SAI4_SCK_B,,,ETH_MDIO,MDIOS_MDIO,,LCD_R1,EVENTOUT,ADC12_INP14 -PortA,PA3,,TIM2_CH4,TIM5_CH4,LPTIM5_OUT,TIM15_CH2,I2S6_MCK,OCTOSPIM_P1_IO2,USART2_RX,,LCD_B2,OTG_HS_ULPI_D0,ETH_MII_COL,OCTOSPIM_P1_CLK,,LCD_B5,EVENTOUT,ADC12_INP15 -PortA,PA4,D1PWREN,,TIM5_ETR,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,SPI6_NSS/I2S6_WS,,,,FMC_D8/FMC_AD8,DCMI_HSYNC/PSSI_DE,LCD_VSYNC,EVENTOUT,ADC12_INP18 -PortA,PA5,D2PWREN,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,SPI6_SCK/I2S6_CK,,OTG_HS_ULPI_CK,,FMC_D9/FMC_AD9,PSSI_D14,LCD_R4,EVENTOUT,ADC12_INP19/ADC12_INN18 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO/I2S1_SDI,OCTOSPIM_P1_IO3,,SPI6_MISO/I2S6_SDI,TIM13_CH1,TIM8_BKIN_COMP12,MDIOS_MDC,TIM1_BKIN_COMP12,DCMI_PIXCLK/PSSI_PDCK,LCD_G2,EVENTOUT,ADC12_INP3 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SDO,,,SPI6_MOSI/I2S6_SDO,TIM14_CH1,OCTOSPIM_P1_IO2,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,,LCD_VSYNC,EVENTOUT,ADC12_INP7/ADC12_INN3 -PortA,PA8,MCO1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,,I2C5_SCL,USART1_CK,,,OTG_HS_SOF,UART7_RX,TIM8_BKIN2_COMP12,LCD_B3,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,,LPUART1_TX,I2C3_SMBA,SPI2_SCK/I2S2_CK,I2C5_SMBA,USART1_TX,,,,ETH_TX_ER,,DCMI_D0/PSSI_D0,LCD_R5,EVENTOUT, -PortA,PA10,,TIM1_CH3,,LPUART1_RX,,,,USART1_RX,,,OTG_HS_ID,MDIOS_MDIO,LCD_B4,DCMI_D1/PSSI_D1,LCD_B1,EVENTOUT, -PortA,PA11,,TIM1_CH4,,LPUART1_CTS,,SPI2_NSS/I2S2_WS,UART4_RX,USART1_CTS/USART1_NSS,,FDCAN1_RX,,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,,LPUART1_RTS/LPUART1_DE,,SPI2_SCK/I2S2_CK,UART4_TX,USART1_RTS/USART1_DE,SAI4_FS_B,FDCAN1_TX,,,TIM1_BKIN2,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,,,CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,SPI6_NSS/I2S6_WS,UART4_RTS/UART4_DE,LCD_R3,,UART7_TX,,,LCD_B6,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,OCTOSPIM_P1_IO1,,DFSDM1_CKOUT,,UART4_CTS,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,LCD_G1,EVENTOUT,ADC12_INP9/ADC12_INN5 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,OCTOSPIM_P1_IO0,,DFSDM1_DATIN1,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,LCD_G0,EVENTOUT,ADC12_INP5 -PortB,PB2,RTC_OUT,SAI4_D1,SAI1_D1,,DFSDM1_CKIN1,,SAI1_SD_A,SPI3_MOSI/I2S3_SDO,SAI4_SD_A,OCTOSPIM_P1_CLK,OCTOSPIM_P1_DQS,ETH_TX_ER,,TIM23_ETR,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,SPI6_SCK/I2S6_CK,SDMMC2_D2,CRS_SYNC,UART7_RX,,,TIM24_ETR,EVENTOUT, -PortB,PB4,NJTRST,TIM16_BKIN,TIM3_CH1,,,SPI1_MISO/I2S1_SDI,SPI3_MISO/I2S3_SDI,SPI2_NSS/I2S2_WS,SPI6_MISO/I2S6_SDI,SDMMC2_D3,,UART7_TX,,,,EVENTOUT, -PortB,PB5,,TIM17_BKIN,TIM3_CH2,LCD_B5,I2C1_SMBA,SPI1_MOSI/I2S1_SDO,I2C4_SMBA,SPI3_MOSI/I2S3_SDO,SPI6_MOSI/I2S6_SDO,FDCAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10/PSSI_D10,UART5_RX,EVENTOUT, -PortB,PB6,,TIM16_CH1N,TIM4_CH1,,I2C1_SCL,CEC,I2C4_SCL,USART1_TX,LPUART1_TX,FDCAN2_TX,OCTOSPIM_P1_NCS,DFSDM1_DATIN5,FMC_SDNE1,DCMI_D5/PSSI_D5,UART5_TX,EVENTOUT, -PortB,PB7,,TIM17_CH1N,TIM4_CH2,,I2C1_SDA,,I2C4_SDA,USART1_RX,LPUART1_RX,,,DFSDM1_CKIN5,FMC_NL,DCMI_VSYNC/PSSI_RDY,,EVENTOUT, -PortB,PB8,,TIM16_CH1,TIM4_CH3,DFSDM1_CKIN7,I2C1_SCL,,I2C4_SCL,SDMMC1_CKIN,UART4_RX,FDCAN1_RX,SDMMC2_D4,ETH_MII_TXD3,SDMMC1_D4,DCMI_D6/PSSI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,TIM17_CH1,TIM4_CH4,DFSDM1_DATIN7,I2C1_SDA,SPI2_NSS/I2S2_WS,I2C4_SDA,SDMMC1_CDIR,UART4_TX,FDCAN1_TX,SDMMC2_D5,I2C4_SMBA,SDMMC1_D5,DCMI_D7/PSSI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,,LPTIM2_IN1,I2C2_SCL,SPI2_SCK/I2S2_CK,DFSDM1_DATIN7,USART3_TX,,OCTOSPIM_P1_NCS,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,,LPTIM2_ETR,I2C2_SDA,,DFSDM1_CKIN7,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,OCTOSPIM_P1_NCLK,I2C2_SMBA,SPI2_NSS/I2S2_WS,DFSDM1_DATIN1,USART3_CK,,FDCAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OCTOSPIM_P1_IO0,TIM1_BKIN_COMP12,UART5_RX,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,LPTIM2_OUT,OCTOSPIM_P1_IO2,SPI2_SCK/I2S2_CK,DFSDM1_CKIN1,USART3_CTS/USART3_NSS,,FDCAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,SDMMC1_D0,DCMI_D2/PSSI_D2,UART5_TX,EVENTOUT, -PortB,PB14,,TIM1_CH2N,TIM12_CH1,TIM8_CH2N,USART1_TX,SPI2_MISO/I2S2_SDI,DFSDM1_DATIN2,USART3_RTS/USART3_DE,UART4_RTS/UART4_DE,SDMMC2_D0,,,FMC_D10/FMC_AD10,,LCD_CLK,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,TIM12_CH2,TIM8_CH3N,USART1_RX,SPI2_MOSI/I2S2_SDO,DFSDM1_CKIN2,,UART4_CTS,SDMMC2_D1,,,FMC_D11/FMC_AD11,,LCD_G7,EVENTOUT, -PortC,PC0,,FMC_D12/FMC_AD12,,DFSDM1_CKIN0,,,DFSDM1_DATIN4,,SAI4_FS_B,FMC_A25,OTG_HS_ULPI_STP,LCD_G2,FMC_SDNWE,,LCD_R5,EVENTOUT,ADC123_INP10 -PortC,PC1,TRACED0,SAI4_D1,SAI1_D1,DFSDM1_DATIN0,DFSDM1_CKIN4,SPI2_MOSI/I2S2_SDO,SAI1_SD_A,,SAI4_SD_A,SDMMC2_CK,OCTOSPIM_P1_IO4,ETH_MDC,MDIOS_MDC,,LCD_G5,EVENTOUT,ADC123_INP11/ADC123_INN10 -PortC,PC2,PWR_DEEPSLEEP,,,DFSDM1_CKIN1,OCTOSPIM_P1_IO5,SPI2_MISO/I2S2_SDI,DFSDM1_CKOUT,,,OCTOSPIM_P1_IO2,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_INP12/ADC123_INN11 -PortC,PC3,PWR_SLEEP,,,DFSDM1_DATIN1,OCTOSPIM_P1_IO6,SPI2_MOSI/I2S2_SDO,,,,OCTOSPIM_P1_IO0,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC123_INP13/ADC123_INN12 -PortC,PC4,PWR_DEEPSLEEP,FMC_A22,,DFSDM1_CKIN2,,I2S1_MCK,,,,SPDIFRX1_IN3,SDMMC2_CKIN,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,LCD_R7,EVENTOUT,ADC12_INP4 -PortC,PC5,PWR_SLEEP,SAI4_D3,SAI1_D3,DFSDM1_DATIN2,PSSI_D15,,,,,SPDIFRX1_IN4,OCTOSPIM_P1_DQS,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,COMP1_OUT,LCD_DE,EVENTOUT,ADC12_INP8/ADC12_INN4 -PortC,PC6,,,TIM3_CH1,TIM8_CH1,DFSDM1_CKIN3,I2S2_MCK,,USART6_TX,SDMMC1_D0DIR,FMC_NWAIT,SDMMC2_D6,,SDMMC1_D6,DCMI_D0/PSSI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,DBTRGIO,,TIM3_CH2,TIM8_CH2,DFSDM1_DATIN3,,I2S3_MCK,USART6_RX,SDMMC1_D123DIR,FMC_NE1,SDMMC2_D7,SWPMI_TX,SDMMC1_D7,DCMI_D1/PSSI_D1,LCD_G6,EVENTOUT, -PortC,PC8,TRACED1,,TIM3_CH3,TIM8_CH3,,,,USART6_CK,UART5_RTS/UART5_DE,FMC_NE2/FMC_NCE,FMC_INT,SWPMI_RX,SDMMC1_D0,DCMI_D2/PSSI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,I2C5_SDA,,UART5_CTS,OCTOSPIM_P1_IO0,LCD_G3,SWPMI_SUSPEND,SDMMC1_D1,DCMI_D3/PSSI_D3,LCD_B2,EVENTOUT, -PortC,PC10,,,,DFSDM1_CKIN5,I2C5_SDA,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,OCTOSPIM_P1_IO1,LCD_B1,SWPMI_RX,SDMMC1_D2,DCMI_D8/PSSI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,,DFSDM1_DATIN5,I2C5_SCL,,SPI3_MISO/I2S3_SDI,USART3_RX,UART4_RX,OCTOSPIM_P1_NCS,,,SDMMC1_D3,DCMI_D4/PSSI_D4,LCD_B4,EVENTOUT, -PortC,PC12,TRACED3,FMC_D6/FMC_AD6,TIM15_CH1,,I2C5_SMBA,SPI6_SCK/I2S6_CK,SPI3_MOSI/I2S3_SDO,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9/PSSI_D9,LCD_R6,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,DFSDM1_CKIN6,,,,,UART4_RX,FDCAN1_RX,,UART9_CTS,FMC_D2/FMC_AD2,,LCD_B1,EVENTOUT, -PortD,PD1,,,,DFSDM1_DATIN6,,,,,UART4_TX,FDCAN1_TX,,,FMC_D3/FMC_AD3,,,EVENTOUT, -PortD,PD2,TRACED2,FMC_D7/FMC_AD7,TIM3_ETR,,TIM15_BKIN,,,,UART5_RX,LCD_B7,,,SDMMC1_CMD,DCMI_D11/PSSI_D11,LCD_B2,EVENTOUT, -PortD,PD3,,,,DFSDM1_CKOUT,,SPI2_SCK/I2S2_CK,,USART2_CTS/USART2_NSS,,,,,FMC_CLK,DCMI_D5/PSSI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,,,,,,USART2_RTS/USART2_DE,,,OCTOSPIM_P1_IO4,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,OCTOSPIM_P1_IO5,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,SAI4_D1,SAI1_D1,DFSDM1_CKIN4,DFSDM1_DATIN1,SPI3_MOSI/I2S3_SDO,SAI1_SD_A,USART2_RX,SAI4_SD_A,,OCTOSPIM_P1_IO6,SDMMC2_CK,FMC_NWAIT,DCMI_D10/PSSI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,DFSDM1_DATIN4,,SPI1_MOSI/I2S1_SDO,DFSDM1_CKIN1,USART2_CK,,SPDIFRX1_IN1,OCTOSPIM_P1_IO7,SDMMC2_CMD,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,DFSDM1_CKIN3,,,,USART3_TX,,SPDIFRX1_IN2,,,FMC_D13/FMC_AD13,,,EVENTOUT, -PortD,PD9,,,,DFSDM1_DATIN3,,,,USART3_RX,,,,,FMC_D14/FMC_AD14,,,EVENTOUT, -PortD,PD10,,,,DFSDM1_CKOUT,,,,USART3_CK,,,,,FMC_D15/FMC_AD15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,LPTIM2_IN2,I2C4_SMBA,,,USART3_CTS/USART3_NSS,,OCTOSPIM_P1_IO0,SAI4_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT, -PortD,PD12,,LPTIM1_IN1,TIM4_CH1,LPTIM2_IN1,I2C4_SCL,FDCAN3_RX,,USART3_RTS/USART3_DE,,OCTOSPIM_P1_IO1,SAI4_FS_A,,FMC_A17/FMC_ALE,DCMI_D12/PSSI_D12,,EVENTOUT, -PortD,PD13,,LPTIM1_OUT,TIM4_CH2,,I2C4_SDA,FDCAN3_TX,,,,OCTOSPIM_P1_IO3,SAI4_SCK_A,UART9_RTS/UART9_DE,FMC_A18,DCMI_D13/PSSI_D13,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,UART9_RX,FMC_D0/FMC_AD0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_RTS/UART8_DE,,,UART9_TX,FMC_D1/FMC_AD1,,,EVENTOUT, -PortE,PE0,,LPTIM1_ETR,TIM4_ETR,,LPTIM2_ETR,,,,UART8_RX,,SAI4_MCLK_A,,FMC_NBL0,DCMI_D2/PSSI_D2,LCD_R0,EVENTOUT, -PortE,PE1,,LPTIM1_IN2,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3/PSSI_D3,LCD_R6,EVENTOUT, -PortE,PE2,TRACECLK,,SAI1_CK1,,USART10_RX,SPI4_SCK,SAI1_MCLK_A,,SAI4_MCLK_A,OCTOSPIM_P1_IO2,SAI4_CK1,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,TIM15_BKIN,,SAI1_SD_B,,SAI4_SD_B,,,USART10_TX,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,SAI1_D2,DFSDM1_DATIN3,TIM15_CH1N,SPI4_NSS,SAI1_FS_A,,SAI4_FS_A,,SAI4_D2,,FMC_A20,DCMI_D4/PSSI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,SAI1_CK2,DFSDM1_CKIN3,TIM15_CH1,SPI4_MISO,SAI1_SCK_A,,SAI4_SCK_A,,SAI4_CK2,,FMC_A21,DCMI_D6/PSSI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,SAI1_D1,,TIM15_CH2,SPI4_MOSI,SAI1_SD_A,,SAI4_SD_A,SAI4_D1,SAI4_MCLK_B,TIM1_BKIN2_COMP12,FMC_A22,DCMI_D7/PSSI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,DFSDM1_DATIN2,,,,UART7_RX,,,OCTOSPIM_P1_IO4,,FMC_D4/FMC_AD4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,DFSDM1_CKIN2,,,,UART7_TX,,,OCTOSPIM_P1_IO5,,FMC_D5/FMC_AD5,COMP2_OUT,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,DFSDM1_CKOUT,,,,UART7_RTS/UART7_DE,,,OCTOSPIM_P1_IO6,,FMC_D6/FMC_AD6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,DFSDM1_DATIN4,,,,UART7_CTS,,,OCTOSPIM_P1_IO7,,FMC_D7/FMC_AD7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,DFSDM1_CKIN4,,SPI4_NSS,,,,,SAI4_SD_B,OCTOSPIM_P1_NCS,FMC_D8/FMC_AD8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,DFSDM1_DATIN5,,SPI4_SCK,,,,,SAI4_SCK_B,,FMC_D9/FMC_AD9,COMP1_OUT,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,DFSDM1_CKIN5,,SPI4_MISO,,,,,SAI4_FS_B,,FMC_D10/FMC_AD10,COMP2_OUT,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI4_MCLK_B,,FMC_D11/FMC_AD11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,USART10_CK,FMC_D12/FMC_AD12,TIM1_BKIN_COMP12,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,I2C5_SDA,,,OCTOSPIM_P2_IO0,,,FMC_A0,TIM23_CH1,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,I2C5_SCL,,,OCTOSPIM_P2_IO1,,,FMC_A1,TIM23_CH2,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,I2C5_SMBA,,,OCTOSPIM_P2_IO2,,,FMC_A2,TIM23_CH3,,EVENTOUT, -PortF,PF3,,,,,,,,,,OCTOSPIM_P2_IO3,,,FMC_A3,TIM23_CH4,,EVENTOUT,ADC3_INP5 -PortF,PF4,,,,,,,,,,OCTOSPIM_P2_CLK,,,FMC_A4,,,EVENTOUT,ADC3_INP9/ADC3_INN5 -PortF,PF5,,,,,,,,,,OCTOSPIM_P2_NCLK,,,FMC_A5,,,EVENTOUT,ADC3_INP4 -PortF,PF6,,TIM16_CH1,FDCAN3_RX,,,SPI5_NSS,SAI1_SD_B,UART7_RX,SAI4_SD_B,,OCTOSPIM_P1_IO3,,,TIM23_CH1,,EVENTOUT,ADC3_INP8/ADC3_INN4 -PortF,PF7,,TIM17_CH1,FDCAN3_TX,,,SPI5_SCK,SAI1_MCLK_B,UART7_TX,SAI4_MCLK_B,,OCTOSPIM_P1_IO2,,,TIM23_CH2,,EVENTOUT,ADC3_INP3 -PortF,PF8,,TIM16_CH1N,,,,SPI5_MISO,SAI1_SCK_B,UART7_RTS/UART7_DE,SAI4_SCK_B,TIM13_CH1,OCTOSPIM_P1_IO0,,,TIM23_CH3,,EVENTOUT,ADC3_INP7/ADC3_INN3 -PortF,PF9,,TIM17_CH1N,,,,SPI5_MOSI,SAI1_FS_B,UART7_CTS,SAI4_FS_B,TIM14_CH1,OCTOSPIM_P1_IO1,,,TIM23_CH4,,EVENTOUT,ADC3_INP2 -PortF,PF10,,TIM16_BKIN,SAI1_D3,,PSSI_D15,,,,,OCTOSPIM_P1_CLK,SAI4_D3,,,DCMI_D11/PSSI_D11,LCD_DE,EVENTOUT,ADC3_INP6/ADC3_INN2 -PortF,PF11,,,,,,SPI5_MOSI,,,,OCTOSPIM_P1_NCLK,SAI4_SD_B,,FMC_NRAS,DCMI_D12/PSSI_D12,TIM24_CH1,EVENTOUT,ADC1_INP2 -PortF,PF12,,,,,,,,,,OCTOSPIM_P2_DQS,,,FMC_A6,,TIM24_CH2,EVENTOUT,ADC1_INP5/ADC1_INN2 -PortF,PF13,,,,DFSDM1_DATIN6,I2C4_SMBA,,,,,,,,FMC_A7,,TIM24_CH3,EVENTOUT,ADC2_INP2 -PortF,PF14,,,,DFSDM1_CKIN6,I2C4_SCL,,,,,,,,FMC_A8,,TIM24_CH4,EVENTOUT,ADC2_INP6/ADC2_INN2 -PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,OCTOSPIM_P2_IO4,,UART9_RX,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,OCTOSPIM_P2_IO5,,UART9_TX,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,TIM8_BKIN,,,,,,,,TIM8_BKIN_COMP12,FMC_A12,,TIM24_ETR,EVENTOUT, -PortG,PG3,,,,TIM8_BKIN2,,,,,,,,TIM8_BKIN2_COMP12,FMC_A13,TIM23_ETR,,EVENTOUT, -PortG,PG4,,TIM1_BKIN2,,,,,,,,,,TIM1_BKIN2_COMP12,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,TIM1_ETR,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,TIM17_BKIN,,,,,,,,,OCTOSPIM_P1_NCS,,FMC_NE3,DCMI_D12/PSSI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,,,,,SAI1_MCLK_A,USART6_CK,,OCTOSPIM_P2_DQS,,,FMC_INT,DCMI_D13/PSSI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,TIM8_ETR,,SPI6_NSS/I2S6_WS,,USART6_RTS/USART6_DE,SPDIFRX1_IN3,,,ETH_PPS_OUT,FMC_SDCLK,,LCD_G7,EVENTOUT, -PortG,PG9,,,FDCAN3_TX,,,SPI1_MISO/I2S1_SDI,,USART6_RX,SPDIFRX1_IN4,OCTOSPIM_P1_IO6,SAI4_FS_B,SDMMC2_D0,FMC_NE2/FMC_NCE,DCMI_VSYNC/PSSI_RDY,,EVENTOUT, -PortG,PG10,,,FDCAN3_RX,OCTOSPIM_P2_IO6,,SPI1_NSS/I2S1_WS,,,,LCD_G3,SAI4_SD_B,SDMMC2_D1,FMC_NE3,DCMI_D2/PSSI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,LPTIM1_IN2,,,USART10_RX,SPI1_SCK/I2S1_CK,,,SPDIFRX1_IN1,OCTOSPIM_P2_IO7,SDMMC2_D2,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3/PSSI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,LPTIM1_IN1,,OCTOSPIM_P2_NCS,USART10_TX,SPI6_MISO/I2S6_SDI,,USART6_RTS/USART6_DE,SPDIFRX1_IN2,LCD_B4,SDMMC2_D3,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_NE4,TIM23_CH1,LCD_B1,EVENTOUT, -PortG,PG13,TRACED0,LPTIM1_OUT,,,USART10_CTS/USART10_NSS,SPI6_SCK/I2S6_CK,,USART6_CTS/USART6_NSS,,,SDMMC2_D6,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,TIM23_CH2,LCD_R0,EVENTOUT, -PortG,PG14,TRACED1,LPTIM1_ETR,,,USART10_RTS/USART10_DE,SPI6_MOSI/I2S6_SDO,,USART6_TX,,OCTOSPIM_P1_IO7,SDMMC2_D7,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,TIM23_CH3,LCD_B0,EVENTOUT, -PortG,PG15,,,,,,,,USART6_CTS/USART6_NSS,,OCTOSPIM_P2_DQS,,USART10_CK,FMC_NCAS,DCMI_D13/PSSI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,FMC/LPTIM1/SAI4/TIM16/17/TIM1x/TIM2x,FDCAN3/PDM_SAI1/TIM3/4/5/12/15,DFSDM1/LCD/LPTIM2/3/4/5/LPUART1/OCTOSPIM_P1/2/TIM8,CEC/DCMI/PSSI/DFSDM1/I2C1/2/3/4/5/LPTIM2/OCTOSPIM_P1/TIM15/USART1/10,CEC/FDCAN3/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/6,DFSDM1/I2C4/5/OCTOSPIM_P1/SAI1/SPI3/I2S3/UART4,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/UART7/USART1/2/3/6,LPUART1/SAI4/SDMMC1/SPDIFRX1/SPI6/UART4/5/8,FDCAN1/2/FMC/LCD/OCTOSPIM_P1/2/SAI4/SDMMC2/SPDIFRX1/TIM13/14,CRS/FMC/LCD/OCTOSPIM_P1/OTG1_FS/OTG1_HS/SAI4/SDMMC2/TIM8,DFSDM1/ETH/I2C4/LCD/MDIOS/OCTOSPIM_P1/SDMMC2/SWPMI1/TIM1x/TIM8/UART7/9/USART10,FMC/LCD/MDIOS/OCTOSPIM_P1/SDMMC1/TIM1x/TIM8,COMP/DCMI/PSSI/LCD/TIM1x/TIM23,LCD/TIM24/UART5,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN ,SPI6_NSS/I2S6_WS , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI4_SD_B ,ETH_MII_CRS ,FMC_A19 , , ,EVENTOUT,ADC1_INP16 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_RTS/USART2_DE ,UART4_RX ,OCTOSPIM_P1_IO3 ,SAI4_MCLK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK ,OCTOSPIM_P1_DQS , ,LCD_R2 ,EVENTOUT,ADC1_INP17/ADC1_INN16 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,LPTIM4_OUT ,TIM15_CH1 , ,OCTOSPIM_P1_IO0 ,USART2_TX ,SAI4_SCK_B , , ,ETH_MDIO ,MDIOS_MDIO , ,LCD_R1 ,EVENTOUT,ADC12_INP14 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,LPTIM5_OUT ,TIM15_CH2 ,I2S6_MCK ,OCTOSPIM_P1_IO2 ,USART2_RX , ,LCD_B2 ,OTG_HS_ULPI_D0 ,ETH_MII_COL ,OCTOSPIM_P1_CLK , ,LCD_B5 ,EVENTOUT,ADC12_INP15 +PortA,PA4 ,D1PWREN , ,TIM5_ETR , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,SPI6_NSS/I2S6_WS , , , ,FMC_D8/FMC_AD8 ,DCMI_HSYNC/PSSI_DE ,LCD_VSYNC ,EVENTOUT,ADC12_INP18 +PortA,PA5 ,D2PWREN ,TIM2_CH1/TIM2_ETR , ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,SPI6_SCK/I2S6_CK , ,OTG_HS_ULPI_CK , ,FMC_D9/FMC_AD9 ,PSSI_D14 ,LCD_R4 ,EVENTOUT,ADC12_INP19/ADC12_INN18 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO/I2S1_SDI ,OCTOSPIM_P1_IO3 , ,SPI6_MISO/I2S6_SDI ,TIM13_CH1 ,TIM8_BKIN_COMP12 ,MDIOS_MDC ,TIM1_BKIN_COMP12 ,DCMI_PIXCLK/PSSI_PDCK ,LCD_G2 ,EVENTOUT,ADC12_INP3 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI/I2S1_SDO , , ,SPI6_MOSI/I2S6_SDO ,TIM14_CH1 ,OCTOSPIM_P1_IO2 ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE , ,LCD_VSYNC ,EVENTOUT,ADC12_INP7/ADC12_INN3 +PortA,PA8 ,MCO1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , ,I2C5_SCL ,USART1_CK , , ,OTG_HS_SOF ,UART7_RX ,TIM8_BKIN2_COMP12 ,LCD_B3 ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,LPUART1_TX ,I2C3_SMBA ,SPI2_SCK/I2S2_CK ,I2C5_SMBA ,USART1_TX , , , ,ETH_TX_ER , ,DCMI_D0/PSSI_D0 ,LCD_R5 ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , ,LPUART1_RX , , , ,USART1_RX , , ,OTG_HS_ID ,MDIOS_MDIO ,LCD_B4 ,DCMI_D1/PSSI_D1 ,LCD_B1 ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , ,LPUART1_CTS , ,SPI2_NSS/I2S2_WS ,UART4_RX ,USART1_CTS/USART1_NSS , ,FDCAN1_RX , , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , ,LPUART1_RTS/LPUART1_DE , ,SPI2_SCK/I2S2_CK ,UART4_TX ,USART1_RTS/USART1_DE ,SAI4_FS_B ,FDCAN1_TX , , ,TIM1_BKIN2 , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR , , ,CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,SPI6_NSS/I2S6_WS ,UART4_RTS/UART4_DE ,LCD_R3 , ,UART7_TX , , ,LCD_B6 ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N ,OCTOSPIM_P1_IO1 , ,DFSDM1_CKOUT , ,UART4_CTS ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , ,LCD_G1 ,EVENTOUT,ADC12_INP9/ADC12_INN5 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N ,OCTOSPIM_P1_IO0 , ,DFSDM1_DATIN1 , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , ,LCD_G0 ,EVENTOUT,ADC12_INP5 +PortB,PB2 ,RTC_OUT ,SAI4_D1 ,SAI1_D1 , ,DFSDM1_CKIN1 , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SDO ,SAI4_SD_A ,OCTOSPIM_P1_CLK ,OCTOSPIM_P1_DQS ,ETH_TX_ER , ,TIM23_ETR , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , ,SPI6_SCK/I2S6_CK ,SDMMC2_D2 ,CRS_SYNC ,UART7_RX , , ,TIM24_ETR ,EVENTOUT, +PortB,PB4 ,NJTRST ,TIM16_BKIN ,TIM3_CH1 , , ,SPI1_MISO/I2S1_SDI ,SPI3_MISO/I2S3_SDI ,SPI2_NSS/I2S2_WS ,SPI6_MISO/I2S6_SDI ,SDMMC2_D3 , ,UART7_TX , , , ,EVENTOUT, +PortB,PB5 , ,TIM17_BKIN ,TIM3_CH2 ,LCD_B5 ,I2C1_SMBA ,SPI1_MOSI/I2S1_SDO ,I2C4_SMBA ,SPI3_MOSI/I2S3_SDO ,SPI6_MOSI/I2S6_SDO ,FDCAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10/PSSI_D10 ,UART5_RX ,EVENTOUT, +PortB,PB6 , ,TIM16_CH1N ,TIM4_CH1 , ,I2C1_SCL ,CEC ,I2C4_SCL ,USART1_TX ,LPUART1_TX ,FDCAN2_TX ,OCTOSPIM_P1_NCS ,DFSDM1_DATIN5 ,FMC_SDNE1 ,DCMI_D5/PSSI_D5 ,UART5_TX ,EVENTOUT, +PortB,PB7 , ,TIM17_CH1N ,TIM4_CH2 , ,I2C1_SDA , ,I2C4_SDA ,USART1_RX ,LPUART1_RX , , ,DFSDM1_CKIN5 ,FMC_NL ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortB,PB8 , ,TIM16_CH1 ,TIM4_CH3 ,DFSDM1_CKIN7 ,I2C1_SCL , ,I2C4_SCL ,SDMMC1_CKIN ,UART4_RX ,FDCAN1_RX ,SDMMC2_D4 ,ETH_MII_TXD3 ,SDMMC1_D4 ,DCMI_D6/PSSI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , ,TIM17_CH1 ,TIM4_CH4 ,DFSDM1_DATIN7 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,I2C4_SDA ,SDMMC1_CDIR ,UART4_TX ,FDCAN1_TX ,SDMMC2_D5 ,I2C4_SMBA ,SDMMC1_D5 ,DCMI_D7/PSSI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , ,LPTIM2_IN1 ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,DFSDM1_DATIN7 ,USART3_TX , ,OCTOSPIM_P1_NCS ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , ,LPTIM2_ETR ,I2C2_SDA , ,DFSDM1_CKIN7 ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,OCTOSPIM_P1_NCLK ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,DFSDM1_DATIN1 ,USART3_CK , ,FDCAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OCTOSPIM_P1_IO0 ,TIM1_BKIN_COMP12 ,UART5_RX ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , ,LPTIM2_OUT ,OCTOSPIM_P1_IO2 ,SPI2_SCK/I2S2_CK ,DFSDM1_CKIN1 ,USART3_CTS/USART3_NSS , ,FDCAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 ,UART5_TX ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8_CH2N ,USART1_TX ,SPI2_MISO/I2S2_SDI ,DFSDM1_DATIN2 ,USART3_RTS/USART3_DE ,UART4_RTS/UART4_DE ,SDMMC2_D0 , , ,FMC_D10/FMC_AD10 , ,LCD_CLK ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SDO ,DFSDM1_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , ,FMC_D11/FMC_AD11 , ,LCD_G7 ,EVENTOUT, +PortC,PC0 , ,FMC_D12/FMC_AD12 , ,DFSDM1_CKIN0 , , ,DFSDM1_DATIN4 , ,SAI4_FS_B ,FMC_A25 ,OTG_HS_ULPI_STP ,LCD_G2 ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_INP10 +PortC,PC1 ,TRACED0 ,SAI4_D1 ,SAI1_D1 ,DFSDM1_DATIN0 ,DFSDM1_CKIN4 ,SPI2_MOSI/I2S2_SDO ,SAI1_SD_A , ,SAI4_SD_A ,SDMMC2_CK ,OCTOSPIM_P1_IO4 ,ETH_MDC ,MDIOS_MDC , ,LCD_G5 ,EVENTOUT,ADC123_INP11/ADC123_INN10 +PortC,PC2 ,PWR_DEEPSLEEP, , ,DFSDM1_CKIN1 ,OCTOSPIM_P1_IO5 ,SPI2_MISO/I2S2_SDI ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INP12/ADC123_INN11 +PortC,PC3 ,PWR_SLEEP , , ,DFSDM1_DATIN1 ,OCTOSPIM_P1_IO6 ,SPI2_MOSI/I2S2_SDO , , , ,OCTOSPIM_P1_IO0 ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_INP13/ADC123_INN12 +PortC,PC4 ,PWR_DEEPSLEEP,FMC_A22 , ,DFSDM1_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX1_IN3 ,SDMMC2_CKIN ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , ,LCD_R7 ,EVENTOUT,ADC12_INP4 +PortC,PC5 ,PWR_SLEEP ,SAI4_D3 ,SAI1_D3 ,DFSDM1_DATIN2 ,PSSI_D15 , , , , ,SPDIFRX1_IN4 ,OCTOSPIM_P1_DQS ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 ,COMP1_OUT ,LCD_DE ,EVENTOUT,ADC12_INP8/ADC12_INN4 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,DFSDM1_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0/PSSI_D0 ,LCD_HSYNC ,EVENTOUT, +PortC,PC7 ,DBTRGIO , ,TIM3_CH2 ,TIM8_CH2 ,DFSDM1_DATIN3 , ,I2S3_MCK ,USART6_RX ,SDMMC1_D123DIR ,FMC_NE1 ,SDMMC2_D7 ,SWPMI_TX ,SDMMC1_D7 ,DCMI_D1/PSSI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 ,TRACED1 , ,TIM3_CH3 ,TIM8_CH3 , , , ,USART6_CK ,UART5_RTS/UART5_DE ,FMC_NE2/FMC_NCE ,FMC_INT ,SWPMI_RX ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN ,I2C5_SDA , ,UART5_CTS ,OCTOSPIM_P1_IO0 ,LCD_G3 ,SWPMI_SUSPEND ,SDMMC1_D1 ,DCMI_D3/PSSI_D3 ,LCD_B2 ,EVENTOUT, +PortC,PC10, , , ,DFSDM1_CKIN5 ,I2C5_SDA , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,OCTOSPIM_P1_IO1 ,LCD_B1 ,SWPMI_RX ,SDMMC1_D2 ,DCMI_D8/PSSI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , , ,DFSDM1_DATIN5 ,I2C5_SCL , ,SPI3_MISO/I2S3_SDI ,USART3_RX ,UART4_RX ,OCTOSPIM_P1_NCS , , ,SDMMC1_D3 ,DCMI_D4/PSSI_D4 ,LCD_B4 ,EVENTOUT, +PortC,PC12,TRACED3 ,FMC_D6/FMC_AD6 ,TIM15_CH1 , ,I2C5_SMBA ,SPI6_SCK/I2S6_CK ,SPI3_MOSI/I2S3_SDO ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9/PSSI_D9 ,LCD_R6 ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,DFSDM1_CKIN6 , , , , ,UART4_RX ,FDCAN1_RX , ,UART9_CTS ,FMC_D2/FMC_AD2 , ,LCD_B1 ,EVENTOUT, +PortD,PD1 , , , ,DFSDM1_DATIN6 , , , , ,UART4_TX ,FDCAN1_TX , , ,FMC_D3/FMC_AD3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 ,FMC_D7/FMC_AD7 ,TIM3_ETR , ,TIM15_BKIN , , , ,UART5_RX ,LCD_B7 , , ,SDMMC1_CMD ,DCMI_D11/PSSI_D11 ,LCD_B2 ,EVENTOUT, +PortD,PD3 , , , ,DFSDM1_CKOUT , ,SPI2_SCK/I2S2_CK , ,USART2_CTS/USART2_NSS , , , , ,FMC_CLK ,DCMI_D5/PSSI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_RTS/USART2_DE , , ,OCTOSPIM_P1_IO4 , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , ,OCTOSPIM_P1_IO5 , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , ,SAI4_D1 ,SAI1_D1 ,DFSDM1_CKIN4 ,DFSDM1_DATIN1 ,SPI3_MOSI/I2S3_SDO ,SAI1_SD_A ,USART2_RX ,SAI4_SD_A , ,OCTOSPIM_P1_IO6 ,SDMMC2_CK ,FMC_NWAIT ,DCMI_D10/PSSI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , ,DFSDM1_DATIN4 , ,SPI1_MOSI/I2S1_SDO ,DFSDM1_CKIN1 ,USART2_CK , ,SPDIFRX1_IN1 ,OCTOSPIM_P1_IO7 ,SDMMC2_CMD ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , ,DFSDM1_CKIN3 , , , ,USART3_TX , ,SPDIFRX1_IN2 , , ,FMC_D13/FMC_AD13 , , ,EVENTOUT, +PortD,PD9 , , , ,DFSDM1_DATIN3 , , , ,USART3_RX , , , , ,FMC_D14/FMC_AD14 , , ,EVENTOUT, +PortD,PD10, , , ,DFSDM1_CKOUT , , , ,USART3_CK , , , , ,FMC_D15/FMC_AD15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , ,LPTIM2_IN2 ,I2C4_SMBA , , ,USART3_CTS/USART3_NSS , ,OCTOSPIM_P1_IO0 ,SAI4_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, ,LPTIM1_IN1 ,TIM4_CH1 ,LPTIM2_IN1 ,I2C4_SCL ,FDCAN3_RX , ,USART3_RTS/USART3_DE , ,OCTOSPIM_P1_IO1 ,SAI4_FS_A , ,FMC_A17/FMC_ALE ,DCMI_D12/PSSI_D12 , ,EVENTOUT, +PortD,PD13, ,LPTIM1_OUT ,TIM4_CH2 , ,I2C4_SDA ,FDCAN3_TX , , , ,OCTOSPIM_P1_IO3 ,SAI4_SCK_A ,UART9_RTS/UART9_DE ,FMC_A18 ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , ,UART8_CTS , , ,UART9_RX ,FMC_D0/FMC_AD0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , ,UART8_RTS/UART8_DE , , ,UART9_TX ,FMC_D1/FMC_AD1 , , ,EVENTOUT, +PortE,PE0 , ,LPTIM1_ETR ,TIM4_ETR , ,LPTIM2_ETR , , , ,UART8_RX , ,SAI4_MCLK_A , ,FMC_NBL0 ,DCMI_D2/PSSI_D2 ,LCD_R0 ,EVENTOUT, +PortE,PE1 , ,LPTIM1_IN2 , , , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3/PSSI_D3 ,LCD_R6 ,EVENTOUT, +PortE,PE2 ,TRACECLK , ,SAI1_CK1 , ,USART10_RX ,SPI4_SCK ,SAI1_MCLK_A , ,SAI4_MCLK_A ,OCTOSPIM_P1_IO2 ,SAI4_CK1 ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , ,TIM15_BKIN , ,SAI1_SD_B , ,SAI4_SD_B , , ,USART10_TX ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,SAI1_D2 ,DFSDM1_DATIN3 ,TIM15_CH1N ,SPI4_NSS ,SAI1_FS_A , ,SAI4_FS_A , ,SAI4_D2 , ,FMC_A20 ,DCMI_D4/PSSI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,SAI1_CK2 ,DFSDM1_CKIN3 ,TIM15_CH1 ,SPI4_MISO ,SAI1_SCK_A , ,SAI4_SCK_A , ,SAI4_CK2 , ,FMC_A21 ,DCMI_D6/PSSI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 ,SAI1_D1 , ,TIM15_CH2 ,SPI4_MOSI ,SAI1_SD_A , ,SAI4_SD_A ,SAI4_D1 ,SAI4_MCLK_B ,TIM1_BKIN2_COMP12 ,FMC_A22 ,DCMI_D7/PSSI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , ,DFSDM1_DATIN2 , , , ,UART7_RX , , ,OCTOSPIM_P1_IO4 , ,FMC_D4/FMC_AD4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , ,DFSDM1_CKIN2 , , , ,UART7_TX , , ,OCTOSPIM_P1_IO5 , ,FMC_D5/FMC_AD5 ,COMP2_OUT , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , ,DFSDM1_CKOUT , , , ,UART7_RTS/UART7_DE , , ,OCTOSPIM_P1_IO6 , ,FMC_D6/FMC_AD6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , ,DFSDM1_DATIN4 , , , ,UART7_CTS , , ,OCTOSPIM_P1_IO7 , ,FMC_D7/FMC_AD7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , ,DFSDM1_CKIN4 , ,SPI4_NSS , , , , ,SAI4_SD_B ,OCTOSPIM_P1_NCS ,FMC_D8/FMC_AD8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , ,DFSDM1_DATIN5 , ,SPI4_SCK , , , , ,SAI4_SCK_B , ,FMC_D9/FMC_AD9 ,COMP1_OUT ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , ,DFSDM1_CKIN5 , ,SPI4_MISO , , , , ,SAI4_FS_B , ,FMC_D10/FMC_AD10 ,COMP2_OUT ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI4_MCLK_B , ,FMC_D11/FMC_AD11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , ,USART10_CK ,FMC_D12/FMC_AD12 ,TIM1_BKIN_COMP12 ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , ,I2C5_SDA , , ,OCTOSPIM_P2_IO0 , , ,FMC_A0 ,TIM23_CH1 , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , ,I2C5_SCL , , ,OCTOSPIM_P2_IO1 , , ,FMC_A1 ,TIM23_CH2 , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , ,I2C5_SMBA , , ,OCTOSPIM_P2_IO2 , , ,FMC_A2 ,TIM23_CH3 , ,EVENTOUT, +PortF,PF3 , , , , , , , , , ,OCTOSPIM_P2_IO3 , , ,FMC_A3 ,TIM23_CH4 , ,EVENTOUT,ADC3_INP5 +PortF,PF4 , , , , , , , , , ,OCTOSPIM_P2_CLK , , ,FMC_A4 , , ,EVENTOUT,ADC3_INP9/ADC3_INN5 +PortF,PF5 , , , , , , , , , ,OCTOSPIM_P2_NCLK , , ,FMC_A5 , , ,EVENTOUT,ADC3_INP4 +PortF,PF6 , ,TIM16_CH1 ,FDCAN3_RX , , ,SPI5_NSS ,SAI1_SD_B ,UART7_RX ,SAI4_SD_B , ,OCTOSPIM_P1_IO3 , , ,TIM23_CH1 , ,EVENTOUT,ADC3_INP8/ADC3_INN4 +PortF,PF7 , ,TIM17_CH1 ,FDCAN3_TX , , ,SPI5_SCK ,SAI1_MCLK_B ,UART7_TX ,SAI4_MCLK_B , ,OCTOSPIM_P1_IO2 , , ,TIM23_CH2 , ,EVENTOUT,ADC3_INP3 +PortF,PF8 , ,TIM16_CH1N , , , ,SPI5_MISO ,SAI1_SCK_B ,UART7_RTS/UART7_DE ,SAI4_SCK_B ,TIM13_CH1 ,OCTOSPIM_P1_IO0 , , ,TIM23_CH3 , ,EVENTOUT,ADC3_INP7/ADC3_INN3 +PortF,PF9 , ,TIM17_CH1N , , , ,SPI5_MOSI ,SAI1_FS_B ,UART7_CTS ,SAI4_FS_B ,TIM14_CH1 ,OCTOSPIM_P1_IO1 , , ,TIM23_CH4 , ,EVENTOUT,ADC3_INP2 +PortF,PF10, ,TIM16_BKIN ,SAI1_D3 , ,PSSI_D15 , , , , ,OCTOSPIM_P1_CLK ,SAI4_D3 , , ,DCMI_D11/PSSI_D11 ,LCD_DE ,EVENTOUT,ADC3_INP6/ADC3_INN2 +PortF,PF11, , , , , ,SPI5_MOSI , , , ,OCTOSPIM_P1_NCLK ,SAI4_SD_B , ,FMC_NRAS ,DCMI_D12/PSSI_D12 ,TIM24_CH1 ,EVENTOUT,ADC1_INP2 +PortF,PF12, , , , , , , , , ,OCTOSPIM_P2_DQS , , ,FMC_A6 , ,TIM24_CH2 ,EVENTOUT,ADC1_INP5/ADC1_INN2 +PortF,PF13, , , ,DFSDM1_DATIN6 ,I2C4_SMBA , , , , , , , ,FMC_A7 , ,TIM24_CH3 ,EVENTOUT,ADC2_INP2 +PortF,PF14, , , ,DFSDM1_CKIN6 ,I2C4_SCL , , , , , , , ,FMC_A8 , ,TIM24_CH4 ,EVENTOUT,ADC2_INP6/ADC2_INN2 +PortF,PF15, , , , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,OCTOSPIM_P2_IO4 , ,UART9_RX ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,OCTOSPIM_P2_IO5 , ,UART9_TX ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , ,TIM8_BKIN , , , , , , , ,TIM8_BKIN_COMP12 ,FMC_A12 , ,TIM24_ETR ,EVENTOUT, +PortG,PG3 , , , ,TIM8_BKIN2 , , , , , , , ,TIM8_BKIN2_COMP12 ,FMC_A13 ,TIM23_ETR , ,EVENTOUT, +PortG,PG4 , ,TIM1_BKIN2 , , , , , , , , , ,TIM1_BKIN2_COMP12 ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , ,TIM1_ETR , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , ,TIM17_BKIN , , , , , , , , ,OCTOSPIM_P1_NCS , ,FMC_NE3 ,DCMI_D12/PSSI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , , , , , ,SAI1_MCLK_A ,USART6_CK , ,OCTOSPIM_P2_DQS , , ,FMC_INT ,DCMI_D13/PSSI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , ,TIM8_ETR , ,SPI6_NSS/I2S6_WS , ,USART6_RTS/USART6_DE ,SPDIFRX1_IN3 , , ,ETH_PPS_OUT ,FMC_SDCLK , ,LCD_G7 ,EVENTOUT, +PortG,PG9 , , ,FDCAN3_TX , , ,SPI1_MISO/I2S1_SDI , ,USART6_RX ,SPDIFRX1_IN4 ,OCTOSPIM_P1_IO6 ,SAI4_FS_B ,SDMMC2_D0 ,FMC_NE2/FMC_NCE ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortG,PG10, , ,FDCAN3_RX ,OCTOSPIM_P2_IO6 , ,SPI1_NSS/I2S1_WS , , , ,LCD_G3 ,SAI4_SD_B ,SDMMC2_D1 ,FMC_NE3 ,DCMI_D2/PSSI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, ,LPTIM1_IN2 , , ,USART10_RX ,SPI1_SCK/I2S1_CK , , ,SPDIFRX1_IN1 ,OCTOSPIM_P2_IO7 ,SDMMC2_D2 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3/PSSI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, ,LPTIM1_IN1 , ,OCTOSPIM_P2_NCS ,USART10_TX ,SPI6_MISO/I2S6_SDI , ,USART6_RTS/USART6_DE ,SPDIFRX1_IN2 ,LCD_B4 ,SDMMC2_D3 ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_NE4 ,TIM23_CH1 ,LCD_B1 ,EVENTOUT, +PortG,PG13,TRACED0 ,LPTIM1_OUT , , ,USART10_CTS/USART10_NSS ,SPI6_SCK/I2S6_CK , ,USART6_CTS/USART6_NSS , , ,SDMMC2_D6 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 ,TIM23_CH2 ,LCD_R0 ,EVENTOUT, +PortG,PG14,TRACED1 ,LPTIM1_ETR , , ,USART10_RTS/USART10_DE ,SPI6_MOSI/I2S6_SDO , ,USART6_TX , ,OCTOSPIM_P1_IO7 ,SDMMC2_D7 ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 ,TIM23_CH3 ,LCD_B0 ,EVENTOUT, +PortG,PG15, , , , , , , ,USART6_CTS/USART6_NSS , ,OCTOSPIM_P2_DQS , ,USART10_CK ,FMC_NCAS ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32h743_af.csv b/ports/stm32/boards/stm32h743_af.csv index 4b8ef6afdd69a..2287209c49001 100644 --- a/ports/stm32/boards/stm32h743_af.csv +++ b/ports/stm32/boards/stm32h743_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS,TIM1/2/16/17/LPTIM1/HRTIM1,SAI1/TIM3/4/5/12/HRTIM1,LPUART/TIM8/LPTIM2/3/4/5/HRTIM1/DFSDM,I2C1/2/3/4/USART1/TIM15/LPTIM2/DFSDM/CEC,SPI1/2/3/4/5/6/CEC,SPI2/3/SAI1/3/I2C4/UART4/DFSDM,SPI2/3/6/USART1/2/3/6/UART7/SDMMC1,SPI6/SAI2/4/UART4/5/8/LPUART/SDMMC1/SPDIFRX,SAI4/FDCAN1/2/TIM13/14/QUADSPI/FMC/SDMMC2/LCD/SPDIFRX,SAI2/4/TIM8/QUADSPI/SDMMC2/OTG1_HS/OTG2_FS/LCD,I2C4/UART7/SWPMI1/TIM1/8/DFSDM/SDMMC2/MDIOS/ETH,TIM1/8/FMC/SDMMC1/MDIOS/OTG1_FS/LCD,TIM1/DCMI/LCD/COMP,UART5/LCD,SYS,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,TIM15_BKIN,,,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI2_SD_B,ETH_MII_CRS,,,,EVENTOUT,ADC1_INP16/ADC12_INN1/ADC12_INP0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,LPTIM3_OUT,TIM15_CH1N,,,USART2_RTS,UART4_RX,QUADSPI_BK1_IO3,SAI2_MCK_B,ETH_MII_RX_CLK/ETH_RMII_REF_CLK,,,LCD_R2,EVENTOUT,ADC1_INN16/ADC1_INP17/ADC12_INP1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,LPTIM4_OUT,TIM15_CH1,,,USART2_TX,SAI2_SCK_B,,,ETH_MDIO,MDIOS_MDIO,,LCD_R1,EVENTOUT,ADC12_INP14 -PortA,PA3,,TIM2_CH4,TIM5_CH4,LPTIM5_OUT,TIM15_CH2,,,USART2_RX,,LCD_B2,OTG_HS_ULPI_D0,ETH_MII_COL,,,LCD_B5,EVENTOUT,ADC12_INP15 -PortA,PA4,,,TIM5_ETR,,,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,USART2_CK,SPI6_NSS,,,,OTG_HS_SOF,DCMI_HSYNC,LCD_VSYNC,EVENTOUT,ADC12_INP18 -PortA,PA5,,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,SPI1_SCK/I2S1_CK,,,SPI6_SCK,,OTG_HS_ULPI_CK,,,,LCD_R4,EVENTOUT,ADC12_INN18/ADC12_INP19 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO/I2S1_SDI,,,SPI6_MISO,TIM13_CH1,TIM8_BKIN_COMP12,MDIOS_MDC,TIM1_BKIN_COMP12,DCMI_PIXCLK,LCD_G2,EVENTOUT,ADC12_INP3 -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI/I2S1_SDO,,,SPI6_MOSI,TIM14_CH1,,ETH_MII_RX_DV/ETH_RMII_CRS_DV,FMC_SDNWE,,,EVENTOUT,ADC12_INN3/ADC12_INP7 -PortA,PA8,MCO1,TIM1_CH1,HRTIM_CHB2,TIM8_BKIN2,I2C3_SCL,,,USART1_CK,,,OTG_FS_SOF,UART7_RX,TIM8_BKIN2_COMP12,LCD_B3,LCD_R6,EVENTOUT, -PortA,PA9,,TIM1_CH2,HRTIM_CHC1,LPUART1_TX,I2C3_SMBA,SPI2_SCK/I2S2_CK,,USART1_TX,,CAN1_RXFD,,ETH_TX_ER,,DCMI_D0,LCD_R5,EVENTOUT, -PortA,PA10,,TIM1_CH3,HRTIM_CHC2,LPUART1_RX,,,,USART1_RX,,CAN1_TXFD,OTG_FS_ID,MDIOS_MDIO,LCD_B4,DCMI_D1,LCD_B1,EVENTOUT, -PortA,PA11,,TIM1_CH4,HRTIM_CHD1,LPUART1_CTS,,SPI2_NSS/I2S2_WS,UART4_RX,USART1_CTS/USART1_NSS,,CAN1_RX,OTG_FS_DM,,,,LCD_R4,EVENTOUT, -PortA,PA12,,TIM1_ETR,HRTIM_CHD2,LPUART1_RTS,,SPI2_SCK/I2S2_CK,UART4_TX,USART1_RTS,SAI2_FS_B,CAN1_TX,OTG_FS_DP,,,,LCD_R5,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1/TIM2_ETR,HRTIM_FLT1,,HDMI_CEC,SPI1_NSS/I2S1_WS,SPI3_NSS/I2S3_WS,SPI6_NSS,UART4_RTS,,,UART7_TX,,,,EVENTOUT, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,DFSDM_CKOUT,,UART4_CTS,LCD_R3,OTG_HS_ULPI_D1,ETH_MII_RXD2,,,LCD_G1,EVENTOUT,ADC12_INN5/ADC12_INP9 -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,DFSDM_DATIN1,,,LCD_R6,OTG_HS_ULPI_D2,ETH_MII_RXD3,,,LCD_G0,EVENTOUT,ADC12_INP5 -PortB,PB2,,,SAI1_D1,,DFSDM_CKIN1,,SAI1_SD_A,SPI3_MOSI/I2S3_SDO,SAI4_SD_A,QUADSPI_CLK,SAI4_D1,ETH_TX_ER,,,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,HRTIM_FLT4,,,SPI1_SCK/I2S1_CK,SPI3_SCK/I2S3_CK,,SPI6_SCK,SDMMC2_D2,,UART7_RX,,,,EVENTOUT, -PortB,PB4,NJTRST,TIM16_BKIN,TIM3_CH1,HRTIM_EEV6,,SPI1_MISO/I2S1_SDI,SPI3_MISO/I2S3_SDI,SPI2_NSS/I2S2_WS,SPI6_MISO,SDMMC2_D3,,UART7_TX,,,,EVENTOUT, -PortB,PB5,,TIM17_BKIN,TIM3_CH2,HRTIM_EEV7,I2C1_SMBA,SPI1_MOSI/I2S1_SDO,I2C4_SMBA,SPI3_MOSI/I2S3_SDO,SPI6_MOSI,CAN2_RX,OTG_HS_ULPI_D7,ETH_PPS_OUT,FMC_SDCKE1,DCMI_D10,UART5_RX,EVENTOUT, -PortB,PB6,,TIM16_CH1N,TIM4_CH1,HRTIM_EEV8,I2C1_SCL,HDMI_CEC,I2C4_SCL,USART1_TX,LPUART1_TX,CAN2_TX,QUADSPI_BK1_NCS,DFSDM_DATIN5,FMC_SDNE1,DCMI_D5,UART5_TX,EVENTOUT, -PortB,PB7,,TIM17_CH1N,TIM4_CH2,HRTIM_EEV9,I2C1_SDA,,I2C4_SDA,USART1_RX,LPUART1_RX,CAN2_TXFD,,DFSDM_CKIN5,FMC_NL,DCMI_VSYNC,,EVENTOUT, -PortB,PB8,,TIM16_CH1,TIM4_CH3,DFSDM_CKIN7,I2C1_SCL,,I2C4_SCL,SDMMC1_CKIN,UART4_RX,CAN1_RX,SDMMC2_D4,ETH_MII_TXD3,SDMMC1_D4,DCMI_D6,LCD_B6,EVENTOUT, -PortB,PB9,,TIM17_CH1,TIM4_CH4,DFSDM_DATIN7,I2C1_SDA,SPI2_NSS/I2S2_WS,I2C4_SDA,SDMMC1_CDIR,UART4_TX,CAN1_TX,SDMMC2_D5,I2C4_SMBA,SDMMC1_D5,DCMI_D7,LCD_B7,EVENTOUT, -PortB,PB10,,TIM2_CH3,HRTIM_SCOUT,LPTIM2_IN1,I2C2_SCL,SPI2_SCK/I2S2_CK,DFSDM_DATIN7,USART3_TX,,QUADSPI_BK1_NCS,OTG_HS_ULPI_D3,ETH_MII_RX_ER,,,LCD_G4,EVENTOUT, -PortB,PB11,,TIM2_CH4,HRTIM_SCIN,LPTIM2_ETR,I2C2_SDA,,DFSDM_CKIN7,USART3_RX,,,OTG_HS_ULPI_D4,ETH_MII_TX_EN/ETH_RMII_TX_EN,,,LCD_G5,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,,I2C2_SMBA,SPI2_NSS/I2S2_WS,DFSDM_DATIN1,USART3_CK,,CAN2_RX,OTG_HS_ULPI_D5,ETH_MII_TXD0/ETH_RMII_TXD0,OTG_HS_ID,TIM1_BKIN_COMP12,UART5_RX,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,LPTIM2_OUT,,SPI2_SCK/I2S2_CK,DFSDM_CKIN1,USART3_CTS/USART3_NSS,,CAN2_TX,OTG_HS_ULPI_D6,ETH_MII_TXD1/ETH_RMII_TXD1,,,UART5_TX,EVENTOUT, -PortB,PB14,,TIM1_CH2N,TIM12_CH1,TIM8_CH2N,USART1_TX,SPI2_MISO/I2S2_SDI,DFSDM_DATIN2,USART3_RTS,UART4_RTS,SDMMC2_D0,,,OTG_HS_DM,,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,TIM12_CH2,TIM8_CH3N,USART1_RX,SPI2_MOSI/I2S2_SDO,DFSDM_CKIN2,,UART4_CTS,SDMMC2_D1,,,OTG_HS_DP,,,EVENTOUT, -PortC,PC0,,,,DFSDM_CKIN0,,,DFSDM_DATIN4,,SAI2_FS_B,,OTG_HS_ULPI_STP,,FMC_SDNWE,,LCD_R5,EVENTOUT,ADC123_INP10 -PortC,PC1,TRACED0,,SAI1_D1,DFSDM_DATIN0,DFSDM_CKIN4,SPI2_MOSI/I2S2_SDO,SAI1_SD_A,,SAI4_SD_A,SDMMC2_CK,SAI4_D1,ETH_MDC,MDIOS_MDC,,,EVENTOUT,ADC123_INN10/ADC123_INP11 -PortC,PC2,,,,DFSDM_CKIN1,,SPI2_MISO/I2S2_SDI,DFSDM_CKOUT,,,,OTG_HS_ULPI_DIR,ETH_MII_TXD2,FMC_SDNE0,,,EVENTOUT,ADC123_INN11/ADC123_INP12/ADC3_INN1/ADC3_INP0 -PortC,PC3,,,,DFSDM_DATIN1,,SPI2_MOSI/I2S2_SDO,,,,,OTG_HS_ULPI_NXT,ETH_MII_TX_CLK,FMC_SDCKE0,,,EVENTOUT,ADC12_INN12/ADC12_INP13/ADC3_INP1 -PortC,PC4,,,,DFSDM_CKIN2,,I2S1_MCK,,,,SPDIFRX_IN2,,ETH_MII_RXD0/ETH_RMII_RXD0,FMC_SDNE0,,,EVENTOUT,ADC12_INP4 -PortC,PC5,,,SAI1_D3,DFSDM_DATIN2,,,,,,SPDIFRX_IN3,SAI4_D3,ETH_MII_RXD1/ETH_RMII_RXD1,FMC_SDCKE0,COMP_1_OUT,,EVENTOUT,ADC12_INN4/ADC12_INP8 -PortC,PC6,,HRTIM_CHA1,TIM3_CH1,TIM8_CH1,DFSDM_CKIN3,I2S2_MCK,,USART6_TX,SDMMC1_D0DIR,FMC_NWAIT,SDMMC2_D6,,SDMMC1_D6,DCMI_D0,LCD_HSYNC,EVENTOUT, -PortC,PC7,TRGIO,HRTIM_CHA2,TIM3_CH2,TIM8_CH2,DFSDM_DATIN3,,I2S3_MCK,USART6_RX,SDMMC1_D123DIR,FMC_NE1,SDMMC2_D7,SWPMI_TX,SDMMC1_D7,DCMI_D1,LCD_G6,EVENTOUT, -PortC,PC8,TRACED1,HRTIM_CHB1,TIM3_CH3,TIM8_CH3,,,,USART6_CK,UART5_RTS,FMC_NE2/FMC_NCE,,SWPMI_RX,SDMMC1_D0,DCMI_D2,,EVENTOUT, -PortC,PC9,MCO2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,UART5_CTS,QUADSPI_BK1_IO0,LCD_G3,SWPMI_SUSPEND,SDMMC1_D1,DCMI_D3,LCD_B2,EVENTOUT, -PortC,PC10,,,HRTIM_EEV1,DFSDM_CKIN5,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,QUADSPI_BK1_IO1,,,SDMMC1_D2,DCMI_D8,LCD_R2,EVENTOUT, -PortC,PC11,,,HRTIM_FLT2,DFSDM_DATIN5,,,SPI3_MISO/I2S3_SDI,USART3_RX,UART4_RX,QUADSPI_BK2_NCS,,,SDMMC1_D3,DCMI_D4,,EVENTOUT, -PortC,PC12,TRACED3,,HRTIM_EEV2,,,,SPI3_MOSI/I2S3_SDO,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,DFSDM_CKIN6,,,SAI3_SCK_A,,UART4_RX,CAN1_RX,,,FMC_D2/FMC_DA2,,,EVENTOUT, -PortD,PD1,,,,DFSDM_DATIN6,,,SAI3_SD_A,,UART4_TX,CAN1_TX,,,FMC_D3/FMC_DA3,,,EVENTOUT, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,,UART5_RX,,,,SDMMC1_CMD,DCMI_D11,,EVENTOUT, -PortD,PD3,,,,DFSDM_CKOUT,,SPI2_SCK/I2S2_CK,,USART2_CTS/USART2_NSS,,,,,FMC_CLK,DCMI_D5,LCD_G7,EVENTOUT, -PortD,PD4,,,HRTIM_FLT3,,,,SAI3_FS_A,USART2_RTS,,CAN1_RXFD,,,FMC_NOE,,,EVENTOUT, -PortD,PD5,,,HRTIM_EEV3,,,,,USART2_TX,,CAN1_TXFD,,,FMC_NWE,,,EVENTOUT, -PortD,PD6,,,SAI1_D1,DFSDM_CKIN4,DFSDM_DATIN1,SPI3_MOSI/I2S3_SDO,SAI1_SD_A,USART2_RX,SAI4_SD_A,CAN2_RXFD,SAI4_D1,SDMMC2_CK,FMC_NWAIT,DCMI_D10,LCD_B2,EVENTOUT, -PortD,PD7,,,,DFSDM_DATIN4,,SPI1_MOSI/I2S1_SDO,DFSDM_CKIN1,USART2_CK,,SPDIFRX_IN0,,SDMMC2_CMD,FMC_NE1,,,EVENTOUT, -PortD,PD8,,,,DFSDM_CKIN3,,,SAI3_SCK_B,USART3_TX,,SPDIFRX_IN1,,,FMC_D13/FMC_DA13,,,EVENTOUT, -PortD,PD9,,,,DFSDM_DATIN3,,,SAI3_SD_B,USART3_RX,,CAN2_RXFD,,,FMC_D14/FMC_DA14,,,EVENTOUT, -PortD,PD10,,,,DFSDM_CKOUT,,,SAI3_FS_B,USART3_CK,,CAN2_TXFD,,,FMC_D15/FMC_DA15,,LCD_B3,EVENTOUT, -PortD,PD11,,,,LPTIM2_IN2,I2C4_SMBA,,,USART3_CTS/USART3_NSS,,QUADSPI_BK1_IO0,SAI2_SD_A,,FMC_A16,,,EVENTOUT, -PortD,PD12,,LPTIM1_IN1,TIM4_CH1,LPTIM2_IN1,I2C4_SCL,,,USART3_RTS,,QUADSPI_BK1_IO1,SAI2_FS_A,,FMC_A17,,,EVENTOUT, -PortD,PD13,,LPTIM1_OUT,TIM4_CH2,,I2C4_SDA,,,,,QUADSPI_BK1_IO3,SAI2_SCK_A,,FMC_A18,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,SAI3_MCLK_B,,UART8_CTS,,,,FMC_D0/FMC_DA0,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,SAI3_MCLK_A,,UART8_RTS,,,,FMC_D1/FMC_DA1,,,EVENTOUT, -PortE,PE0,,LPTIM1_ETR,TIM4_ETR,HRTIM_SCIN,LPTIM2_ETR,,,,UART8_RX,CAN1_RXFD,SAI2_MCK_A,,FMC_NBL0,DCMI_D2,,EVENTOUT, -PortE,PE1,,LPTIM1_IN2,,HRTIM_SCOUT,,,,,UART8_TX,CAN1_TXFD,,,FMC_NBL1,DCMI_D3,,EVENTOUT, -PortE,PE2,TRACECLK,,SAI1_CK1,,,SPI4_SCK,SAI1_MCLK_A,,SAI4_MCLK_A,QUADSPI_BK1_IO2,SAI4_CK1,ETH_MII_TXD3,FMC_A23,,,EVENTOUT, -PortE,PE3,TRACED0,,,,TIM15_BKIN,,SAI1_SD_B,,SAI4_SD_B,,,,FMC_A19,,,EVENTOUT, -PortE,PE4,TRACED1,,SAI1_D2,DFSDM_DATIN3,TIM15_CH1N,SPI4_NSS,SAI1_FS_A,,SAI4_FS_A,,SAI4_D2,,FMC_A20,DCMI_D4,LCD_B0,EVENTOUT, -PortE,PE5,TRACED2,,SAI1_CK2,DFSDM_CKIN3,TIM15_CH1,SPI4_MISO,SAI1_SCK_A,,SAI4_SCK_A,,SAI4_CK2,,FMC_A21,DCMI_D6,LCD_G0,EVENTOUT, -PortE,PE6,TRACED3,TIM1_BKIN2,SAI1_D1,,TIM15_CH2,SPI4_MOSI,SAI1_SD_A,,SAI4_SD_A,SAI4_D1,SAI2_MCK_B,TIM1_BKIN2_COMP12,FMC_A22,DCMI_D7,LCD_G1,EVENTOUT, -PortE,PE7,,TIM1_ETR,,DFSDM_DATIN2,,,,UART7_RX,,,QUADSPI_BK2_IO0,,FMC_D4/FMC_DA4,,,EVENTOUT, -PortE,PE8,,TIM1_CH1N,,DFSDM_CKIN2,,,,UART7_TX,,,QUADSPI_BK2_IO1,,FMC_D5/FMC_DA5,COMP_2_OUT,,EVENTOUT, -PortE,PE9,,TIM1_CH1,,DFSDM_CKOUT,,,,UART7_RTS,,,QUADSPI_BK2_IO2,,FMC_D6/FMC_DA6,,,EVENTOUT, -PortE,PE10,,TIM1_CH2N,,DFSDM_DATIN4,,,,UART7_CTS,,,QUADSPI_BK2_IO3,,FMC_D7/FMC_DA7,,,EVENTOUT, -PortE,PE11,,TIM1_CH2,,DFSDM_CKIN4,,SPI4_NSS,,,,,SAI2_SD_B,,FMC_D8/FMC_DA8,,LCD_G3,EVENTOUT, -PortE,PE12,,TIM1_CH3N,,DFSDM_DATIN5,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9/FMC_DA9,COMP_1_OUT,LCD_B4,EVENTOUT, -PortE,PE13,,TIM1_CH3,,DFSDM_CKIN5,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10/FMC_DA10,COMP_2_OUT,LCD_DE,EVENTOUT, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCK_B,,FMC_D11/FMC_DA11,,LCD_CLK,EVENTOUT, -PortE,PE15,,TIM1_BKIN,,,,HDMI__TIM1_BKIN,,,,,,,FMC_D12/FMC_DA12,TIM1_BKIN_COMP12,LCD_R7,EVENTOUT, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_INP5 -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_INN5/ADC3_INP9 -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_INP4 -PortF,PF6,,TIM16_CH1,,,,SPI5_NSS,SAI1_SD_B,UART7_RX,SAI4_SD_B,QUADSPI_BK1_IO3,,,,,,EVENTOUT,ADC3_INN4/ADC3_INP8 -PortF,PF7,,TIM17_CH1,,,,SPI5_SCK,SAI1_MCLK_B,UART7_TX,SAI4_MCLK_B,QUADSPI_BK1_IO2,,,,,,EVENTOUT,ADC3_INP3 -PortF,PF8,,TIM16_CH1N,,,,SPI5_MISO,SAI1_SCK_B,UART7_RTS,SAI4_SCK_B,TIM13_CH1,QUADSPI_BK1_IO0,,,,,EVENTOUT,ADC3_INN3/ADC3_INP7 -PortF,PF9,,TIM17_CH1N,,,,SPI5_MOSI,SAI1_FS_B,UART7_CTS,SAI4_FS_B,TIM14_CH1,QUADSPI_BK1_IO1,,,,,EVENTOUT,ADC3_INP2 -PortF,PF10,,TIM16_BKIN,SAI1_D3,,,,,,,QUADSPI_CLK,SAI4_D3,,,DCMI_D11,LCD_DE,EVENTOUT,ADC3_INN2/ADC3_INP6 -PortF,PF11,,,,,,SPI5_MOSI,,,,,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12,,EVENTOUT,ADC1_INP2 -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT,ADC1_INN2/ADC1_INP6 -PortF,PF13,,,,DFSDM_DATIN6,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT,ADC2_INP2 -PortF,PF14,,,,DFSDM_CKIN6,I2C4_SCL,,,,,,,,FMC_A8,,,EVENTOUT,ADC2_INN2/ADC2_INP6 -PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,FMC_A10,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,FMC_A11,,,EVENTOUT, -PortG,PG2,,,,TIM8_BKIN,,,,,,,,TIM8_BKIN_COMP12,FMC_A12,,,EVENTOUT, -PortG,PG3,,,,TIM8_BKIN2,,,,,,,,TIM8_BKIN2_COMP12,FMC_A13,,,EVENTOUT, -PortG,PG4,,TIM1_BKIN2,,,,,,,,,,TIM1_BKIN2_COMP12,FMC_A14/FMC_BA0,,,EVENTOUT, -PortG,PG5,,TIM1_ETR,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT, -PortG,PG6,,TIM17_BKIN,HRTIM_CHE1,,,,,,,,QUADSPI_BK1_NCS,,FMC_NE3,DCMI_D12,LCD_R7,EVENTOUT, -PortG,PG7,,,HRTIM_CHE2,,,,SAI1_MCLK_A,USART6_CK,,,,,FMC_INT,DCMI_D13,LCD_CLK,EVENTOUT, -PortG,PG8,,,,TIM8_ETR,,SPI6_NSS,,USART6_RTS,SPDIFRX_IN2,,,ETH_PPS_OUT,FMC_SDCLK,,LCD_G7,EVENTOUT, -PortG,PG9,,,,,,SPI1_MISO/I2S1_SDI,,USART6_RX,SPDIFRX_IN3,QUADSPI_BK2_IO2,SAI2_FS_B,,FMC_NE2/FMC_NCE,DCMI_VSYNC,,EVENTOUT, -PortG,PG10,,,HRTIM_FLT5,,,SPI1_NSS/I2S1_WS,,,,LCD_G3,SAI2_SD_B,,FMC_NE3,DCMI_D2,LCD_B2,EVENTOUT, -PortG,PG11,,,HRTIM_EEV4,,,SPI1_SCK/I2S1_CK,,,SPDIFRX_IN0,,SDMMC2_D2,ETH_MII_TX_EN/ETH_RMII_TX_EN,,DCMI_D3,LCD_B3,EVENTOUT, -PortG,PG12,,LPTIM1_IN1,HRTIM_EEV5,,,SPI6_MISO,,USART6_RTS,SPDIFRX_IN1,LCD_B4,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_NE4,,LCD_B1,EVENTOUT, -PortG,PG13,TRACED0,LPTIM1_OUT,HRTIM_EEV10,,,SPI6_SCK,,USART6_CTS/USART6_NSS,,,,ETH_MII_TXD0/ETH_RMII_TXD0,FMC_A24,,LCD_R0,EVENTOUT, -PortG,PG14,TRACED1,LPTIM1_ETR,,,,SPI6_MOSI,,USART6_TX,,QUADSPI_BK2_IO3,,ETH_MII_TXD1/ETH_RMII_TXD1,FMC_A25,,LCD_B0,EVENTOUT, -PortG,PG15,,,,,,,,USART6_CTS/USART6_NSS,,,,,FMC_SDNCAS,DCMI_D13,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH2,,LPTIM1_IN2,,,,,,,,QUADSPI_BK2_IO0,SAI2_SCK_B,ETH_MII_CRS,FMC_SDCKE0,,LCD_R0,EVENTOUT,ADC3_INP13 -PortH,PH3,,,,,,,,,,QUADSPI_BK2_IO1,SAI2_MCK_B,ETH_MII_COL,FMC_SDNE0,,LCD_R1,EVENTOUT,ADC3_INN13/ADC3_INP14 -PortH,PH4,,,,,I2C2_SCL,,,,,LCD_G5,OTG_HS_ULPI_NXT,,,,LCD_G4,EVENTOUT,ADC3_INN14/ADC3_INP15 -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT,ADC3_INN15/ADC3_INP16 -PortH,PH6,,,TIM12_CH1,,I2C2_SMBA,SPI5_SCK,,,,,,ETH_MII_RXD2,FMC_SDNE1,DCMI_D8,,EVENTOUT, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,ETH_MII_RXD3,FMC_SDCKE1,DCMI_D9,,EVENTOUT, -PortH,PH8,,,TIM5_ETR,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC,LCD_R2,EVENTOUT, -PortH,PH9,,,TIM12_CH2,,I2C3_SMBA,,,,,,,,FMC_D17,DCMI_D0,LCD_R3,EVENTOUT, -PortH,PH10,,,TIM5_CH1,,I2C4_SMBA,,,,,,,,FMC_D18,DCMI_D1,LCD_R4,EVENTOUT, -PortH,PH11,,,TIM5_CH2,,I2C4_SCL,,,,,,,,FMC_D19,DCMI_D2,LCD_R5,EVENTOUT, -PortH,PH12,,,TIM5_CH3,,I2C4_SDA,,,,,,,,FMC_D20,DCMI_D3,LCD_R6,EVENTOUT, -PortH,PH13,,,,TIM8_CH1N,,,,,UART4_TX,CAN1_TX,,,FMC_D21,,LCD_G2,EVENTOUT, -PortH,PH14,,,,TIM8_CH2N,,,,,UART4_RX,CAN1_RX,,,FMC_D22,DCMI_D4,LCD_G3,EVENTOUT, -PortH,PH15,,,,TIM8_CH3N,,,,,,CAN1_TXFD,,,FMC_D23,DCMI_D11,LCD_G4,EVENTOUT, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS/I2S2_WS,,,,CAN1_RXFD,,,FMC_D24,DCMI_D13,LCD_G5,EVENTOUT, -PortI,PI1,,,,TIM8_BKIN2,,SPI2_SCK/I2S2_CK,,,,,,TIM8_BKIN2_COMP12,FMC_D25,DCMI_D8,LCD_G6,EVENTOUT, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO/I2S2_SDI,,,,,,,FMC_D26,DCMI_D9,LCD_G7,EVENTOUT, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI/I2S2_SDO,,,,,,,FMC_D27,DCMI_D10,,EVENTOUT, -PortI,PI4,,,,TIM8_BKIN,,,,,,,SAI2_MCK_A,TIM8_BKIN_COMP12,FMC_NBL2,DCMI_D5,LCD_B4,EVENTOUT, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,FMC_NBL3,DCMI_VSYNC,LCD_B5,EVENTOUT, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,FMC_D28,DCMI_D6,LCD_B6,EVENTOUT, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,FMC_D29,DCMI_D7,LCD_B7,EVENTOUT, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT, -PortI,PI9,,,,,,,,,UART4_RX,CAN1_RX,,,FMC_D30,,LCD_VSYNC,EVENTOUT, -PortI,PI10,,,,,,,,,,CAN1_RXFD,,ETH_MII_RX_ER,FMC_D31,,LCD_HSYNC,EVENTOUT, -PortI,PI11,,,,,,,,,,LCD_G6,OTG_HS_ULPI_DIR,,,,,EVENTOUT, -PortI,PI12,,,,,,,,,,,,ETH_TX_ER,,,LCD_HSYNC,EVENTOUT, -PortI,PI13,,,,,,,,,,,,,,,LCD_VSYNC,EVENTOUT, -PortI,PI14,,,,,,,,,,,,,,,LCD_CLK,EVENTOUT, -PortI,PI15,,,,,,,,,,LCD_G2,,,,,LCD_R0,EVENTOUT, -PortJ,PJ0,,,,,,,,,,LCD_R7,,,,,LCD_R1,EVENTOUT, -PortJ,PJ1,,,,,,,,,,,,,,,LCD_R2,EVENTOUT, -PortJ,PJ2,,,,,,,,,,,,,,,LCD_R3,EVENTOUT, -PortJ,PJ3,,,,,,,,,,,,,,,LCD_R4,EVENTOUT, -PortJ,PJ4,,,,,,,,,,,,,,,LCD_R5,EVENTOUT, -PortJ,PJ5,,,,,,,,,,,,,,,LCD_R6,EVENTOUT, -PortJ,PJ6,,,,TIM8_CH2,,,,,,,,,,,LCD_R7,EVENTOUT, -PortJ,PJ7,TRGIN,,,TIM8_CH2N,,,,,,,,,,,LCD_G0,EVENTOUT, -PortJ,PJ8,,TIM1_CH3N,,TIM8_CH1,,,,,UART8_TX,,,,,,LCD_G1,EVENTOUT, -PortJ,PJ9,,TIM1_CH3,,TIM8_CH1N,,,,,UART8_RX,,,,,,LCD_G2,EVENTOUT, -PortJ,PJ10,,TIM1_CH2N,,TIM8_CH2,,SPI5_MOSI,,,,,,,,,LCD_G3,EVENTOUT, -PortJ,PJ11,,TIM1_CH2,,TIM8_CH2N,,SPI5_MISO,,,,,,,,,LCD_G4,EVENTOUT, -PortJ,PJ12,TRGOUT,,,,,,,,,LCD_G3,,,,,LCD_B0,EVENTOUT, -PortJ,PJ13,,,,,,,,,,LCD_B4,,,,,LCD_B1,EVENTOUT, -PortJ,PJ14,,,,,,,,,,,,,,,LCD_B2,EVENTOUT, -PortJ,PJ15,,,,,,,,,,,,,,,LCD_B3,EVENTOUT, -PortK,PK0,,TIM1_CH1N,,TIM8_CH3,,SPI5_SCK,,,,,,,,,LCD_G5,EVENTOUT, -PortK,PK1,,TIM1_CH1,,TIM8_CH3N,,SPI5_NSS,,,,,,,,,LCD_G6,EVENTOUT, -PortK,PK2,,TIM1_BKIN,,TIM8_BKIN,,,,,,,TIM8_BKIN_COMP12,TIM1_BKIN_COMP12,,,LCD_G7,EVENTOUT, -PortK,PK3,,,,,,,,,,,,,,,LCD_B4,EVENTOUT, -PortK,PK4,,,,,,,,,,,,,,,LCD_B5,EVENTOUT, -PortK,PK5,,,,,,,,,,,,,,,LCD_B6,EVENTOUT, -PortK,PK6,,,,,,,,,,,,,,,LCD_B7,EVENTOUT, -PortK,PK7,,,,,,,,,,,,,,,LCD_DE,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,TIM1/2/16/17/LPTIM1/HRTIM1,SAI1/TIM3/4/5/12/HRTIM1,LPUART/TIM8/LPTIM2/3/4/5/HRTIM1/DFSDM,I2C1/2/3/4/USART1/TIM15/LPTIM2/DFSDM/CEC,SPI1/2/3/4/5/6/CEC,SPI2/3/SAI1/3/I2C4/UART4/DFSDM,SPI2/3/6/USART1/2/3/6/UART7/SDMMC1,SPI6/SAI2/4/UART4/5/8/LPUART/SDMMC1/SPDIFRX,SAI4/FDCAN1/2/TIM13/14/QUADSPI/FMC/SDMMC2/LCD/SPDIFRX,SAI2/4/TIM8/QUADSPI/SDMMC2/OTG1_HS/OTG2_FS/LCD,I2C4/UART7/SWPMI1/TIM1/8/DFSDM/SDMMC2/MDIOS/ETH,TIM1/8/FMC/SDMMC1/MDIOS/OTG1_FS/LCD,TIM1/DCMI/LCD/COMP,UART5/LCD,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN , , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B ,ETH_MII_CRS , , , ,EVENTOUT,ADC1_INP16/ADC12_INN1/ADC12_INP0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK , , ,LCD_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17/ADC12_INP1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,LPTIM4_OUT ,TIM15_CH1 , , ,USART2_TX ,SAI2_SCK_B , , ,ETH_MDIO ,MDIOS_MDIO , ,LCD_R1 ,EVENTOUT,ADC12_INP14 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,LPTIM5_OUT ,TIM15_CH2 , , ,USART2_RX , ,LCD_B2 ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC12_INP15 +PortA,PA4 , , ,TIM5_ETR , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,SPI6_NSS , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_INP18 +PortA,PA5 , ,TIM2_CH1/TIM2_ETR , ,TIM8_CH1N , ,SPI1_SCK/I2S1_CK , , ,SPI6_SCK , ,OTG_HS_ULPI_CK , , , ,LCD_R4 ,EVENTOUT,ADC12_INN18/ADC12_INP19 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO/I2S1_SDI, , ,SPI6_MISO ,TIM13_CH1 ,TIM8_BKIN_COMP12 ,MDIOS_MDC ,TIM1_BKIN_COMP12 ,DCMI_PIXCLK ,LCD_G2 ,EVENTOUT,ADC12_INP3 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI/I2S1_SDO, , ,SPI6_MOSI ,TIM14_CH1 , ,ETH_MII_RX_DV/ETH_RMII_CRS_DV ,FMC_SDNWE , , ,EVENTOUT,ADC12_INN3/ADC12_INP7 +PortA,PA8 ,MCO1 ,TIM1_CH1 ,HRTIM_CHB2 ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,OTG_FS_SOF ,UART7_RX ,TIM8_BKIN2_COMP12 ,LCD_B3 ,LCD_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 ,HRTIM_CHC1 ,LPUART1_TX ,I2C3_SMBA ,SPI2_SCK/I2S2_CK , ,USART1_TX , ,CAN1_RXFD , ,ETH_TX_ER , ,DCMI_D0 ,LCD_R5 ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 ,HRTIM_CHC2 ,LPUART1_RX , , , ,USART1_RX , ,CAN1_TXFD ,OTG_FS_ID ,MDIOS_MDIO ,LCD_B4 ,DCMI_D1 ,LCD_B1 ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,HRTIM_CHD1 ,LPUART1_CTS , ,SPI2_NSS/I2S2_WS ,UART4_RX ,USART1_CTS/USART1_NSS , ,CAN1_RX ,OTG_FS_DM , , , ,LCD_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR ,HRTIM_CHD2 ,LPUART1_RTS , ,SPI2_SCK/I2S2_CK ,UART4_TX ,USART1_RTS ,SAI2_FS_B ,CAN1_TX ,OTG_FS_DP , , , ,LCD_R5 ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1/TIM2_ETR ,HRTIM_FLT1 , ,HDMI_CEC ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,SPI6_NSS ,UART4_RTS , , ,UART7_TX , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , , ,DFSDM_CKOUT , ,UART4_CTS ,LCD_R3 ,OTG_HS_ULPI_D1 ,ETH_MII_RXD2 , , ,LCD_G1 ,EVENTOUT,ADC12_INN5/ADC12_INP9 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM_DATIN1 , , ,LCD_R6 ,OTG_HS_ULPI_D2 ,ETH_MII_RXD3 , , ,LCD_G0 ,EVENTOUT,ADC12_INP5 +PortB,PB2 , , ,SAI1_D1 , ,DFSDM_CKIN1 , ,SAI1_SD_A ,SPI3_MOSI/I2S3_SDO ,SAI4_SD_A ,QUADSPI_CLK ,SAI4_D1 ,ETH_TX_ER , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 ,HRTIM_FLT4 , , ,SPI1_SCK/I2S1_CK ,SPI3_SCK/I2S3_CK , ,SPI6_SCK ,SDMMC2_D2 , ,UART7_RX , , , ,EVENTOUT, +PortB,PB4 ,NJTRST ,TIM16_BKIN ,TIM3_CH1 ,HRTIM_EEV6 , ,SPI1_MISO/I2S1_SDI,SPI3_MISO/I2S3_SDI ,SPI2_NSS/I2S2_WS ,SPI6_MISO ,SDMMC2_D3 , ,UART7_TX , , , ,EVENTOUT, +PortB,PB5 , ,TIM17_BKIN ,TIM3_CH2 ,HRTIM_EEV7 ,I2C1_SMBA ,SPI1_MOSI/I2S1_SDO,I2C4_SMBA ,SPI3_MOSI/I2S3_SDO ,SPI6_MOSI ,CAN2_RX ,OTG_HS_ULPI_D7 ,ETH_PPS_OUT ,FMC_SDCKE1 ,DCMI_D10 ,UART5_RX ,EVENTOUT, +PortB,PB6 , ,TIM16_CH1N ,TIM4_CH1 ,HRTIM_EEV8 ,I2C1_SCL ,HDMI_CEC ,I2C4_SCL ,USART1_TX ,LPUART1_TX ,CAN2_TX ,QUADSPI_BK1_NCS ,DFSDM_DATIN5 ,FMC_SDNE1 ,DCMI_D5 ,UART5_TX ,EVENTOUT, +PortB,PB7 , ,TIM17_CH1N ,TIM4_CH2 ,HRTIM_EEV9 ,I2C1_SDA , ,I2C4_SDA ,USART1_RX ,LPUART1_RX ,CAN2_TXFD , ,DFSDM_CKIN5 ,FMC_NL ,DCMI_VSYNC , ,EVENTOUT, +PortB,PB8 , ,TIM16_CH1 ,TIM4_CH3 ,DFSDM_CKIN7 ,I2C1_SCL , ,I2C4_SCL ,SDMMC1_CKIN ,UART4_RX ,CAN1_RX ,SDMMC2_D4 ,ETH_MII_TXD3 ,SDMMC1_D4 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortB,PB9 , ,TIM17_CH1 ,TIM4_CH4 ,DFSDM_DATIN7 ,I2C1_SDA ,SPI2_NSS/I2S2_WS ,I2C4_SDA ,SDMMC1_CDIR ,UART4_TX ,CAN1_TX ,SDMMC2_D5 ,I2C4_SMBA ,SDMMC1_D5 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 ,HRTIM_SCOUT ,LPTIM2_IN1 ,I2C2_SCL ,SPI2_SCK/I2S2_CK ,DFSDM_DATIN7 ,USART3_TX , ,QUADSPI_BK1_NCS ,OTG_HS_ULPI_D3 ,ETH_MII_RX_ER , , ,LCD_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 ,HRTIM_SCIN ,LPTIM2_ETR ,I2C2_SDA , ,DFSDM_CKIN7 ,USART3_RX , , ,OTG_HS_ULPI_D4 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , , ,LCD_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , , ,I2C2_SMBA ,SPI2_NSS/I2S2_WS ,DFSDM_DATIN1 ,USART3_CK , ,CAN2_RX ,OTG_HS_ULPI_D5 ,ETH_MII_TXD0/ETH_RMII_TXD0 ,OTG_HS_ID ,TIM1_BKIN_COMP12 ,UART5_RX ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , ,LPTIM2_OUT , ,SPI2_SCK/I2S2_CK ,DFSDM_CKIN1 ,USART3_CTS/USART3_NSS , ,CAN2_TX ,OTG_HS_ULPI_D6 ,ETH_MII_TXD1/ETH_RMII_TXD1 , , ,UART5_TX ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8_CH2N ,USART1_TX ,SPI2_MISO/I2S2_SDI,DFSDM_DATIN2 ,USART3_RTS ,UART4_RTS ,SDMMC2_D0 , , ,OTG_HS_DM , , ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SDO,DFSDM_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , ,OTG_HS_DP , , ,EVENTOUT, +PortC,PC0 , , , ,DFSDM_CKIN0 , , ,DFSDM_DATIN4 , ,SAI2_FS_B , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_INP10 +PortC,PC1 ,TRACED0 , ,SAI1_D1 ,DFSDM_DATIN0 ,DFSDM_CKIN4 ,SPI2_MOSI/I2S2_SDO,SAI1_SD_A , ,SAI4_SD_A ,SDMMC2_CK ,SAI4_D1 ,ETH_MDC ,MDIOS_MDC , , ,EVENTOUT,ADC123_INN10/ADC123_INP11 +PortC,PC2 , , , ,DFSDM_CKIN1 , ,SPI2_MISO/I2S2_SDI,DFSDM_CKOUT , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INN11/ADC123_INP12/ADC3_INN1/ADC3_INP0 +PortC,PC3 , , , ,DFSDM_DATIN1 , ,SPI2_MOSI/I2S2_SDO, , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INN12/ADC12_INP13/ADC3_INP1 +PortC,PC4 , , , ,DFSDM_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX_IN2 , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_INP4 +PortC,PC5 , , ,SAI1_D3 ,DFSDM_DATIN2 , , , , , ,SPDIFRX_IN3 ,SAI4_D3 ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 ,COMP_1_OUT , ,EVENTOUT,ADC12_INN4/ADC12_INP8 +PortC,PC6 , ,HRTIM_CHA1 ,TIM3_CH1 ,TIM8_CH1 ,DFSDM_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, +PortC,PC7 ,TRGIO ,HRTIM_CHA2 ,TIM3_CH2 ,TIM8_CH2 ,DFSDM_DATIN3 , ,I2S3_MCK ,USART6_RX ,SDMMC1_D123DIR ,FMC_NE1 ,SDMMC2_D7 ,SWPMI_TX ,SDMMC1_D7 ,DCMI_D1 ,LCD_G6 ,EVENTOUT, +PortC,PC8 ,TRACED1 ,HRTIM_CHB1 ,TIM3_CH3 ,TIM8_CH3 , , , ,USART6_CK ,UART5_RTS ,FMC_NE2/FMC_NCE , ,SWPMI_RX ,SDMMC1_D0 ,DCMI_D2 , ,EVENTOUT, +PortC,PC9 ,MCO2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , ,UART5_CTS ,QUADSPI_BK1_IO0 ,LCD_G3 ,SWPMI_SUSPEND ,SDMMC1_D1 ,DCMI_D3 ,LCD_B2 ,EVENTOUT, +PortC,PC10, , ,HRTIM_EEV1 ,DFSDM_CKIN5 , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX ,QUADSPI_BK1_IO1 , , ,SDMMC1_D2 ,DCMI_D8 ,LCD_R2 ,EVENTOUT, +PortC,PC11, , ,HRTIM_FLT2 ,DFSDM_DATIN5 , , ,SPI3_MISO/I2S3_SDI ,USART3_RX ,UART4_RX ,QUADSPI_BK2_NCS , , ,SDMMC1_D3 ,DCMI_D4 , ,EVENTOUT, +PortC,PC12,TRACED3 , ,HRTIM_EEV2 , , , ,SPI3_MOSI/I2S3_SDO ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9 , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,DFSDM_CKIN6 , , ,SAI3_SCK_A , ,UART4_RX ,CAN1_RX , , ,FMC_D2/FMC_DA2 , , ,EVENTOUT, +PortD,PD1 , , , ,DFSDM_DATIN6 , , ,SAI3_SD_A , ,UART4_TX ,CAN1_TX , , ,FMC_D3/FMC_DA3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR , , , , , ,UART5_RX , , , ,SDMMC1_CMD ,DCMI_D11 , ,EVENTOUT, +PortD,PD3 , , , ,DFSDM_CKOUT , ,SPI2_SCK/I2S2_CK , ,USART2_CTS/USART2_NSS , , , , ,FMC_CLK ,DCMI_D5 ,LCD_G7 ,EVENTOUT, +PortD,PD4 , , ,HRTIM_FLT3 , , , ,SAI3_FS_A ,USART2_RTS , ,CAN1_RXFD , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , ,HRTIM_EEV3 , , , , ,USART2_TX , ,CAN1_TXFD , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , ,SAI1_D1 ,DFSDM_CKIN4 ,DFSDM_DATIN1 ,SPI3_MOSI/I2S3_SDO,SAI1_SD_A ,USART2_RX ,SAI4_SD_A ,CAN2_RXFD ,SAI4_D1 ,SDMMC2_CK ,FMC_NWAIT ,DCMI_D10 ,LCD_B2 ,EVENTOUT, +PortD,PD7 , , , ,DFSDM_DATIN4 , ,SPI1_MOSI/I2S1_SDO,DFSDM_CKIN1 ,USART2_CK , ,SPDIFRX_IN0 , ,SDMMC2_CMD ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , ,DFSDM_CKIN3 , , ,SAI3_SCK_B ,USART3_TX , ,SPDIFRX_IN1 , , ,FMC_D13/FMC_DA13 , , ,EVENTOUT, +PortD,PD9 , , , ,DFSDM_DATIN3 , , ,SAI3_SD_B ,USART3_RX , ,CAN2_RXFD , , ,FMC_D14/FMC_DA14 , , ,EVENTOUT, +PortD,PD10, , , ,DFSDM_CKOUT , , ,SAI3_FS_B ,USART3_CK , ,CAN2_TXFD , , ,FMC_D15/FMC_DA15 , ,LCD_B3 ,EVENTOUT, +PortD,PD11, , , ,LPTIM2_IN2 ,I2C4_SMBA , , ,USART3_CTS/USART3_NSS , ,QUADSPI_BK1_IO0 ,SAI2_SD_A , ,FMC_A16 , , ,EVENTOUT, +PortD,PD12, ,LPTIM1_IN1 ,TIM4_CH1 ,LPTIM2_IN1 ,I2C4_SCL , , ,USART3_RTS , ,QUADSPI_BK1_IO1 ,SAI2_FS_A , ,FMC_A17 , , ,EVENTOUT, +PortD,PD13, ,LPTIM1_OUT ,TIM4_CH2 , ,I2C4_SDA , , , , ,QUADSPI_BK1_IO3 ,SAI2_SCK_A , ,FMC_A18 , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , ,SAI3_MCLK_B , ,UART8_CTS , , , ,FMC_D0/FMC_DA0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , ,SAI3_MCLK_A , ,UART8_RTS , , , ,FMC_D1/FMC_DA1 , , ,EVENTOUT, +PortE,PE0 , ,LPTIM1_ETR ,TIM4_ETR ,HRTIM_SCIN ,LPTIM2_ETR , , , ,UART8_RX ,CAN1_RXFD ,SAI2_MCK_A , ,FMC_NBL0 ,DCMI_D2 , ,EVENTOUT, +PortE,PE1 , ,LPTIM1_IN2 , ,HRTIM_SCOUT , , , , ,UART8_TX ,CAN1_TXFD , , ,FMC_NBL1 ,DCMI_D3 , ,EVENTOUT, +PortE,PE2 ,TRACECLK , ,SAI1_CK1 , , ,SPI4_SCK ,SAI1_MCLK_A , ,SAI4_MCLK_A ,QUADSPI_BK1_IO2 ,SAI4_CK1 ,ETH_MII_TXD3 ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , , , ,TIM15_BKIN , ,SAI1_SD_B , ,SAI4_SD_B , , , ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,SAI1_D2 ,DFSDM_DATIN3 ,TIM15_CH1N ,SPI4_NSS ,SAI1_FS_A , ,SAI4_FS_A , ,SAI4_D2 , ,FMC_A20 ,DCMI_D4 ,LCD_B0 ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,SAI1_CK2 ,DFSDM_CKIN3 ,TIM15_CH1 ,SPI4_MISO ,SAI1_SCK_A , ,SAI4_SCK_A , ,SAI4_CK2 , ,FMC_A21 ,DCMI_D6 ,LCD_G0 ,EVENTOUT, +PortE,PE6 ,TRACED3 ,TIM1_BKIN2 ,SAI1_D1 , ,TIM15_CH2 ,SPI4_MOSI ,SAI1_SD_A , ,SAI4_SD_A ,SAI4_D1 ,SAI2_MCK_B ,TIM1_BKIN2_COMP12 ,FMC_A22 ,DCMI_D7 ,LCD_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , ,DFSDM_DATIN2 , , , ,UART7_RX , , ,QUADSPI_BK2_IO0 , ,FMC_D4/FMC_DA4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , ,DFSDM_CKIN2 , , , ,UART7_TX , , ,QUADSPI_BK2_IO1 , ,FMC_D5/FMC_DA5 ,COMP_2_OUT , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , ,DFSDM_CKOUT , , , ,UART7_RTS , , ,QUADSPI_BK2_IO2 , ,FMC_D6/FMC_DA6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , ,DFSDM_DATIN4 , , , ,UART7_CTS , , ,QUADSPI_BK2_IO3 , ,FMC_D7/FMC_DA7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , ,DFSDM_CKIN4 , ,SPI4_NSS , , , , ,SAI2_SD_B , ,FMC_D8/FMC_DA8 , ,LCD_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , ,DFSDM_DATIN5 , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9/FMC_DA9 ,COMP_1_OUT ,LCD_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , ,DFSDM_CKIN5 , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10/FMC_DA10 ,COMP_2_OUT ,LCD_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCK_B , ,FMC_D11/FMC_DA11 , ,LCD_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , ,HDMI__TIM1_BKIN , , , , , , ,FMC_D12/FMC_DA12 ,TIM1_BKIN_COMP12 ,LCD_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_INP5 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_INN5/ADC3_INP9 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_INP4 +PortF,PF6 , ,TIM16_CH1 , , , ,SPI5_NSS ,SAI1_SD_B ,UART7_RX ,SAI4_SD_B ,QUADSPI_BK1_IO3 , , , , , ,EVENTOUT,ADC3_INN4/ADC3_INP8 +PortF,PF7 , ,TIM17_CH1 , , , ,SPI5_SCK ,SAI1_MCLK_B ,UART7_TX ,SAI4_MCLK_B ,QUADSPI_BK1_IO2 , , , , , ,EVENTOUT,ADC3_INP3 +PortF,PF8 , ,TIM16_CH1N , , , ,SPI5_MISO ,SAI1_SCK_B ,UART7_RTS ,SAI4_SCK_B ,TIM13_CH1 ,QUADSPI_BK1_IO0 , , , , ,EVENTOUT,ADC3_INN3/ADC3_INP7 +PortF,PF9 , ,TIM17_CH1N , , , ,SPI5_MOSI ,SAI1_FS_B ,UART7_CTS ,SAI4_FS_B ,TIM14_CH1 ,QUADSPI_BK1_IO1 , , , , ,EVENTOUT,ADC3_INP2 +PortF,PF10, ,TIM16_BKIN ,SAI1_D3 , , , , , , ,QUADSPI_CLK ,SAI4_D3 , , ,DCMI_D11 ,LCD_DE ,EVENTOUT,ADC3_INN2/ADC3_INP6 +PortF,PF11, , , , , ,SPI5_MOSI , , , , ,SAI2_SD_B , ,FMC_SDNRAS ,DCMI_D12 , ,EVENTOUT,ADC1_INP2 +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT,ADC1_INN2/ADC1_INP6 +PortF,PF13, , , ,DFSDM_DATIN6 ,I2C4_SMBA , , , , , , , ,FMC_A7 , , ,EVENTOUT,ADC2_INP2 +PortF,PF14, , , ,DFSDM_CKIN6 ,I2C4_SCL , , , , , , , ,FMC_A8 , , ,EVENTOUT,ADC2_INN2/ADC2_INP6 +PortF,PF15, , , , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , ,TIM8_BKIN , , , , , , , ,TIM8_BKIN_COMP12 ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , ,TIM8_BKIN2 , , , , , , , ,TIM8_BKIN2_COMP12 ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , ,TIM1_BKIN2 , , , , , , , , , ,TIM1_BKIN2_COMP12 ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , ,TIM1_ETR , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , ,TIM17_BKIN ,HRTIM_CHE1 , , , , , , , ,QUADSPI_BK1_NCS , ,FMC_NE3 ,DCMI_D12 ,LCD_R7 ,EVENTOUT, +PortG,PG7 , , ,HRTIM_CHE2 , , , ,SAI1_MCLK_A ,USART6_CK , , , , ,FMC_INT ,DCMI_D13 ,LCD_CLK ,EVENTOUT, +PortG,PG8 , , , ,TIM8_ETR , ,SPI6_NSS , ,USART6_RTS ,SPDIFRX_IN2 , , ,ETH_PPS_OUT ,FMC_SDCLK , ,LCD_G7 ,EVENTOUT, +PortG,PG9 , , , , , ,SPI1_MISO/I2S1_SDI, ,USART6_RX ,SPDIFRX_IN3 ,QUADSPI_BK2_IO2 ,SAI2_FS_B , ,FMC_NE2/FMC_NCE ,DCMI_VSYNC , ,EVENTOUT, +PortG,PG10, , ,HRTIM_FLT5 , , ,SPI1_NSS/I2S1_WS , , , ,LCD_G3 ,SAI2_SD_B , ,FMC_NE3 ,DCMI_D2 ,LCD_B2 ,EVENTOUT, +PortG,PG11, , ,HRTIM_EEV4 , , ,SPI1_SCK/I2S1_CK , , ,SPDIFRX_IN0 , ,SDMMC2_D2 ,ETH_MII_TX_EN/ETH_RMII_TX_EN , ,DCMI_D3 ,LCD_B3 ,EVENTOUT, +PortG,PG12, ,LPTIM1_IN1 ,HRTIM_EEV5 , , ,SPI6_MISO , ,USART6_RTS ,SPDIFRX_IN1 ,LCD_B4 , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_NE4 , ,LCD_B1 ,EVENTOUT, +PortG,PG13,TRACED0 ,LPTIM1_OUT ,HRTIM_EEV10 , , ,SPI6_SCK , ,USART6_CTS/USART6_NSS , , , ,ETH_MII_TXD0/ETH_RMII_TXD0 ,FMC_A24 , ,LCD_R0 ,EVENTOUT, +PortG,PG14,TRACED1 ,LPTIM1_ETR , , , ,SPI6_MOSI , ,USART6_TX , ,QUADSPI_BK2_IO3 , ,ETH_MII_TXD1/ETH_RMII_TXD1 ,FMC_A25 , ,LCD_B0 ,EVENTOUT, +PortG,PG15, , , , , , , ,USART6_CTS/USART6_NSS , , , , ,FMC_SDNCAS ,DCMI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , ,LPTIM1_IN2 , , , , , , , ,QUADSPI_BK2_IO0 ,SAI2_SCK_B ,ETH_MII_CRS ,FMC_SDCKE0 , ,LCD_R0 ,EVENTOUT,ADC3_INP13 +PortH,PH3 , , , , , , , , , ,QUADSPI_BK2_IO1 ,SAI2_MCK_B ,ETH_MII_COL ,FMC_SDNE0 , ,LCD_R1 ,EVENTOUT,ADC3_INN13/ADC3_INP14 +PortH,PH4 , , , , ,I2C2_SCL , , , , ,LCD_G5 ,OTG_HS_ULPI_NXT , , , ,LCD_G4 ,EVENTOUT,ADC3_INN14/ADC3_INP15 +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT,ADC3_INN15/ADC3_INP16 +PortH,PH6 , , ,TIM12_CH1 , ,I2C2_SMBA ,SPI5_SCK , , , , , ,ETH_MII_RXD2 ,FMC_SDNE1 ,DCMI_D8 , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , ,ETH_MII_RXD3 ,FMC_SDCKE1 ,DCMI_D9 , ,EVENTOUT, +PortH,PH8 , , ,TIM5_ETR , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC ,LCD_R2 ,EVENTOUT, +PortH,PH9 , , ,TIM12_CH2 , ,I2C3_SMBA , , , , , , , ,FMC_D17 ,DCMI_D0 ,LCD_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1 , ,I2C4_SMBA , , , , , , , ,FMC_D18 ,DCMI_D1 ,LCD_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2 , ,I2C4_SCL , , , , , , , ,FMC_D19 ,DCMI_D2 ,LCD_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3 , ,I2C4_SDA , , , , , , , ,FMC_D20 ,DCMI_D3 ,LCD_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , ,UART4_TX ,CAN1_TX , , ,FMC_D21 , ,LCD_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D22 ,DCMI_D4 ,LCD_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , ,CAN1_TXFD , , ,FMC_D23 ,DCMI_D11 ,LCD_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4 , , ,SPI2_NSS/I2S2_WS , , , ,CAN1_RXFD , , ,FMC_D24 ,DCMI_D13 ,LCD_G5 ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,SPI2_SCK/I2S2_CK , , , , , ,TIM8_BKIN2_COMP12 ,FMC_D25 ,DCMI_D8 ,LCD_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO/I2S2_SDI, , , , , , ,FMC_D26 ,DCMI_D9 ,LCD_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI/I2S2_SDO, , , , , , ,FMC_D27 ,DCMI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,SAI2_MCK_A ,TIM8_BKIN_COMP12 ,FMC_NBL2 ,DCMI_D5 ,LCD_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , ,FMC_NBL3 ,DCMI_VSYNC ,LCD_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , ,FMC_D28 ,DCMI_D6 ,LCD_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , ,FMC_D29 ,DCMI_D7 ,LCD_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , ,UART4_RX ,CAN1_RX , , ,FMC_D30 , ,LCD_VSYNC,EVENTOUT, +PortI,PI10, , , , , , , , , ,CAN1_RXFD , ,ETH_MII_RX_ER ,FMC_D31 , ,LCD_HSYNC,EVENTOUT, +PortI,PI11, , , , , , , , , ,LCD_G6 ,OTG_HS_ULPI_DIR , , , , ,EVENTOUT, +PortI,PI12, , , , , , , , , , , ,ETH_TX_ER , , ,LCD_HSYNC,EVENTOUT, +PortI,PI13, , , , , , , , , , , , , , ,LCD_VSYNC,EVENTOUT, +PortI,PI14, , , , , , , , , , , , , , ,LCD_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , ,LCD_G2 , , , , ,LCD_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , ,LCD_R7 , , , , ,LCD_R1 ,EVENTOUT, +PortJ,PJ1 , , , , , , , , , , , , , , ,LCD_R2 ,EVENTOUT, +PortJ,PJ2 , , , , , , , , , , , , , , ,LCD_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , , , , ,LCD_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , , , , ,LCD_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LCD_R6 ,EVENTOUT, +PortJ,PJ6 , , , ,TIM8_CH2 , , , , , , , , , , ,LCD_R7 ,EVENTOUT, +PortJ,PJ7 ,TRGIN , , ,TIM8_CH2N , , , , , , , , , , ,LCD_G0 ,EVENTOUT, +PortJ,PJ8 , ,TIM1_CH3N , ,TIM8_CH1 , , , , ,UART8_TX , , , , , ,LCD_G1 ,EVENTOUT, +PortJ,PJ9 , ,TIM1_CH3 , ,TIM8_CH1N , , , , ,UART8_RX , , , , , ,LCD_G2 ,EVENTOUT, +PortJ,PJ10, ,TIM1_CH2N , ,TIM8_CH2 , ,SPI5_MOSI , , , , , , , , ,LCD_G3 ,EVENTOUT, +PortJ,PJ11, ,TIM1_CH2 , ,TIM8_CH2N , ,SPI5_MISO , , , , , , , , ,LCD_G4 ,EVENTOUT, +PortJ,PJ12,TRGOUT , , , , , , , , ,LCD_G3 , , , , ,LCD_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , ,LCD_B4 , , , , ,LCD_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LCD_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LCD_B3 ,EVENTOUT, +PortK,PK0 , ,TIM1_CH1N , ,TIM8_CH3 , ,SPI5_SCK , , , , , , , , ,LCD_G5 ,EVENTOUT, +PortK,PK1 , ,TIM1_CH1 , ,TIM8_CH3N , ,SPI5_NSS , , , , , , , , ,LCD_G6 ,EVENTOUT, +PortK,PK2 , ,TIM1_BKIN , ,TIM8_BKIN , , , , , , ,TIM8_BKIN_COMP12 ,TIM1_BKIN_COMP12 , , ,LCD_G7 ,EVENTOUT, +PortK,PK3 , , , , , , , , , , , , , , ,LCD_B4 ,EVENTOUT, +PortK,PK4 , , , , , , , , , , , , , , ,LCD_B5 ,EVENTOUT, +PortK,PK5 , , , , , , , , , , , , , , ,LCD_B6 ,EVENTOUT, +PortK,PK6 , , , , , , , , , , , , , , ,LCD_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LCD_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32h7b3_af.csv b/ports/stm32/boards/stm32h7b3_af.csv index e14ff481e81c5..0846689a0769d 100644 --- a/ports/stm32/boards/stm32h7b3_af.csv +++ b/ports/stm32/boards/stm32h7b3_af.csv @@ -1,170 +1,170 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,ADC -PortA,PA0,,TIM2_CH1/TIM2_ETR,TIM5_CH1,TIM8_ETR,TIM15_BKIN,I2S6_WS/SPI6_NSS,,USART2_CTS/USART2_NSS,UART4_TX,SDMMC2_CMD,SAI2_SD_B,,,,,EVENTOUT/EVENTOUT,ADC1_INP16, -PortA,PA1,,TIM2_CH2,TIM5_CH2,LPTIM3_OUT,TIM15_CH1N,,,USART2_DE/USART2_RTS,UART4_RX,OCTOSPIM_P1_IO3,SAI2_MCLK_B,OCTOSPIM_P1_DQS,,,LTDC_R2,EVENTOUT/EVENTOUT,ADC1_INN16/ADC1_INP17, -PortA,PA10,,TIM1_CH3,,LPUART1_RX,,,,USART1_RX,,,USB_OTG_HS_ID,MDIOS_MDIO,LTDC_B4,DCMI_D1/PSSI_D1,LTDC_B1,EVENTOUT/EVENTOUT,, -PortA,PA11,,TIM1_CH4,,LPUART1_CTS,,I2S2_WS/SPI2_NSS,UART4_RX,USART1_CTS/USART1_NSS,,FDCAN1_RX,,,,,LTDC_R4,EVENTOUT/EVENTOUT,, -PortA,PA12,,TIM1_ETR,,LPUART1_DE/LPUART1_RTS,,I2S2_CK/SPI2_SCK,UART4_TX,USART1_DE/USART1_RTS,SAI2_FS_B,FDCAN1_TX,,,,,LTDC_R5,EVENTOUT/EVENTOUT,, -PortA,PA13,DEBUG_JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortA,PA14,DEBUG_JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortA,PA15,DEBUG_JTDI,TIM2_CH1/TIM2_ETR,,,CEC,I2S1_WS/SPI1_NSS,I2S3_WS/SPI3_NSS,I2S6_WS/SPI6_NSS,UART4_DE/UART4_RTS,LTDC_R3,,UART7_TX,,,LTDC_B6,EVENTOUT/EVENTOUT,, -PortA,PA2,,TIM2_CH3,TIM5_CH3,,TIM15_CH1,,DFSDM2_CKIN1,USART2_TX,SAI2_SCK_B,,,,MDIOS_MDIO,,LTDC_R1,EVENTOUT/EVENTOUT,ADC1_INP14, -PortA,PA3,,TIM2_CH4,TIM5_CH4,OCTOSPIM_P1_CLK,TIM15_CH2,I2S6_MCK,,USART2_RX,,LTDC_B2,USB_OTG_HS_ULPI_D0,,,,LTDC_B5,EVENTOUT/EVENTOUT,ADC1_INP15, -PortA,PA4,,,TIM5_ETR,,,I2S1_WS/SPI1_NSS,I2S3_WS/SPI3_NSS,USART2_CK,I2S6_WS/SPI6_NSS,,,,,DCMI_HSYNC/PSSI_DE,LTDC_VSYNC,EVENTOUT/EVENTOUT,ADC1_INP18, -PortA,PA5,PWR_NDSTOP2,TIM2_CH1/TIM2_ETR,,TIM8_CH1N,,I2S1_CK/SPI1_SCK,,,I2S6_CK/SPI6_SCK,,USB_OTG_HS_ULPI_CK,,,PSSI_D14,LTDC_R4,EVENTOUT/EVENTOUT,ADC1_INN18/ADC1_INP19, -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,I2S1_SDI/SPI1_MISO,OCTOSPIM_P1_IO3,,I2S6_SDI/SPI6_MISO,TIM13_CH1,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2,MDIOS_MDC,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,DCMI_PIXCLK/PSSI_PDCK,LTDC_G2,EVENTOUT/EVENTOUT,ADC1_INP3/ADC2_INP3, -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,DFSDM2_DATIN1,I2S1_SDO/SPI1_MOSI,,,I2S6_SDO/SPI6_MOSI,TIM14_CH1,OCTOSPIM_P1_IO2,,FMC_SDNWE,,LTDC_VSYNC,EVENTOUT/EVENTOUT,ADC1_INN3/ADC1_INP7/ADC2_INN3/ADC2_INP7, -PortA,PA8,RCC_MCO_1,TIM1_CH1,,TIM8_BKIN2,I2C3_SCL,,,USART1_CK,,,USB_OTG_HS_SOF,UART7_RX,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2,LTDC_B3,LTDC_R6,EVENTOUT/EVENTOUT,, -PortA,PA9,,TIM1_CH2,,LPUART1_TX,I2C3_SMBA,I2S2_CK/SPI2_SCK,,USART1_TX,,,,,,DCMI_D0/PSSI_D0,LTDC_R5,EVENTOUT/EVENTOUT,, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,DFSDM2_CKOUT,,DFSDM1_CKOUT,,UART4_CTS,LTDC_R3,USB_OTG_HS_ULPI_D1,OCTOSPIM_P1_IO1,,,LTDC_G1,EVENTOUT/EVENTOUT,ADC1_INN5/ADC1_INP9/ADC2_INN5/ADC2_INP9, -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,DFSDM1_DATIN1,,,LTDC_R6,USB_OTG_HS_ULPI_D2,OCTOSPIM_P1_IO0,,,LTDC_G0,EVENTOUT/EVENTOUT,ADC1_INP5/ADC2_INP5, -PortB,PB10,,TIM2_CH3,,LPTIM2_IN1,I2C2_SCL,I2S2_CK/SPI2_SCK,DFSDM1_DATIN7,USART3_TX,,OCTOSPIM_P1_NCS,USB_OTG_HS_ULPI_D3,,,,LTDC_G4,EVENTOUT/EVENTOUT,, -PortB,PB11,,TIM2_CH4,,LPTIM2_ETR,I2C2_SDA,,DFSDM1_CKIN7,USART3_RX,,,USB_OTG_HS_ULPI_D4,,,,LTDC_G5,EVENTOUT/EVENTOUT,, -PortB,PB12,,TIM1_BKIN,,OCTOSPIM_P1_NCLK,I2C2_SMBA,I2S2_WS/SPI2_NSS,DFSDM1_DATIN1,USART3_CK,,FDCAN2_RX,USB_OTG_HS_ULPI_D5,DFSDM2_DATIN1,,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,UART5_RX,EVENTOUT/EVENTOUT,, -PortB,PB13,,TIM1_CH1N,,LPTIM2_OUT,DFSDM2_CKIN1,I2S2_CK/SPI2_SCK,DFSDM1_CKIN1,USART3_CTS/USART3_NSS,,FDCAN2_TX,USB_OTG_HS_ULPI_D6,,SDMMC1_D0,DCMI_D2/PSSI_D2,UART5_TX,EVENTOUT/EVENTOUT,, -PortB,PB14,,TIM1_CH2N,TIM12_CH1,TIM8_CH2N,USART1_TX,I2S2_SDI/SPI2_MISO,DFSDM1_DATIN2,USART3_DE/USART3_RTS,UART4_DE/UART4_RTS,SDMMC2_D0,,,,,LTDC_CLK,EVENTOUT/EVENTOUT,, -PortB,PB15,RTC_REFIN,TIM1_CH3N,TIM12_CH2,TIM8_CH3N,USART1_RX,I2S2_SDO/SPI2_MOSI,DFSDM1_CKIN2,,UART4_CTS,SDMMC2_D1,,,,,LTDC_G7,EVENTOUT/EVENTOUT,, -PortB,PB2,RTC_OUT_ALARM,,SAI1_D1,,DFSDM1_CKIN1,,SAI1_SD_A,I2S3_SDO/SPI3_MOSI,,OCTOSPIM_P1_CLK,OCTOSPIM_P1_DQS,,,,,EVENTOUT/EVENTOUT,, -PortB,PB3,DEBUG_JTDO/SWO,TIM2_CH2,,,,I2S1_CK/SPI1_SCK,I2S3_CK/SPI3_SCK,,I2S6_CK/SPI6_SCK,SDMMC2_D2,CRS_SYNC,UART7_RX,,,,EVENTOUT/EVENTOUT,, -PortB,PB4,,TIM16_BKIN,TIM3_CH1,,,I2S1_SDI/SPI1_MISO,I2S3_SDI/SPI3_MISO,I2S2_WS/SPI2_NSS,I2S6_SDI/SPI6_MISO,SDMMC2_D3,,UART7_TX,,,,EVENTOUT/EVENTOUT,, -PortB,PB5,,TIM17_BKIN,TIM3_CH2,,I2C1_SMBA,I2S1_SDO/SPI1_MOSI,I2C4_SMBA,I2S3_SDO/SPI3_MOSI,I2S6_SDO/SPI6_MOSI,FDCAN2_RX,USB_OTG_HS_ULPI_D7,LTDC_B5,FMC_SDCKE1,DCMI_D10/PSSI_D10,UART5_RX,EVENTOUT/EVENTOUT,, -PortB,PB6,,TIM16_CH1N,TIM4_CH1,,I2C1_SCL,CEC,I2C4_SCL,USART1_TX,LPUART1_TX,FDCAN2_TX,OCTOSPIM_P1_NCS,DFSDM1_DATIN5,FMC_SDNE1,DCMI_D5/PSSI_D5,UART5_TX,EVENTOUT/EVENTOUT,, -PortB,PB7,,TIM17_CH1N,TIM4_CH2,,I2C1_SDA,,I2C4_SDA,USART1_RX,LPUART1_RX,,,DFSDM1_CKIN5,FMC_NL,DCMI_VSYNC/PSSI_RDY,,EVENTOUT/EVENTOUT,, -PortB,PB8,,TIM16_CH1,TIM4_CH3,DFSDM1_CKIN7,I2C1_SCL,,I2C4_SCL,SDMMC1_CKIN,UART4_RX,FDCAN1_RX,SDMMC2_D4,,SDMMC1_D4,DCMI_D6/PSSI_D6,LTDC_B6,EVENTOUT/EVENTOUT,, -PortB,PB9,,TIM17_CH1,TIM4_CH4,DFSDM1_DATIN7,I2C1_SDA,I2S2_WS/SPI2_NSS,I2C4_SDA,SDMMC1_CDIR,UART4_TX,FDCAN1_TX,SDMMC2_D5,I2C4_SMBA,SDMMC1_D5,DCMI_D7/PSSI_D7,LTDC_B7,EVENTOUT/EVENTOUT,, -PortC,PC0,,,,DFSDM1_CKIN0,,,DFSDM1_DATIN4,,SAI2_FS_B,FMC_A25,USB_OTG_HS_ULPI_STP,LTDC_G2,FMC_SDNWE,,LTDC_R5,EVENTOUT/EVENTOUT,ADC1_INP10/ADC2_INP10, -PortC,PC1,DEBUG_TRACED0,,SAI1_D1,DFSDM1_DATIN0,DFSDM1_CKIN4,I2S2_SDO/SPI2_MOSI,SAI1_SD_A,,,SDMMC2_CK,OCTOSPIM_P1_IO4,,MDIOS_MDC,,LTDC_G5,EVENTOUT/EVENTOUT,ADC1_INN10/ADC1_INP11/ADC2_INN10/ADC2_INP11, -PortC,PC10,,,,DFSDM1_CKIN5,DFSDM2_CKIN0,,I2S3_CK/SPI3_SCK,USART3_TX,UART4_TX,OCTOSPIM_P1_IO1,LTDC_B1,SWPMI1_RX,SDMMC1_D2,DCMI_D8/PSSI_D8,LTDC_R2,EVENTOUT/EVENTOUT,, -PortC,PC11,,,,DFSDM1_DATIN5,DFSDM2_DATIN0,,I2S3_SDI/SPI3_MISO,USART3_RX,UART4_RX,OCTOSPIM_P1_NCS,,,SDMMC1_D3,DCMI_D4/PSSI_D4,LTDC_B4,EVENTOUT/EVENTOUT,, -PortC,PC12,DEBUG_TRACED3,,TIM15_CH1,,DFSDM2_CKOUT,I2S6_CK/SPI6_SCK,I2S3_SDO/SPI3_MOSI,USART3_CK,UART5_TX,,,,SDMMC1_CK,DCMI_D9/PSSI_D9,LTDC_R6,EVENTOUT/EVENTOUT,, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortC,PC2,PWR_CSTOP,,,DFSDM1_CKIN1,,I2S2_SDI/SPI2_MISO,DFSDM1_CKOUT,,,OCTOSPIM_P1_IO2,USB_OTG_HS_ULPI_DIR,OCTOSPIM_P1_IO5,FMC_SDNE0,,,EVENTOUT/EVENTOUT,ADC1_INN11/ADC1_INP12/ADC2_INN11/ADC2_INP12, -PortC,PC3,PWR_CSLEEP,,,DFSDM1_DATIN1,,I2S2_SDO/SPI2_MOSI,,,,OCTOSPIM_P1_IO0,USB_OTG_HS_ULPI_NXT,OCTOSPIM_P1_IO6,FMC_SDCKE0,,,EVENTOUT/EVENTOUT,ADC2_INP1, -PortC,PC4,,,,DFSDM1_CKIN2,,I2S1_MCK,,,,SPDIFRX_IN3,,,FMC_SDNE0,,LTDC_R7,EVENTOUT/EVENTOUT,ADC1_INP4/ADC2_INP4, -PortC,PC5,,,SAI1_D3,DFSDM1_DATIN2,PSSI_D15,,,,,SPDIFRX_IN4,OCTOSPIM_P1_DQS,,FMC_SDCKE0,COMP1_OUT,LTDC_DE,EVENTOUT/EVENTOUT,ADC1_INN4/ADC1_INP8/ADC2_INN4/ADC2_INP8, -PortC,PC6,,,TIM3_CH1,TIM8_CH1,DFSDM1_CKIN3,I2S2_MCK,,USART6_TX,SDMMC1_D0DIR,FMC_NWAIT,SDMMC2_D6,,SDMMC1_D6,DCMI_D0/PSSI_D0,LTDC_HSYNC,EVENTOUT/EVENTOUT,, -PortC,PC7,DEBUG_TRGIO,,TIM3_CH2,TIM8_CH2,DFSDM1_DATIN3,,I2S3_MCK,USART6_RX,SDMMC1_D123DIR,FMC_NE1,SDMMC2_D7,SWPMI1_TX,SDMMC1_D7,DCMI_D1/PSSI_D1,LTDC_G6,EVENTOUT/EVENTOUT,, -PortC,PC8,DEBUG_TRACED1,,TIM3_CH3,TIM8_CH3,,,,USART6_CK,UART5_DE/UART5_RTS,FMC_NCE/FMC_NE2,FMC_INT,SWPMI1_RX,SDMMC1_D0,DCMI_D2/PSSI_D2,,EVENTOUT/EVENTOUT,, -PortC,PC9,RCC_MCO_2,,TIM3_CH4,TIM8_CH4,I2C3_SDA,I2S_CKIN,,,UART5_CTS,OCTOSPIM_P1_IO0,LTDC_G3,SWPMI1_SUSPEND,SDMMC1_D1,DCMI_D3/PSSI_D3,LTDC_B2,EVENTOUT/EVENTOUT,, -PortD,PD0,,,,DFSDM1_CKIN6,,,,,UART4_RX,FDCAN1_RX,,UART9_CTS,FMC_D2/FMC_DA2,,LTDC_B1,EVENTOUT/EVENTOUT,, -PortD,PD1,,,,DFSDM1_DATIN6,,,,,UART4_TX,FDCAN1_TX,,,FMC_D3/FMC_DA3,,,EVENTOUT/EVENTOUT,, -PortD,PD10,,,,DFSDM1_CKOUT,DFSDM2_CKOUT,,,USART3_CK,,,,,FMC_D15/FMC_DA15,,LTDC_B3,EVENTOUT/EVENTOUT,, -PortD,PD11,,,,LPTIM2_IN2,I2C4_SMBA,,,USART3_CTS/USART3_NSS,,OCTOSPIM_P1_IO0,SAI2_SD_A,,FMC_A16/FMC_CLE,,,EVENTOUT/EVENTOUT,, -PortD,PD12,,LPTIM1_IN1,TIM4_CH1,LPTIM2_IN1,I2C4_SCL,,,USART3_DE/USART3_RTS,,OCTOSPIM_P1_IO1,SAI2_FS_A,,FMC_A17/FMC_ALE,DCMI_D12/PSSI_D12,,EVENTOUT/EVENTOUT,, -PortD,PD13,,LPTIM1_OUT,TIM4_CH2,,I2C4_SDA,,,,,OCTOSPIM_P1_IO3,SAI2_SCK_A,UART9_DE/UART9_RTS,FMC_A18,DCMI_D13/PSSI_D13,,EVENTOUT/EVENTOUT,, -PortD,PD14,,,TIM4_CH3,,,,,,UART8_CTS,,,UART9_RX,FMC_D0/FMC_DA0,,,EVENTOUT/EVENTOUT,, -PortD,PD15,,,TIM4_CH4,,,,,,UART8_DE/UART8_RTS,,,UART9_TX,FMC_D1/FMC_DA1,,,EVENTOUT/EVENTOUT,, -PortD,PD2,DEBUG_TRACED2,,TIM3_ETR,,TIM15_BKIN,,,,UART5_RX,LTDC_B7,,,SDMMC1_CMD,DCMI_D11/PSSI_D11,LTDC_B2,EVENTOUT/EVENTOUT,, -PortD,PD3,,,,DFSDM1_CKOUT,,I2S2_CK/SPI2_SCK,,USART2_CTS/USART2_NSS,,,,,FMC_CLK,DCMI_D5/PSSI_D5,LTDC_G7,EVENTOUT/EVENTOUT,, -PortD,PD4,,,,,,,,USART2_DE/USART2_RTS,,,OCTOSPIM_P1_IO4,,FMC_NOE,,,EVENTOUT/EVENTOUT,, -PortD,PD5,,,,,,,,USART2_TX,,,OCTOSPIM_P1_IO5,,FMC_NWE,,,EVENTOUT/EVENTOUT,, -PortD,PD6,,,SAI1_D1,DFSDM1_CKIN4,DFSDM1_DATIN1,I2S3_SDO/SPI3_MOSI,SAI1_SD_A,USART2_RX,,,OCTOSPIM_P1_IO6,SDMMC2_CK,FMC_NWAIT,DCMI_D10/PSSI_D10,LTDC_B2,EVENTOUT/EVENTOUT,, -PortD,PD7,,,,DFSDM1_DATIN4,,I2S1_SDO/SPI1_MOSI,DFSDM1_CKIN1,USART2_CK,,SPDIFRX_IN1,OCTOSPIM_P1_IO7,SDMMC2_CMD,FMC_NE1,,,EVENTOUT/EVENTOUT,, -PortD,PD8,,,,DFSDM1_CKIN3,,,,USART3_TX,,SPDIFRX_IN2,,,FMC_D13/FMC_DA13,,,EVENTOUT/EVENTOUT,, -PortD,PD9,,,,DFSDM1_DATIN3,,,,USART3_RX,,,,,FMC_D14/FMC_DA14,,,EVENTOUT/EVENTOUT,, -PortE,PE0,,LPTIM1_ETR,TIM4_ETR,,LPTIM2_ETR,,,,UART8_RX,,SAI2_MCLK_A,,FMC_NBL0,DCMI_D2/PSSI_D2,LTDC_R0,EVENTOUT/EVENTOUT,, -PortE,PE1,,LPTIM1_IN2,,,,,,,UART8_TX,,,,FMC_NBL1,DCMI_D3/PSSI_D3,LTDC_R6,EVENTOUT/EVENTOUT,, -PortE,PE10,,TIM1_CH2N,,DFSDM1_DATIN4,,,,UART7_CTS,,,OCTOSPIM_P1_IO7,,FMC_D7/FMC_DA7,,,EVENTOUT/EVENTOUT,, -PortE,PE11,,TIM1_CH2,,DFSDM1_CKIN4,,SPI4_NSS,,,,,SAI2_SD_B,OCTOSPIM_P1_NCS,FMC_D8/FMC_DA8,,LTDC_G3,EVENTOUT/EVENTOUT,, -PortE,PE12,,TIM1_CH3N,,DFSDM1_DATIN5,,SPI4_SCK,,,,,SAI2_SCK_B,,FMC_D9/FMC_DA9,COMP1_OUT,LTDC_B4,EVENTOUT/EVENTOUT,, -PortE,PE13,,TIM1_CH3,,DFSDM1_CKIN5,,SPI4_MISO,,,,,SAI2_FS_B,,FMC_D10/FMC_DA10,COMP2_OUT,LTDC_DE,EVENTOUT/EVENTOUT,, -PortE,PE14,,TIM1_CH4,,,,SPI4_MOSI,,,,,SAI2_MCLK_B,,FMC_D11/FMC_DA11,,LTDC_CLK,EVENTOUT/EVENTOUT,, -PortE,PE15,,TIM1_BKIN,,,,,,,,,,USART10_CK,FMC_D12/FMC_DA12,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,LTDC_R7,EVENTOUT/EVENTOUT,, -PortE,PE2,DEBUG_TRACECLK,,SAI1_CK1,,,SPI4_SCK,SAI1_MCLK_A,,,OCTOSPIM_P1_IO2,,USART10_RX,FMC_A23,,,EVENTOUT/EVENTOUT,, -PortE,PE3,DEBUG_TRACED0,,,,TIM15_BKIN,,SAI1_SD_B,,,,,USART10_TX,FMC_A19,,,EVENTOUT/EVENTOUT,, -PortE,PE4,DEBUG_TRACED1,,SAI1_D2,DFSDM1_DATIN3,TIM15_CH1N,SPI4_NSS,SAI1_FS_A,,,,,,FMC_A20,DCMI_D4/PSSI_D4,LTDC_B0,EVENTOUT/EVENTOUT,, -PortE,PE5,DEBUG_TRACED2,,SAI1_CK2,DFSDM1_CKIN3,TIM15_CH1,SPI4_MISO,SAI1_SCK_A,,,,,,FMC_A21,DCMI_D6/PSSI_D6,LTDC_G0,EVENTOUT/EVENTOUT,, -PortE,PE6,DEBUG_TRACED3,TIM1_BKIN2,SAI1_D1,,TIM15_CH2,SPI4_MOSI,SAI1_SD_A,,,,SAI2_MCLK_B,TIM1_BKIN2_COMP1/TIM1_BKIN2_COMP2,FMC_A22,DCMI_D7/PSSI_D7,LTDC_G1,EVENTOUT/EVENTOUT,, -PortE,PE7,,TIM1_ETR,,DFSDM1_DATIN2,,,,UART7_RX,,,OCTOSPIM_P1_IO4,,FMC_D4/FMC_DA4,,,EVENTOUT/EVENTOUT,, -PortE,PE8,,TIM1_CH1N,,DFSDM1_CKIN2,,,,UART7_TX,,,OCTOSPIM_P1_IO5,,FMC_D5/FMC_DA5,COMP2_OUT,,EVENTOUT/EVENTOUT,, -PortE,PE9,,TIM1_CH1,,DFSDM1_CKOUT,,,,UART7_DE/UART7_RTS,,,OCTOSPIM_P1_IO6,,FMC_D6/FMC_DA6,,,EVENTOUT/EVENTOUT,, -PortF,PF0,,,,,I2C2_SDA,,,,,OCTOSPIM_P2_IO0,,,FMC_A0,,,EVENTOUT/EVENTOUT,, -PortF,PF1,,,,,I2C2_SCL,,,,,OCTOSPIM_P2_IO1,,,FMC_A1,,,EVENTOUT/EVENTOUT,, -PortF,PF10,,TIM16_BKIN,SAI1_D3,,PSSI_D15,,,,,OCTOSPIM_P1_CLK,,,,DCMI_D11/PSSI_D11,LTDC_DE,EVENTOUT/EVENTOUT,, -PortF,PF11,,,,,,SPI5_MOSI,,,,OCTOSPIM_P1_NCLK,SAI2_SD_B,,FMC_SDNRAS,DCMI_D12/PSSI_D12,,EVENTOUT/EVENTOUT,ADC1_INP2, -PortF,PF12,,,,,,,,,,OCTOSPIM_P2_DQS,,,FMC_A6,,,EVENTOUT/EVENTOUT,ADC1_INN2/ADC1_INP6, -PortF,PF13,,,,DFSDM1_DATIN6,I2C4_SMBA,,,,,,,,FMC_A7,,,EVENTOUT/EVENTOUT,ADC2_INP2, -PortF,PF14,,,,DFSDM1_CKIN6,I2C4_SCL,,,,,,,,FMC_A8,,,EVENTOUT/EVENTOUT,ADC2_INN2/ADC2_INP6, -PortF,PF15,,,,,I2C4_SDA,,,,,,,,FMC_A9,,,EVENTOUT/EVENTOUT,, -PortF,PF2,,,,,I2C2_SMBA,,,,,OCTOSPIM_P2_IO2,,,FMC_A2,,,EVENTOUT/EVENTOUT,, -PortF,PF3,,,,,,,,,,OCTOSPIM_P2_IO3,,,FMC_A3,,,EVENTOUT/EVENTOUT,, -PortF,PF4,,,,,,,,,,OCTOSPIM_P2_CLK,,,FMC_A4,,,EVENTOUT/EVENTOUT,, -PortF,PF5,,,,,,,,,,OCTOSPIM_P2_NCLK,,,FMC_A5,,,EVENTOUT/EVENTOUT,, -PortF,PF6,,TIM16_CH1,,,,SPI5_NSS,SAI1_SD_B,UART7_RX,,,OCTOSPIM_P1_IO3,,,,,EVENTOUT/EVENTOUT,, -PortF,PF7,,TIM17_CH1,,,,SPI5_SCK,SAI1_MCLK_B,UART7_TX,,,OCTOSPIM_P1_IO2,,,,,EVENTOUT/EVENTOUT,, -PortF,PF8,,TIM16_CH1N,,,,SPI5_MISO,SAI1_SCK_B,UART7_DE/UART7_RTS,,TIM13_CH1,OCTOSPIM_P1_IO0,,,,,EVENTOUT/EVENTOUT,, -PortF,PF9,,TIM17_CH1N,,,,SPI5_MOSI,SAI1_FS_B,UART7_CTS,,TIM14_CH1,OCTOSPIM_P1_IO1,,,,,EVENTOUT/EVENTOUT,, -PortG,PG0,,,,,,,,,,OCTOSPIM_P2_IO4,,UART9_RX,FMC_A10,,,EVENTOUT/EVENTOUT,, -PortG,PG1,,,,,,,,,,OCTOSPIM_P2_IO5,,UART9_TX,FMC_A11,,,EVENTOUT/EVENTOUT,, -PortG,PG10,,,,OCTOSPIM_P2_IO6,,I2S1_WS/SPI1_NSS,,,,LTDC_G3,SAI2_SD_B,SDMMC2_D1,FMC_NE3,DCMI_D2/PSSI_D2,LTDC_B2,EVENTOUT/EVENTOUT,, -PortG,PG11,,LPTIM1_IN2,,,,I2S1_CK/SPI1_SCK,,,SPDIFRX_IN1,OCTOSPIM_P2_IO7,SDMMC2_D2,USART10_RX,,DCMI_D3/PSSI_D3,LTDC_B3,EVENTOUT/EVENTOUT,, -PortG,PG12,,LPTIM1_IN1,,OCTOSPIM_P2_NCS,,I2S6_SDI/SPI6_MISO,,USART6_DE/USART6_RTS,SPDIFRX_IN2,LTDC_B4,SDMMC2_D3,USART10_TX,FMC_NE4,,LTDC_B1,EVENTOUT/EVENTOUT,, -PortG,PG13,DEBUG_TRACED0,LPTIM1_OUT,,,,I2S6_CK/SPI6_SCK,,USART6_CTS/USART6_NSS,,,SDMMC2_D6,USART10_CTS/USART10_NSS,FMC_A24,,LTDC_R0,EVENTOUT/EVENTOUT,, -PortG,PG14,DEBUG_TRACED1,LPTIM1_ETR,,,,I2S6_SDO/SPI6_MOSI,,USART6_TX,,OCTOSPIM_P1_IO7,SDMMC2_D7,USART10_DE/USART10_RTS,FMC_A25,,LTDC_B0,EVENTOUT/EVENTOUT,, -PortG,PG15,,,,,,,,USART6_CTS/USART6_NSS,,OCTOSPIM_P2_DQS,,USART10_CK,FMC_SDNCAS,DCMI_D13/PSSI_D13,,EVENTOUT/EVENTOUT,, -PortG,PG2,,,,TIM8_BKIN,,,,,,,,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2,FMC_A12,,,EVENTOUT/EVENTOUT,, -PortG,PG3,,,,TIM8_BKIN2,,,,,,,,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2,FMC_A13,,,EVENTOUT/EVENTOUT,, -PortG,PG4,,TIM1_BKIN2,,,,,,,,,,TIM1_BKIN2_COMP1/TIM1_BKIN2_COMP2,FMC_A14/FMC_BA0,,,EVENTOUT/EVENTOUT,, -PortG,PG5,,TIM1_ETR,,,,,,,,,,,FMC_A15/FMC_BA1,,,EVENTOUT/EVENTOUT,, -PortG,PG6,,TIM17_BKIN,,,,,,,,,OCTOSPIM_P1_NCS,,FMC_NE3,DCMI_D12/PSSI_D12,LTDC_R7,EVENTOUT/EVENTOUT,, -PortG,PG7,,,,,,,SAI1_MCLK_A,USART6_CK,,OCTOSPIM_P2_DQS,,,FMC_INT,DCMI_D13/PSSI_D13,LTDC_CLK,EVENTOUT/EVENTOUT,, -PortG,PG8,,,,TIM8_ETR,,I2S6_WS/SPI6_NSS,,USART6_DE/USART6_RTS,SPDIFRX_IN3,,,,FMC_SDCLK,,LTDC_G7,EVENTOUT/EVENTOUT,, -PortG,PG9,,,,,,I2S1_SDI/SPI1_MISO,,USART6_RX,SPDIFRX_IN4,OCTOSPIM_P1_IO6,SAI2_FS_B,SDMMC2_D0,FMC_NCE/FMC_NE2,DCMI_VSYNC/PSSI_RDY,,EVENTOUT/EVENTOUT,, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortH,PH10,,,TIM5_CH1,,I2C4_SMBA,,,,,,,,FMC_D18,DCMI_D1/PSSI_D1,LTDC_R4,EVENTOUT/EVENTOUT,, -PortH,PH11,,,TIM5_CH2,,I2C4_SCL,,,,,,,,FMC_D19,DCMI_D2/PSSI_D2,LTDC_R5,EVENTOUT/EVENTOUT,, -PortH,PH12,,,TIM5_CH3,,I2C4_SDA,,,,,,,,FMC_D20,DCMI_D3/PSSI_D3,LTDC_R6,EVENTOUT/EVENTOUT,, -PortH,PH13,,,,TIM8_CH1N,,,,,UART4_TX,FDCAN1_TX,,,FMC_D21,,LTDC_G2,EVENTOUT/EVENTOUT,, -PortH,PH14,,,,TIM8_CH2N,,,,,UART4_RX,FDCAN1_RX,,,FMC_D22,DCMI_D4/PSSI_D4,LTDC_G3,EVENTOUT/EVENTOUT,, -PortH,PH15,,,,TIM8_CH3N,,,,,,,,,FMC_D23,DCMI_D11/PSSI_D11,LTDC_G4,EVENTOUT/EVENTOUT,, -PortH,PH2,,LPTIM1_IN2,,,,,,,,OCTOSPIM_P1_IO4,SAI2_SCK_B,,FMC_SDCKE0,,LTDC_R0,EVENTOUT/EVENTOUT,, -PortH,PH3,,,,,,,,,,OCTOSPIM_P1_IO5,SAI2_MCLK_B,,FMC_SDNE0,,LTDC_R1,EVENTOUT/EVENTOUT,, -PortH,PH4,,,,,I2C2_SCL,,,,,LTDC_G5,USB_OTG_HS_ULPI_NXT,,,PSSI_D14,LTDC_G4,EVENTOUT/EVENTOUT,, -PortH,PH5,,,,,I2C2_SDA,SPI5_NSS,,,,,,,FMC_SDNWE,,,EVENTOUT/EVENTOUT,, -PortH,PH6,,,TIM12_CH1,,I2C2_SMBA,SPI5_SCK,,,,,,,FMC_SDNE1,DCMI_D8/PSSI_D8,,EVENTOUT/EVENTOUT,, -PortH,PH7,,,,,I2C3_SCL,SPI5_MISO,,,,,,,FMC_SDCKE1,DCMI_D9/PSSI_D9,,EVENTOUT/EVENTOUT,, -PortH,PH8,,,TIM5_ETR,,I2C3_SDA,,,,,,,,FMC_D16,DCMI_HSYNC/PSSI_DE,LTDC_R2,EVENTOUT/EVENTOUT,, -PortH,PH9,,,TIM12_CH2,,I2C3_SMBA,,,,,,,,FMC_D17,DCMI_D0/PSSI_D0,LTDC_R3,EVENTOUT/EVENTOUT,, -PortI,PI0,,,TIM5_CH4,,,I2S2_WS/SPI2_NSS,,,,,,,FMC_D24,DCMI_D13/PSSI_D13,LTDC_G5,EVENTOUT/EVENTOUT,, -PortI,PI1,,,,TIM8_BKIN2,,I2S2_CK/SPI2_SCK,,,,,,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2,FMC_D25,DCMI_D8/PSSI_D8,LTDC_G6,EVENTOUT/EVENTOUT,, -PortI,PI10,,,,OCTOSPIM_P2_IO1,,,,,,,,,FMC_D31,PSSI_D14,LTDC_HSYNC,EVENTOUT/EVENTOUT,, -PortI,PI11,,,,OCTOSPIM_P2_IO2,,,,,,LTDC_G6,USB_OTG_HS_ULPI_DIR,,,PSSI_D15,,EVENTOUT/EVENTOUT,, -PortI,PI12,,,,OCTOSPIM_P2_IO3,,,,,,,,,,,LTDC_HSYNC,EVENTOUT/EVENTOUT,, -PortI,PI13,,,,OCTOSPIM_P2_CLK,,,,,,,,,,,LTDC_VSYNC,EVENTOUT/EVENTOUT,, -PortI,PI14,,,,OCTOSPIM_P2_NCLK,,,,,,,,,,,LTDC_CLK,EVENTOUT/EVENTOUT,, -PortI,PI15,,,,,,,,,,LTDC_G2,,,,,LTDC_R0,EVENTOUT/EVENTOUT,, -PortI,PI2,,,,TIM8_CH4,,I2S2_SDI/SPI2_MISO,,,,,,,FMC_D26,DCMI_D9/PSSI_D9,LTDC_G7,EVENTOUT/EVENTOUT,, -PortI,PI3,,,,TIM8_ETR,,I2S2_SDO/SPI2_MOSI,,,,,,,FMC_D27,DCMI_D10/PSSI_D10,,EVENTOUT/EVENTOUT,, -PortI,PI4,,,,TIM8_BKIN,,,,,,,SAI2_MCLK_A,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2,FMC_NBL2,DCMI_D5/PSSI_D5,LTDC_B4,EVENTOUT/EVENTOUT,, -PortI,PI5,,,,TIM8_CH1,,,,,,,SAI2_SCK_A,,FMC_NBL3,DCMI_VSYNC/PSSI_RDY,LTDC_B5,EVENTOUT/EVENTOUT,, -PortI,PI6,,,,TIM8_CH2,,,,,,,SAI2_SD_A,,FMC_D28,DCMI_D6/PSSI_D6,LTDC_B6,EVENTOUT/EVENTOUT,, -PortI,PI7,,,,TIM8_CH3,,,,,,,SAI2_FS_A,,FMC_D29,DCMI_D7/PSSI_D7,LTDC_B7,EVENTOUT/EVENTOUT,, -PortI,PI8,,,,,,,,,,,,,,,,EVENTOUT/EVENTOUT,, -PortI,PI9,,,,OCTOSPIM_P2_IO0,,,,,UART4_RX,FDCAN1_RX,,,FMC_D30,,LTDC_VSYNC,EVENTOUT/EVENTOUT,, -PortJ,PJ0,,,,,,,,,,LTDC_R7,,,,,LTDC_R1,EVENTOUT/EVENTOUT,, -PortJ,PJ1,,,,OCTOSPIM_P2_IO4,,,,,,,,,,,LTDC_R2,EVENTOUT/EVENTOUT,, -PortJ,PJ10,,TIM1_CH2N,,TIM8_CH2,,SPI5_MOSI,,,,,,,,,LTDC_G3,EVENTOUT/EVENTOUT,, -PortJ,PJ11,,TIM1_CH2,,TIM8_CH2N,,SPI5_MISO,,,,,,,,,LTDC_G4,EVENTOUT/EVENTOUT,, -PortJ,PJ12,DEBUG_TRGOUT,,,,,,,,,LTDC_G3,,,,,LTDC_B0,EVENTOUT/EVENTOUT,, -PortJ,PJ13,,,,,,,,,,LTDC_B4,,,,,LTDC_B1,EVENTOUT/EVENTOUT,, -PortJ,PJ14,,,,,,,,,,,,,,,LTDC_B2,EVENTOUT/EVENTOUT,, -PortJ,PJ15,,,,,,,,,,,,,,,LTDC_B3,EVENTOUT/EVENTOUT,, -PortJ,PJ2,,,,OCTOSPIM_P2_IO5,,,,,,,,,,,LTDC_R3,EVENTOUT/EVENTOUT,, -PortJ,PJ3,,,,,,,,,,,,UART9_DE/UART9_RTS,,,LTDC_R4,EVENTOUT/EVENTOUT,, -PortJ,PJ4,,,,,,,,,,,,UART9_CTS,,,LTDC_R5,EVENTOUT/EVENTOUT,, -PortJ,PJ5,,,,,,,,,,,,,,,LTDC_R6,EVENTOUT/EVENTOUT,, -PortJ,PJ6,,,,TIM8_CH2,,,,,,,,,,,LTDC_R7,EVENTOUT/EVENTOUT,, -PortJ,PJ7,DEBUG_TRGIN,,,TIM8_CH2N,,,,,,,,,,,LTDC_G0,EVENTOUT/EVENTOUT,, -PortJ,PJ8,,TIM1_CH3N,,TIM8_CH1,,,,,UART8_TX,,,,,,LTDC_G1,EVENTOUT/EVENTOUT,, -PortJ,PJ9,,TIM1_CH3,,TIM8_CH1N,,,,,UART8_RX,,,,,,LTDC_G2,EVENTOUT/EVENTOUT,, -PortK,PK0,,TIM1_CH1N,,TIM8_CH3,,SPI5_SCK,,,,,,,,,LTDC_G5,EVENTOUT/EVENTOUT,, -PortK,PK1,,TIM1_CH1,,TIM8_CH3N,,SPI5_NSS,,,,,,,,,LTDC_G6,EVENTOUT/EVENTOUT,, -PortK,PK2,,TIM1_BKIN,,TIM8_BKIN,,,,,,,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,,,LTDC_G7,EVENTOUT/EVENTOUT,, -PortK,PK3,,,,OCTOSPIM_P2_IO6,,,,,,,,,,,LTDC_B4,EVENTOUT/EVENTOUT,, -PortK,PK4,,,,OCTOSPIM_P2_IO7,,,,,,,,,,,LTDC_B5,EVENTOUT/EVENTOUT,, -PortK,PK5,,,,OCTOSPIM_P2_NCS,,,,,,,,,,,LTDC_B6,EVENTOUT/EVENTOUT,, -PortK,PK6,,,,OCTOSPIM_P2_DQS,,,,,,,,,,,LTDC_B7,EVENTOUT/EVENTOUT,, -PortK,PK7,,,,,,,,,,,,,,,LTDC_DE,EVENTOUT/EVENTOUT,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS ,LPTIM1/TIM1/2/16/17,PDM_SAI1/TIM3/4/5/12/15,DFSDM1/LPTIM2/3/LPUART1/OCTOSPIM_P1/2/TIM8,CEC/DCMI/PSSI/DFSDM1/2/I2C1/2/3/4/LPTIM2/TIM15/USART1,CEC/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/SPI6/I2S6,DFSDM1/2/I2C4/OCTOSPIM_P1/SAI1/SPI3/I2S3/UART4,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/I2S6/UART7/USART1/2/3/6,LPUART1/SAI2/SDMMC1/SPDIFRX1/SPI6/I2S6/UART4/5/8,FDCAN1/2/FMC/LCD/OCTOSPIM_P1/2/SDMMC2/SPDIFRX1/TIM13/14,CRS/FMC/LCD/OCTOSPIM_P1/OTG1_FS/OTG1_HS/SAI2/SDMMC2/TIM8,DFSDM1/2/I2C4/LCD/MDIOS/OCTOSPIM_P1/SDMMC2/SWPMI1/TIM1/8/UART7/9/USART10,FMC/LCD/MDIOS/SDMMC1/TIM1/8 ,COMP/DCMI/PSSI/LCD/TIM1 ,LCD/UART5 ,SYS ,ADC +PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN ,I2S6_WS/SPI6_NSS , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B , , , , ,EVENTOUT,ADC1_INP16 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_DE/USART2_RTS ,UART4_RX ,OCTOSPIM_P1_IO3 ,SAI2_MCLK_B ,OCTOSPIM_P1_DQS , , ,LTDC_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , ,TIM15_CH1 , ,DFSDM2_CKIN1 ,USART2_TX ,SAI2_SCK_B , , , ,MDIOS_MDIO , ,LTDC_R1 ,EVENTOUT,ADC1_INP14 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,OCTOSPIM_P1_CLK ,TIM15_CH2 ,I2S6_MCK , ,USART2_RX , ,LTDC_B2 ,USB_OTG_HS_ULPI_D0 , , , ,LTDC_B5 ,EVENTOUT,ADC1_INP15 +PortA,PA4 , , ,TIM5_ETR , , ,I2S1_WS/SPI1_NSS ,I2S3_WS/SPI3_NSS ,USART2_CK ,I2S6_WS/SPI6_NSS , , , , ,DCMI_HSYNC/PSSI_DE ,LTDC_VSYNC,EVENTOUT,ADC1_INP18 +PortA,PA5 ,PWR_NDSTOP2 ,TIM2_CH1/TIM2_ETR , ,TIM8_CH1N , ,I2S1_CK/SPI1_SCK , , ,I2S6_CK/SPI6_SCK , ,USB_OTG_HS_ULPI_CK , , ,PSSI_D14 ,LTDC_R4 ,EVENTOUT,ADC1_INN18/ADC1_INP19 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,I2S1_SDI/SPI1_MISO ,OCTOSPIM_P1_IO3 , ,I2S6_SDI/SPI6_MISO ,TIM13_CH1 ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,MDIOS_MDC ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2 ,DCMI_PIXCLK/PSSI_PDCK ,LTDC_G2 ,EVENTOUT,ADC1_INP3/ADC2_INP3 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N ,DFSDM2_DATIN1 ,I2S1_SDO/SPI1_MOSI , , ,I2S6_SDO/SPI6_MOSI ,TIM14_CH1 ,OCTOSPIM_P1_IO2 , ,FMC_SDNWE , ,LTDC_VSYNC,EVENTOUT,ADC1_INN3/ADC1_INP7/ADC2_INN3/ADC2_INP7 +PortA,PA8 ,RCC_MCO_1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,USB_OTG_HS_SOF ,UART7_RX ,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2,LTDC_B3 ,LTDC_R6 ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,LPUART1_TX ,I2C3_SMBA ,I2S2_CK/SPI2_SCK , ,USART1_TX , , , , , ,DCMI_D0/PSSI_D0 ,LTDC_R5 ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , ,LPUART1_RX , , , ,USART1_RX , , ,USB_OTG_HS_ID ,MDIOS_MDIO ,LTDC_B4 ,DCMI_D1/PSSI_D1 ,LTDC_B1 ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 , ,LPUART1_CTS , ,I2S2_WS/SPI2_NSS ,UART4_RX ,USART1_CTS/USART1_NSS , ,FDCAN1_RX , , , , ,LTDC_R4 ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , ,LPUART1_DE/LPUART1_RTS , ,I2S2_CK/SPI2_SCK ,UART4_TX ,USART1_DE/USART1_RTS ,SAI2_FS_B ,FDCAN1_TX , , , , ,LTDC_R5 ,EVENTOUT, +PortA,PA13,DEBUG_JTMS/SWDIO, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,DEBUG_JTCK/SWCLK, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,DEBUG_JTDI ,TIM2_CH1/TIM2_ETR , , ,CEC ,I2S1_WS/SPI1_NSS ,I2S3_WS/SPI3_NSS ,I2S6_WS/SPI6_NSS ,UART4_DE/UART4_RTS ,LTDC_R3 , ,UART7_TX , , ,LTDC_B6 ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N ,DFSDM2_CKOUT , ,DFSDM1_CKOUT , ,UART4_CTS ,LTDC_R3 ,USB_OTG_HS_ULPI_D1 ,OCTOSPIM_P1_IO1 , , ,LTDC_G1 ,EVENTOUT,ADC1_INN5/ADC1_INP9/ADC2_INN5/ADC2_INP9 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM1_DATIN1 , , ,LTDC_R6 ,USB_OTG_HS_ULPI_D2 ,OCTOSPIM_P1_IO0 , , ,LTDC_G0 ,EVENTOUT,ADC1_INP5/ADC2_INP5 +PortB,PB2 ,RTC_OUT_ALARM , ,SAI1_D1 , ,DFSDM1_CKIN1 , ,SAI1_SD_A ,I2S3_SDO/SPI3_MOSI , ,OCTOSPIM_P1_CLK ,OCTOSPIM_P1_DQS , , , , ,EVENTOUT, +PortB,PB3 ,DEBUG_JTDO/SWO ,TIM2_CH2 , , , ,I2S1_CK/SPI1_SCK ,I2S3_CK/SPI3_SCK , ,I2S6_CK/SPI6_SCK ,SDMMC2_D2 ,CRS_SYNC ,UART7_RX , , , ,EVENTOUT, +PortB,PB4 , ,TIM16_BKIN ,TIM3_CH1 , , ,I2S1_SDI/SPI1_MISO ,I2S3_SDI/SPI3_MISO ,I2S2_WS/SPI2_NSS ,I2S6_SDI/SPI6_MISO ,SDMMC2_D3 , ,UART7_TX , , , ,EVENTOUT, +PortB,PB5 , ,TIM17_BKIN ,TIM3_CH2 , ,I2C1_SMBA ,I2S1_SDO/SPI1_MOSI ,I2C4_SMBA ,I2S3_SDO/SPI3_MOSI ,I2S6_SDO/SPI6_MOSI ,FDCAN2_RX ,USB_OTG_HS_ULPI_D7 ,LTDC_B5 ,FMC_SDCKE1 ,DCMI_D10/PSSI_D10 ,UART5_RX ,EVENTOUT, +PortB,PB6 , ,TIM16_CH1N ,TIM4_CH1 , ,I2C1_SCL ,CEC ,I2C4_SCL ,USART1_TX ,LPUART1_TX ,FDCAN2_TX ,OCTOSPIM_P1_NCS ,DFSDM1_DATIN5 ,FMC_SDNE1 ,DCMI_D5/PSSI_D5 ,UART5_TX ,EVENTOUT, +PortB,PB7 , ,TIM17_CH1N ,TIM4_CH2 , ,I2C1_SDA , ,I2C4_SDA ,USART1_RX ,LPUART1_RX , , ,DFSDM1_CKIN5 ,FMC_NL ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortB,PB8 , ,TIM16_CH1 ,TIM4_CH3 ,DFSDM1_CKIN7 ,I2C1_SCL , ,I2C4_SCL ,SDMMC1_CKIN ,UART4_RX ,FDCAN1_RX ,SDMMC2_D4 , ,SDMMC1_D4 ,DCMI_D6/PSSI_D6 ,LTDC_B6 ,EVENTOUT, +PortB,PB9 , ,TIM17_CH1 ,TIM4_CH4 ,DFSDM1_DATIN7 ,I2C1_SDA ,I2S2_WS/SPI2_NSS ,I2C4_SDA ,SDMMC1_CDIR ,UART4_TX ,FDCAN1_TX ,SDMMC2_D5 ,I2C4_SMBA ,SDMMC1_D5 ,DCMI_D7/PSSI_D7 ,LTDC_B7 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , ,LPTIM2_IN1 ,I2C2_SCL ,I2S2_CK/SPI2_SCK ,DFSDM1_DATIN7 ,USART3_TX , ,OCTOSPIM_P1_NCS ,USB_OTG_HS_ULPI_D3 , , , ,LTDC_G4 ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , ,LPTIM2_ETR ,I2C2_SDA , ,DFSDM1_CKIN7 ,USART3_RX , , ,USB_OTG_HS_ULPI_D4 , , , ,LTDC_G5 ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,OCTOSPIM_P1_NCLK ,I2C2_SMBA ,I2S2_WS/SPI2_NSS ,DFSDM1_DATIN1 ,USART3_CK , ,FDCAN2_RX ,USB_OTG_HS_ULPI_D5 ,DFSDM2_DATIN1 , ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,UART5_RX ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , ,LPTIM2_OUT ,DFSDM2_CKIN1 ,I2S2_CK/SPI2_SCK ,DFSDM1_CKIN1 ,USART3_CTS/USART3_NSS , ,FDCAN2_TX ,USB_OTG_HS_ULPI_D6 , ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 ,UART5_TX ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8_CH2N ,USART1_TX ,I2S2_SDI/SPI2_MISO ,DFSDM1_DATIN2 ,USART3_DE/USART3_RTS ,UART4_DE/UART4_RTS ,SDMMC2_D0 , , , , ,LTDC_CLK ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,I2S2_SDO/SPI2_MOSI ,DFSDM1_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , , , ,LTDC_G7 ,EVENTOUT, +PortC,PC0 , , , ,DFSDM1_CKIN0 , , ,DFSDM1_DATIN4 , ,SAI2_FS_B ,FMC_A25 ,USB_OTG_HS_ULPI_STP ,LTDC_G2 ,FMC_SDNWE , ,LTDC_R5 ,EVENTOUT,ADC1_INP10/ADC2_INP10 +PortC,PC1 ,DEBUG_TRACED0 , ,SAI1_D1 ,DFSDM1_DATIN0 ,DFSDM1_CKIN4 ,I2S2_SDO/SPI2_MOSI ,SAI1_SD_A , , ,SDMMC2_CK ,OCTOSPIM_P1_IO4 , ,MDIOS_MDC , ,LTDC_G5 ,EVENTOUT,ADC1_INN10/ADC1_INP11/ADC2_INN10/ADC2_INP11 +PortC,PC2 ,PWR_CSTOP , , ,DFSDM1_CKIN1 , ,I2S2_SDI/SPI2_MISO ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,USB_OTG_HS_ULPI_DIR ,OCTOSPIM_P1_IO5 ,FMC_SDNE0 , , ,EVENTOUT,ADC1_INN11/ADC1_INP12/ADC2_INN11/ADC2_INP12 +PortC,PC3 ,PWR_CSLEEP , , ,DFSDM1_DATIN1 , ,I2S2_SDO/SPI2_MOSI , , , ,OCTOSPIM_P1_IO0 ,USB_OTG_HS_ULPI_NXT ,OCTOSPIM_P1_IO6 ,FMC_SDCKE0 , , ,EVENTOUT,ADC2_INP1 +PortC,PC4 , , , ,DFSDM1_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX_IN3 , , ,FMC_SDNE0 , ,LTDC_R7 ,EVENTOUT,ADC1_INP4/ADC2_INP4 +PortC,PC5 , , ,SAI1_D3 ,DFSDM1_DATIN2 ,PSSI_D15 , , , , ,SPDIFRX_IN4 ,OCTOSPIM_P1_DQS , ,FMC_SDCKE0 ,COMP1_OUT ,LTDC_DE ,EVENTOUT,ADC1_INN4/ADC1_INP8/ADC2_INN4/ADC2_INP8 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,DFSDM1_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0/PSSI_D0 ,LTDC_HSYNC,EVENTOUT, +PortC,PC7 ,DEBUG_TRGIO , ,TIM3_CH2 ,TIM8_CH2 ,DFSDM1_DATIN3 , ,I2S3_MCK ,USART6_RX ,SDMMC1_D123DIR ,FMC_NE1 ,SDMMC2_D7 ,SWPMI1_TX ,SDMMC1_D7 ,DCMI_D1/PSSI_D1 ,LTDC_G6 ,EVENTOUT, +PortC,PC8 ,DEBUG_TRACED1 , ,TIM3_CH3 ,TIM8_CH3 , , , ,USART6_CK ,UART5_DE/UART5_RTS ,FMC_NCE/FMC_NE2 ,FMC_INT ,SWPMI1_RX ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, +PortC,PC9 ,RCC_MCO_2 , ,TIM3_CH4 ,TIM8_CH4 ,I2C3_SDA ,I2S_CKIN , , ,UART5_CTS ,OCTOSPIM_P1_IO0 ,LTDC_G3 ,SWPMI1_SUSPEND ,SDMMC1_D1 ,DCMI_D3/PSSI_D3 ,LTDC_B2 ,EVENTOUT, +PortC,PC10, , , ,DFSDM1_CKIN5 ,DFSDM2_CKIN0 , ,I2S3_CK/SPI3_SCK ,USART3_TX ,UART4_TX ,OCTOSPIM_P1_IO1 ,LTDC_B1 ,SWPMI1_RX ,SDMMC1_D2 ,DCMI_D8/PSSI_D8 ,LTDC_R2 ,EVENTOUT, +PortC,PC11, , , ,DFSDM1_DATIN5 ,DFSDM2_DATIN0 , ,I2S3_SDI/SPI3_MISO ,USART3_RX ,UART4_RX ,OCTOSPIM_P1_NCS , , ,SDMMC1_D3 ,DCMI_D4/PSSI_D4 ,LTDC_B4 ,EVENTOUT, +PortC,PC12,DEBUG_TRACED3 , ,TIM15_CH1 , ,DFSDM2_CKOUT ,I2S6_CK/SPI6_SCK ,I2S3_SDO/SPI3_MOSI ,USART3_CK ,UART5_TX , , , ,SDMMC1_CK ,DCMI_D9/PSSI_D9 ,LTDC_R6 ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,DFSDM1_CKIN6 , , , , ,UART4_RX ,FDCAN1_RX , ,UART9_CTS ,FMC_D2/FMC_DA2 , ,LTDC_B1 ,EVENTOUT, +PortD,PD1 , , , ,DFSDM1_DATIN6 , , , , ,UART4_TX ,FDCAN1_TX , , ,FMC_D3/FMC_DA3 , , ,EVENTOUT, +PortD,PD2 ,DEBUG_TRACED2 , ,TIM3_ETR , ,TIM15_BKIN , , , ,UART5_RX ,LTDC_B7 , , ,SDMMC1_CMD ,DCMI_D11/PSSI_D11 ,LTDC_B2 ,EVENTOUT, +PortD,PD3 , , , ,DFSDM1_CKOUT , ,I2S2_CK/SPI2_SCK , ,USART2_CTS/USART2_NSS , , , , ,FMC_CLK ,DCMI_D5/PSSI_D5 ,LTDC_G7 ,EVENTOUT, +PortD,PD4 , , , , , , , ,USART2_DE/USART2_RTS , , ,OCTOSPIM_P1_IO4 , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , ,OCTOSPIM_P1_IO5 , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , ,SAI1_D1 ,DFSDM1_CKIN4 ,DFSDM1_DATIN1 ,I2S3_SDO/SPI3_MOSI ,SAI1_SD_A ,USART2_RX , , ,OCTOSPIM_P1_IO6 ,SDMMC2_CK ,FMC_NWAIT ,DCMI_D10/PSSI_D10 ,LTDC_B2 ,EVENTOUT, +PortD,PD7 , , , ,DFSDM1_DATIN4 , ,I2S1_SDO/SPI1_MOSI ,DFSDM1_CKIN1 ,USART2_CK , ,SPDIFRX_IN1 ,OCTOSPIM_P1_IO7 ,SDMMC2_CMD ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , ,DFSDM1_CKIN3 , , , ,USART3_TX , ,SPDIFRX_IN2 , , ,FMC_D13/FMC_DA13 , , ,EVENTOUT, +PortD,PD9 , , , ,DFSDM1_DATIN3 , , , ,USART3_RX , , , , ,FMC_D14/FMC_DA14 , , ,EVENTOUT, +PortD,PD10, , , ,DFSDM1_CKOUT ,DFSDM2_CKOUT , , ,USART3_CK , , , , ,FMC_D15/FMC_DA15 , ,LTDC_B3 ,EVENTOUT, +PortD,PD11, , , ,LPTIM2_IN2 ,I2C4_SMBA , , ,USART3_CTS/USART3_NSS , ,OCTOSPIM_P1_IO0 ,SAI2_SD_A , ,FMC_A16/FMC_CLE , , ,EVENTOUT, +PortD,PD12, ,LPTIM1_IN1 ,TIM4_CH1 ,LPTIM2_IN1 ,I2C4_SCL , , ,USART3_DE/USART3_RTS , ,OCTOSPIM_P1_IO1 ,SAI2_FS_A , ,FMC_A17/FMC_ALE ,DCMI_D12/PSSI_D12 , ,EVENTOUT, +PortD,PD13, ,LPTIM1_OUT ,TIM4_CH2 , ,I2C4_SDA , , , , ,OCTOSPIM_P1_IO3 ,SAI2_SCK_A ,UART9_DE/UART9_RTS ,FMC_A18 ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , ,UART8_CTS , , ,UART9_RX ,FMC_D0/FMC_DA0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , ,UART8_DE/UART8_RTS , , ,UART9_TX ,FMC_D1/FMC_DA1 , , ,EVENTOUT, +PortE,PE0 , ,LPTIM1_ETR ,TIM4_ETR , ,LPTIM2_ETR , , , ,UART8_RX , ,SAI2_MCLK_A , ,FMC_NBL0 ,DCMI_D2/PSSI_D2 ,LTDC_R0 ,EVENTOUT, +PortE,PE1 , ,LPTIM1_IN2 , , , , , , ,UART8_TX , , , ,FMC_NBL1 ,DCMI_D3/PSSI_D3 ,LTDC_R6 ,EVENTOUT, +PortE,PE2 ,DEBUG_TRACECLK , ,SAI1_CK1 , , ,SPI4_SCK ,SAI1_MCLK_A , , ,OCTOSPIM_P1_IO2 , ,USART10_RX ,FMC_A23 , , ,EVENTOUT, +PortE,PE3 ,DEBUG_TRACED0 , , , ,TIM15_BKIN , ,SAI1_SD_B , , , , ,USART10_TX ,FMC_A19 , , ,EVENTOUT, +PortE,PE4 ,DEBUG_TRACED1 , ,SAI1_D2 ,DFSDM1_DATIN3 ,TIM15_CH1N ,SPI4_NSS ,SAI1_FS_A , , , , , ,FMC_A20 ,DCMI_D4/PSSI_D4 ,LTDC_B0 ,EVENTOUT, +PortE,PE5 ,DEBUG_TRACED2 , ,SAI1_CK2 ,DFSDM1_CKIN3 ,TIM15_CH1 ,SPI4_MISO ,SAI1_SCK_A , , , , , ,FMC_A21 ,DCMI_D6/PSSI_D6 ,LTDC_G0 ,EVENTOUT, +PortE,PE6 ,DEBUG_TRACED3 ,TIM1_BKIN2 ,SAI1_D1 , ,TIM15_CH2 ,SPI4_MOSI ,SAI1_SD_A , , , ,SAI2_MCLK_B ,TIM1_BKIN2_COMP1/TIM1_BKIN2_COMP2 ,FMC_A22 ,DCMI_D7/PSSI_D7 ,LTDC_G1 ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , ,DFSDM1_DATIN2 , , , ,UART7_RX , , ,OCTOSPIM_P1_IO4 , ,FMC_D4/FMC_DA4 , , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , ,DFSDM1_CKIN2 , , , ,UART7_TX , , ,OCTOSPIM_P1_IO5 , ,FMC_D5/FMC_DA5 ,COMP2_OUT , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , ,DFSDM1_CKOUT , , , ,UART7_DE/UART7_RTS , , ,OCTOSPIM_P1_IO6 , ,FMC_D6/FMC_DA6 , , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , ,DFSDM1_DATIN4 , , , ,UART7_CTS , , ,OCTOSPIM_P1_IO7 , ,FMC_D7/FMC_DA7 , , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , ,DFSDM1_CKIN4 , ,SPI4_NSS , , , , ,SAI2_SD_B ,OCTOSPIM_P1_NCS ,FMC_D8/FMC_DA8 , ,LTDC_G3 ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , ,DFSDM1_DATIN5 , ,SPI4_SCK , , , , ,SAI2_SCK_B , ,FMC_D9/FMC_DA9 ,COMP1_OUT ,LTDC_B4 ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , ,DFSDM1_CKIN5 , ,SPI4_MISO , , , , ,SAI2_FS_B , ,FMC_D10/FMC_DA10 ,COMP2_OUT ,LTDC_DE ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 , , , ,SPI4_MOSI , , , , ,SAI2_MCLK_B , ,FMC_D11/FMC_DA11 , ,LTDC_CLK ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , , , , , , , , , ,USART10_CK ,FMC_D12/FMC_DA12 ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2,LTDC_R7 ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , ,OCTOSPIM_P2_IO0 , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , ,OCTOSPIM_P2_IO1 , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , ,OCTOSPIM_P2_IO2 , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , ,OCTOSPIM_P2_IO3 , , ,FMC_A3 , , ,EVENTOUT, +PortF,PF4 , , , , , , , , , ,OCTOSPIM_P2_CLK , , ,FMC_A4 , , ,EVENTOUT, +PortF,PF5 , , , , , , , , , ,OCTOSPIM_P2_NCLK , , ,FMC_A5 , , ,EVENTOUT, +PortF,PF6 , ,TIM16_CH1 , , , ,SPI5_NSS ,SAI1_SD_B ,UART7_RX , , ,OCTOSPIM_P1_IO3 , , , , ,EVENTOUT, +PortF,PF7 , ,TIM17_CH1 , , , ,SPI5_SCK ,SAI1_MCLK_B ,UART7_TX , , ,OCTOSPIM_P1_IO2 , , , , ,EVENTOUT, +PortF,PF8 , ,TIM16_CH1N , , , ,SPI5_MISO ,SAI1_SCK_B ,UART7_DE/UART7_RTS , ,TIM13_CH1 ,OCTOSPIM_P1_IO0 , , , , ,EVENTOUT, +PortF,PF9 , ,TIM17_CH1N , , , ,SPI5_MOSI ,SAI1_FS_B ,UART7_CTS , ,TIM14_CH1 ,OCTOSPIM_P1_IO1 , , , , ,EVENTOUT, +PortF,PF10, ,TIM16_BKIN ,SAI1_D3 , ,PSSI_D15 , , , , ,OCTOSPIM_P1_CLK , , , ,DCMI_D11/PSSI_D11 ,LTDC_DE ,EVENTOUT, +PortF,PF11, , , , , ,SPI5_MOSI , , , ,OCTOSPIM_P1_NCLK ,SAI2_SD_B , ,FMC_SDNRAS ,DCMI_D12/PSSI_D12 , ,EVENTOUT,ADC1_INP2 +PortF,PF12, , , , , , , , , ,OCTOSPIM_P2_DQS , , ,FMC_A6 , , ,EVENTOUT,ADC1_INN2/ADC1_INP6 +PortF,PF13, , , ,DFSDM1_DATIN6 ,I2C4_SMBA , , , , , , , ,FMC_A7 , , ,EVENTOUT,ADC2_INP2 +PortF,PF14, , , ,DFSDM1_CKIN6 ,I2C4_SCL , , , , , , , ,FMC_A8 , , ,EVENTOUT,ADC2_INN2/ADC2_INP6 +PortF,PF15, , , , ,I2C4_SDA , , , , , , , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,OCTOSPIM_P2_IO4 , ,UART9_RX ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,OCTOSPIM_P2_IO5 , ,UART9_TX ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , ,TIM8_BKIN , , , , , , , ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,FMC_A12 , , ,EVENTOUT, +PortG,PG3 , , , ,TIM8_BKIN2 , , , , , , , ,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2 ,FMC_A13 , , ,EVENTOUT, +PortG,PG4 , ,TIM1_BKIN2 , , , , , , , , , ,TIM1_BKIN2_COMP1/TIM1_BKIN2_COMP2 ,FMC_A14/FMC_BA0 , , ,EVENTOUT, +PortG,PG5 , ,TIM1_ETR , , , , , , , , , , ,FMC_A15/FMC_BA1 , , ,EVENTOUT, +PortG,PG6 , ,TIM17_BKIN , , , , , , , , ,OCTOSPIM_P1_NCS , ,FMC_NE3 ,DCMI_D12/PSSI_D12 ,LTDC_R7 ,EVENTOUT, +PortG,PG7 , , , , , , ,SAI1_MCLK_A ,USART6_CK , ,OCTOSPIM_P2_DQS , , ,FMC_INT ,DCMI_D13/PSSI_D13 ,LTDC_CLK ,EVENTOUT, +PortG,PG8 , , , ,TIM8_ETR , ,I2S6_WS/SPI6_NSS , ,USART6_DE/USART6_RTS ,SPDIFRX_IN3 , , , ,FMC_SDCLK , ,LTDC_G7 ,EVENTOUT, +PortG,PG9 , , , , , ,I2S1_SDI/SPI1_MISO , ,USART6_RX ,SPDIFRX_IN4 ,OCTOSPIM_P1_IO6 ,SAI2_FS_B ,SDMMC2_D0 ,FMC_NCE/FMC_NE2 ,DCMI_VSYNC/PSSI_RDY , ,EVENTOUT, +PortG,PG10, , , ,OCTOSPIM_P2_IO6 , ,I2S1_WS/SPI1_NSS , , , ,LTDC_G3 ,SAI2_SD_B ,SDMMC2_D1 ,FMC_NE3 ,DCMI_D2/PSSI_D2 ,LTDC_B2 ,EVENTOUT, +PortG,PG11, ,LPTIM1_IN2 , , , ,I2S1_CK/SPI1_SCK , , ,SPDIFRX_IN1 ,OCTOSPIM_P2_IO7 ,SDMMC2_D2 ,USART10_RX , ,DCMI_D3/PSSI_D3 ,LTDC_B3 ,EVENTOUT, +PortG,PG12, ,LPTIM1_IN1 , ,OCTOSPIM_P2_NCS , ,I2S6_SDI/SPI6_MISO , ,USART6_DE/USART6_RTS ,SPDIFRX_IN2 ,LTDC_B4 ,SDMMC2_D3 ,USART10_TX ,FMC_NE4 , ,LTDC_B1 ,EVENTOUT, +PortG,PG13,DEBUG_TRACED0 ,LPTIM1_OUT , , , ,I2S6_CK/SPI6_SCK , ,USART6_CTS/USART6_NSS , , ,SDMMC2_D6 ,USART10_CTS/USART10_NSS ,FMC_A24 , ,LTDC_R0 ,EVENTOUT, +PortG,PG14,DEBUG_TRACED1 ,LPTIM1_ETR , , , ,I2S6_SDO/SPI6_MOSI , ,USART6_TX , ,OCTOSPIM_P1_IO7 ,SDMMC2_D7 ,USART10_DE/USART10_RTS ,FMC_A25 , ,LTDC_B0 ,EVENTOUT, +PortG,PG15, , , , , , , ,USART6_CTS/USART6_NSS , ,OCTOSPIM_P2_DQS , ,USART10_CK ,FMC_SDNCAS ,DCMI_D13/PSSI_D13 , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , ,LPTIM1_IN2 , , , , , , , ,OCTOSPIM_P1_IO4 ,SAI2_SCK_B , ,FMC_SDCKE0 , ,LTDC_R0 ,EVENTOUT, +PortH,PH3 , , , , , , , , , ,OCTOSPIM_P1_IO5 ,SAI2_MCLK_B , ,FMC_SDNE0 , ,LTDC_R1 ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , ,LTDC_G5 ,USB_OTG_HS_ULPI_NXT , , ,PSSI_D14 ,LTDC_G4 ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA ,SPI5_NSS , , , , , , ,FMC_SDNWE , , ,EVENTOUT, +PortH,PH6 , , ,TIM12_CH1 , ,I2C2_SMBA ,SPI5_SCK , , , , , , ,FMC_SDNE1 ,DCMI_D8/PSSI_D8 , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL ,SPI5_MISO , , , , , , ,FMC_SDCKE1 ,DCMI_D9/PSSI_D9 , ,EVENTOUT, +PortH,PH8 , , ,TIM5_ETR , ,I2C3_SDA , , , , , , , ,FMC_D16 ,DCMI_HSYNC/PSSI_DE ,LTDC_R2 ,EVENTOUT, +PortH,PH9 , , ,TIM12_CH2 , ,I2C3_SMBA , , , , , , , ,FMC_D17 ,DCMI_D0/PSSI_D0 ,LTDC_R3 ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1 , ,I2C4_SMBA , , , , , , , ,FMC_D18 ,DCMI_D1/PSSI_D1 ,LTDC_R4 ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2 , ,I2C4_SCL , , , , , , , ,FMC_D19 ,DCMI_D2/PSSI_D2 ,LTDC_R5 ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3 , ,I2C4_SDA , , , , , , , ,FMC_D20 ,DCMI_D3/PSSI_D3 ,LTDC_R6 ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , ,UART4_TX ,FDCAN1_TX , , ,FMC_D21 , ,LTDC_G2 ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , ,UART4_RX ,FDCAN1_RX , , ,FMC_D22 ,DCMI_D4/PSSI_D4 ,LTDC_G3 ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , , , ,FMC_D23 ,DCMI_D11/PSSI_D11 ,LTDC_G4 ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4 , , ,I2S2_WS/SPI2_NSS , , , , , , ,FMC_D24 ,DCMI_D13/PSSI_D13 ,LTDC_G5 ,EVENTOUT, +PortI,PI1 , , , ,TIM8_BKIN2 , ,I2S2_CK/SPI2_SCK , , , , , ,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2 ,FMC_D25 ,DCMI_D8/PSSI_D8 ,LTDC_G6 ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,I2S2_SDI/SPI2_MISO , , , , , , ,FMC_D26 ,DCMI_D9/PSSI_D9 ,LTDC_G7 ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,I2S2_SDO/SPI2_MOSI , , , , , , ,FMC_D27 ,DCMI_D10/PSSI_D10 , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,SAI2_MCLK_A ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,FMC_NBL2 ,DCMI_D5/PSSI_D5 ,LTDC_B4 ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,SAI2_SCK_A , ,FMC_NBL3 ,DCMI_VSYNC/PSSI_RDY ,LTDC_B5 ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,SAI2_SD_A , ,FMC_D28 ,DCMI_D6/PSSI_D6 ,LTDC_B6 ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,SAI2_FS_A , ,FMC_D29 ,DCMI_D7/PSSI_D7 ,LTDC_B7 ,EVENTOUT, +PortI,PI8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI9 , , , ,OCTOSPIM_P2_IO0 , , , , ,UART4_RX ,FDCAN1_RX , , ,FMC_D30 , ,LTDC_VSYNC,EVENTOUT, +PortI,PI10, , , ,OCTOSPIM_P2_IO1 , , , , , , , , ,FMC_D31 ,PSSI_D14 ,LTDC_HSYNC,EVENTOUT, +PortI,PI11, , , ,OCTOSPIM_P2_IO2 , , , , , ,LTDC_G6 ,USB_OTG_HS_ULPI_DIR , , ,PSSI_D15 , ,EVENTOUT, +PortI,PI12, , , ,OCTOSPIM_P2_IO3 , , , , , , , , , , ,LTDC_HSYNC,EVENTOUT, +PortI,PI13, , , ,OCTOSPIM_P2_CLK , , , , , , , , , , ,LTDC_VSYNC,EVENTOUT, +PortI,PI14, , , ,OCTOSPIM_P2_NCLK , , , , , , , , , , ,LTDC_CLK ,EVENTOUT, +PortI,PI15, , , , , , , , , ,LTDC_G2 , , , , ,LTDC_R0 ,EVENTOUT, +PortJ,PJ0 , , , , , , , , , ,LTDC_R7 , , , , ,LTDC_R1 ,EVENTOUT, +PortJ,PJ1 , , , ,OCTOSPIM_P2_IO4 , , , , , , , , , , ,LTDC_R2 ,EVENTOUT, +PortJ,PJ2 , , , ,OCTOSPIM_P2_IO5 , , , , , , , , , , ,LTDC_R3 ,EVENTOUT, +PortJ,PJ3 , , , , , , , , , , , ,UART9_DE/UART9_RTS , , ,LTDC_R4 ,EVENTOUT, +PortJ,PJ4 , , , , , , , , , , , ,UART9_CTS , , ,LTDC_R5 ,EVENTOUT, +PortJ,PJ5 , , , , , , , , , , , , , , ,LTDC_R6 ,EVENTOUT, +PortJ,PJ6 , , , ,TIM8_CH2 , , , , , , , , , , ,LTDC_R7 ,EVENTOUT, +PortJ,PJ7 ,DEBUG_TRGIN , , ,TIM8_CH2N , , , , , , , , , , ,LTDC_G0 ,EVENTOUT, +PortJ,PJ8 , ,TIM1_CH3N , ,TIM8_CH1 , , , , ,UART8_TX , , , , , ,LTDC_G1 ,EVENTOUT, +PortJ,PJ9 , ,TIM1_CH3 , ,TIM8_CH1N , , , , ,UART8_RX , , , , , ,LTDC_G2 ,EVENTOUT, +PortJ,PJ10, ,TIM1_CH2N , ,TIM8_CH2 , ,SPI5_MOSI , , , , , , , , ,LTDC_G3 ,EVENTOUT, +PortJ,PJ11, ,TIM1_CH2 , ,TIM8_CH2N , ,SPI5_MISO , , , , , , , , ,LTDC_G4 ,EVENTOUT, +PortJ,PJ12,DEBUG_TRGOUT , , , , , , , , ,LTDC_G3 , , , , ,LTDC_B0 ,EVENTOUT, +PortJ,PJ13, , , , , , , , , ,LTDC_B4 , , , , ,LTDC_B1 ,EVENTOUT, +PortJ,PJ14, , , , , , , , , , , , , , ,LTDC_B2 ,EVENTOUT, +PortJ,PJ15, , , , , , , , , , , , , , ,LTDC_B3 ,EVENTOUT, +PortK,PK0 , ,TIM1_CH1N , ,TIM8_CH3 , ,SPI5_SCK , , , , , , , , ,LTDC_G5 ,EVENTOUT, +PortK,PK1 , ,TIM1_CH1 , ,TIM8_CH3N , ,SPI5_NSS , , , , , , , , ,LTDC_G6 ,EVENTOUT, +PortK,PK2 , ,TIM1_BKIN , ,TIM8_BKIN , , , , , , ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2 , , ,LTDC_G7 ,EVENTOUT, +PortK,PK3 , , , ,OCTOSPIM_P2_IO6 , , , , , , , , , , ,LTDC_B4 ,EVENTOUT, +PortK,PK4 , , , ,OCTOSPIM_P2_IO7 , , , , , , , , , , ,LTDC_B5 ,EVENTOUT, +PortK,PK5 , , , ,OCTOSPIM_P2_NCS , , , , , , , , , , ,LTDC_B6 ,EVENTOUT, +PortK,PK6 , , , ,OCTOSPIM_P2_DQS , , , , , , , , , , ,LTDC_B7 ,EVENTOUT, +PortK,PK7 , , , , , , , , , , , , , , ,LTDC_DE ,EVENTOUT, diff --git a/ports/stm32/boards/stm32l072_af.csv b/ports/stm32/boards/stm32l072_af.csv index c9155bd444976..3de03b0bc4e4a 100644 --- a/ports/stm32/boards/stm32l072_af.csv +++ b/ports/stm32/boards/stm32l072_af.csv @@ -1,84 +1,84 @@ -Port,Pin,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,, -,,SPI1/SPI2/I2S2/USART1/2/LPUART1/USB/LPTIM1/TSC/TIM2/21/22/EVENTOUT/SYS_AF,SPI1/SPI2/I2S2/I2C1/TIM2/21,SPI1/SPI2/I2S2/LPUART1/USART5/USB/LPTIM1/TIM2/3/EVENTOUT/SYS_AF,I2C1/TSC/EVENTOUT,I2C1/USART1/2/LPUART1/TIM3/22/EVENTOUT,SPI2/I2S2/I2C2/USART1/TIM2/21/22,I2C1/2/LPUART1/USART4/UASRT5/TIM21/EVENTOUT,I2C3/LPUART1/COMP1/2/TIM3,,ADC -PortA,PA0,,,TIM2_CH1,TSC_G1_IO1,USART2_CTS,TIM2_ETR,USART4_TX,COMP1_OUT,,ADC_IN0 -PortA,PA1,EVENTOUT,,TIM2_CH2,TSC_G1_IO2,USART2_RTS/USART2_DE,TIM21_ETR,USART4_RX,,,ADC_IN1 -PortA,PA2,TIM21_CH1,,TIM2_CH3,TSC_G1_IO3,USART2_TX,,LPUART1_TX,COMP2_OUT,,ADC_IN2 -PortA,PA3,TIM21_CH2,,TIM2_CH4,TSC_G1_IO4,USART2_RX,,LPUART1_RX,,,ADC_IN3 -PortA,PA4,SPI1_NSS,,,TSC_G2_IO1,USART2_CK,TIM22_ETR,,,,ADC_IN4 -PortA,PA5,SPI1_SCK,,TIM2_ETR,TSC_G2_IO2,,TIM2_CH1,,,,ADC_IN5 -PortA,PA6,SPI1_MISO,,TIM3_CH1,TSC_G2_IO3,LPUART1_CTS,TIM22_CH1,EVENTOUT,COMP1_OUT,,ADC_IN6 -PortA,PA7,SPI1_MOSI,,TIM3_CH2,TSC_G2_IO4,,TIM22_CH2,EVENTOUT,COMP2_OUT,,ADC_IN7 -PortA,PA8,MCO,,USB_CRS_SYNC,EVENTOUT,USART1_CK,,,I2C3_SCL,, -PortA,PA9,MCO,,,TSC_G4_IO1,USART1_TX,,I2C1_SCL,I2C3_SMBA,, -PortA,PA10,,,,TSC_G4_IO2,USART1_RX,,I2C1_SDA,,, -PortA,PA11,SPI1_MISO,,EVENTOUT,TSC_G4_IO3,USART1_CTS,,,COMP1_OUT,, -PortA,PA12,SPI1_MOSI,,EVENTOUT,TSC_G4_IO4,USART1_RTS/USART1_DE,,,COMP2_OUT,, -PortA,PA13,SWDIO,,USB_NOE,,,,LPUART1_RX,,, -PortA,PA14,SWCLK,,,,USART2_TX,,LPUART1_TX,,, -PortA,PA15,SPI1_NSS,,TIM2_ETR,EVENTOUT,USART2_RX,TIM2_CH1,USART4_RTS/USART4_DE,,, -PortB,PB0,EVENTOUT,,TIM3_CH3,TSC_G3_IO2,,,,,,ADC_IN8 -PortB,PB1,,,TIM3_CH4,TSC_G3_IO3,LPUART1_RTS/LPUART1_DE,,,,,ADC_IN9 -PortB,PB2,,,LPTIM1_OUT,TSC_G3_IO4,,,,I2C3_SMBA,, -PortB,PB3,SPI1_SCK,,TIM2_CH2,TSC_G5_IO1,EVENTOUT,USART1_RTS/USART1_DE,USART5_TX,,, -PortB,PB4,SPI1_MISO,,TIM3_CH1,TSC_G5_IO2,TIM22_CH1,USART1_CTS,USART5_RX,I2C3_SDA,, -PortB,PB5,SPI1_MOSI,,LPTIM1_IN1,I2C1_SMBA,TIM3_CH2/TIM22_CH2,USART1_CK,USART5_CK/USART5_RTS/USART5_DE,,, -PortB,PB6,USART1_TX,I2C1_SCL,LPTIM1_ETR,TSC_G5_IO3,,,,,, -PortB,PB7,USART1_RX,I2C1_SDA,LPTIM1_IN2,TSC_G5_IO4,,,USART4_CTS,,, -PortB,PB8,,,,TSC_SYNC,I2C1_SCL,,,,, -PortB,PB9,,,EVENTOUT,,I2C1_SDA,SPI2_NSS/I2S2_WS,,,, -PortB,PB10,,,TIM2_CH3,TSC_SYNC,LPUART1_TX,SPI2_SCK,I2C2_SCL,LPUART1_RX,, -PortB,PB11,EVENTOUT,,TIM2_CH4,TSC_G6_IO1,LPUART1_RX,,I2C2_SDA,LPUART1_TX,, -PortB,PB12,SPI2_NSS/I2S2_WS,,LPUART1_RTS/LPUART1_DE,TSC_G6_IO2,I2C2_SMBA,,EVENTOUT,,, -PortB,PB13,SPI2_SCK/I2S2_CK,,MCO,TSC_G6_IO3,LPUART1_CTS,I2C2_SCL,TIM21_CH1,,, -PortB,PB14,SPI2_MISO/I2S2_MCK,,RTC_OUT,TSC_G6_IO4,LPUART1_RTS/LPUART1_DE,I2C2_SDA,TIM21_CH2,,, -PortB,PB15,SPI2_MOSI/I2S2_SD,,RTC_REFIN,,,,,,, -PortC,PC0,LPTIM1_IN1,,EVENTOUT,TSC_G7_IO1,,,LPUART1_RX,I2C3_SCL,,ADC_IN10 -PortC,PC1,LPTIM1_OUT,,EVENTOUT,TSC_G7_IO2,,,LPUART1_TX,I2C3_SDA,,ADC_IN11 -PortC,PC2,LPTIM1_IN2,,SPI2_MISO/I2S2_MCK,TSC_G7_IO3,,,,,,ADC_IN12 -PortC,PC3,LPTIM1_ETR,,SPI2_MOSI/I2S2_SD,TSC_G7_IO4,,,,,,ADC_IN13 -PortC,PC4,EVENTOUT,,LPUART1_TX,,,,,,,ADC_IN14 -PortC,PC5,LPUART1_RX,,TSC_G3_IO1,,,,,,,ADC_IN15 -PortC,PC6,TIM22_CH1,,TIM3_CH1,TSC_G8_IO1,,,,,, -PortC,PC7,TIM22_CH2,,TIM3_CH2,TSC_G8_IO2,,,,,, -PortC,PC8,TIM22_ETR,,TIM3_CH3,TSC_G8_IO3,,,,,, -PortC,PC9,TIM21_ETR,,USB_NOE/TIM3_CH4,TSC_G8_IO4,,,,I2C3_SDA,, -PortC,PC10,LPUART1_TX,,,,,,USART4_TX,,, -PortC,PC11,LPUART1_RX,,,,,,USART4_RX,,, -PortC,PC12,,,USART5_TX,,,,USART4_CK,,, -PortC,PC13,,,,,,,,,, -PortC,PC14,,,,,,,,,, -PortC,PC15,,,,,,,,,, -PortD,PD0,TIM21_CH1,SPI2_NSS/I2S2_WS,,,,,,,, -PortD,PD1,,SPI2_SCK/I2S2_CK,,,,,,,, -PortD,PD2,LPUART1_RTS/LPUART1_DE,,TIM3_ETR,,,,USART5_RX,,, -PortD,PD3,USART2_CTS,,SPI2_MISO/I2S2_MCK,,,,,,, -PortD,PD4,USART2_RTS/USART2_DE,SPI2_MOSI/I2S2_SD,,,,,,,, -PortD,PD5,USART2_TX,,,,,,,,, -PortD,PD6,USART2_RX,,,,,,,,, -PortD,PD7,USART2_CK,TIM21_CH2,,,,,,,, -PortD,PD8,LPUART1_TX,,,,,,,,, -PortD,PD9,LPUART1_RX,,,,,,,,, -PortD,PD10,,,,,,,,,, -PortD,PD11,LPUART1_CTS,,,,,,,,, -PortD,PD12,LPUART1_RTS/LPUART1_DE,,,,,,,,, -PortD,PD13,,,,,,,,,, -PortD,PD14,,,,,,,,,, -PortD,PD15,USB_CRS_SYNC,,,,,,,,, -PortE,PE0,,,EVENTOUT,,,,,,, -PortE,PE1,,,EVENTOUT,,,,,,, -PortE,PE2,,,TIM3_ETR,,,,,,, -PortE,PE3,TIM22_CH1,,TIM3_CH1,,,,,,, -PortE,PE4,TIM22_CH2,,TIM3_CH2,,,,,,, -PortE,PE5,TIM21_CH1,,TIM3_CH3,,,,,,, -PortE,PE6,TIM21_CH2,,TIM3_CH4,,,,,,, -PortE,PE7,,,,,,,USART5_CK/USART5_RTS/USART5_DE,,, -PortE,PE8,,,,,,,USART4_TX,,, -PortE,PE9,TIM2_CH1,,TIM2_ETR,,,,USART4_RX,,, -PortE,PE10,TIM2_CH2,,,,,,USART5_TX,,, -PortE,PE11,TIM2_CH3,,,,,,USART5_RX,,, -PortE,PE12,TIM2_CH4,,SPI1_NSS,,,,,,, -PortE,PE13,,,SPI1_SCK,,,,,,, -PortE,PE14,,,SPI1_MISO,,,,,,, -PortE,PE15,,,SPI1_MOSI,,,,,,, -PortH,PH0,USB_CRS_SYNC,,,,,,,,, -PortH,PH1,,,,,,,,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,,,,,,,,,ADC + , ,SPI1/SPI2/I2S2/USART1/2/LPUART1/USB/LPTIM1/TSC/TIM2/21/22/EVENTOUT/SYS_AF,SPI1/SPI2/I2S2/I2C1/TIM2/21,SPI1/SPI2/I2S2/LPUART1/USART5/USB/LPTIM1/TIM2/3/EVENTOUT/SYS_AF,I2C1/TSC/EVENTOUT,I2C1/USART1/2/LPUART1/TIM3/22/EVENTOUT,SPI2/I2S2/I2C2/USART1/TIM2/21/22,I2C1/2/LPUART1/USART4/UASRT5/TIM21/EVENTOUT,I2C3/LPUART1/COMP1/2/TIM3,,,,,,,,,ADC +PortA,PA0 , , ,TIM2_CH1 ,TSC_G1_IO1 ,USART2_CTS ,TIM2_ETR ,USART4_TX ,COMP1_OUT ,,,,,,,,,ADC1_IN0 +PortA,PA1 ,EVENTOUT , ,TIM2_CH2 ,TSC_G1_IO2 ,USART2_RTS/USART2_DE ,TIM21_ETR ,USART4_RX , ,,,,,,,,,ADC1_IN1 +PortA,PA2 ,TIM21_CH1 , ,TIM2_CH3 ,TSC_G1_IO3 ,USART2_TX , ,LPUART1_TX ,COMP2_OUT ,,,,,,,,,ADC1_IN2 +PortA,PA3 ,TIM21_CH2 , ,TIM2_CH4 ,TSC_G1_IO4 ,USART2_RX , ,LPUART1_RX , ,,,,,,,,,ADC1_IN3 +PortA,PA4 ,SPI1_NSS , , ,TSC_G2_IO1 ,USART2_CK ,TIM22_ETR , , ,,,,,,,,,ADC1_IN4 +PortA,PA5 ,SPI1_SCK , ,TIM2_ETR ,TSC_G2_IO2 , ,TIM2_CH1 , , ,,,,,,,,,ADC1_IN5 +PortA,PA6 ,SPI1_MISO , ,TIM3_CH1 ,TSC_G2_IO3 ,LPUART1_CTS ,TIM22_CH1 ,EVENTOUT ,COMP1_OUT ,,,,,,,,,ADC1_IN6 +PortA,PA7 ,SPI1_MOSI , ,TIM3_CH2 ,TSC_G2_IO4 , ,TIM22_CH2 ,EVENTOUT ,COMP2_OUT ,,,,,,,,,ADC1_IN7 +PortA,PA8 ,MCO , ,USB_CRS_SYNC ,EVENTOUT ,USART1_CK , , ,I2C3_SCL ,,,,,,,,, +PortA,PA9 ,MCO , , ,TSC_G4_IO1 ,USART1_TX , ,I2C1_SCL ,I2C3_SMBA ,,,,,,,,, +PortA,PA10, , , ,TSC_G4_IO2 ,USART1_RX , ,I2C1_SDA , ,,,,,,,,, +PortA,PA11,SPI1_MISO , ,EVENTOUT ,TSC_G4_IO3 ,USART1_CTS , , ,COMP1_OUT ,,,,,,,,, +PortA,PA12,SPI1_MOSI , ,EVENTOUT ,TSC_G4_IO4 ,USART1_RTS/USART1_DE , , ,COMP2_OUT ,,,,,,,,, +PortA,PA13,SWDIO , ,USB_NOE , , , ,LPUART1_RX , ,,,,,,,,, +PortA,PA14,SWCLK , , , ,USART2_TX , ,LPUART1_TX , ,,,,,,,,, +PortA,PA15,SPI1_NSS , ,TIM2_ETR ,EVENTOUT ,USART2_RX ,TIM2_CH1 ,USART4_RTS/USART4_DE , ,,,,,,,,, +PortB,PB0 ,EVENTOUT , ,TIM3_CH3 ,TSC_G3_IO2 , , , , ,,,,,,,,,ADC1_IN8 +PortB,PB1 , , ,TIM3_CH4 ,TSC_G3_IO3 ,LPUART1_RTS/LPUART1_DE , , , ,,,,,,,,,ADC1_IN9 +PortB,PB2 , , ,LPTIM1_OUT ,TSC_G3_IO4 , , , ,I2C3_SMBA ,,,,,,,,, +PortB,PB3 ,SPI1_SCK , ,TIM2_CH2 ,TSC_G5_IO1 ,EVENTOUT ,USART1_RTS/USART1_DE ,USART5_TX , ,,,,,,,,, +PortB,PB4 ,SPI1_MISO , ,TIM3_CH1 ,TSC_G5_IO2 ,TIM22_CH1 ,USART1_CTS ,USART5_RX ,I2C3_SDA ,,,,,,,,, +PortB,PB5 ,SPI1_MOSI , ,LPTIM1_IN1 ,I2C1_SMBA ,TIM3_CH2/TIM22_CH2 ,USART1_CK ,USART5_CK/USART5_RTS/USART5_DE , ,,,,,,,,, +PortB,PB6 ,USART1_TX ,I2C1_SCL ,LPTIM1_ETR ,TSC_G5_IO3 , , , , ,,,,,,,,, +PortB,PB7 ,USART1_RX ,I2C1_SDA ,LPTIM1_IN2 ,TSC_G5_IO4 , , ,USART4_CTS , ,,,,,,,,, +PortB,PB8 , , , ,TSC_SYNC ,I2C1_SCL , , , ,,,,,,,,, +PortB,PB9 , , ,EVENTOUT , ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , ,,,,,,,,, +PortB,PB10, , ,TIM2_CH3 ,TSC_SYNC ,LPUART1_TX ,SPI2_SCK ,I2C2_SCL ,LPUART1_RX ,,,,,,,,, +PortB,PB11,EVENTOUT , ,TIM2_CH4 ,TSC_G6_IO1 ,LPUART1_RX , ,I2C2_SDA ,LPUART1_TX ,,,,,,,,, +PortB,PB12,SPI2_NSS/I2S2_WS , ,LPUART1_RTS/LPUART1_DE ,TSC_G6_IO2 ,I2C2_SMBA , ,EVENTOUT , ,,,,,,,,, +PortB,PB13,SPI2_SCK/I2S2_CK , ,MCO ,TSC_G6_IO3 ,LPUART1_CTS ,I2C2_SCL ,TIM21_CH1 , ,,,,,,,,, +PortB,PB14,SPI2_MISO/I2S2_MCK , ,RTC_OUT ,TSC_G6_IO4 ,LPUART1_RTS/LPUART1_DE ,I2C2_SDA ,TIM21_CH2 , ,,,,,,,,, +PortB,PB15,SPI2_MOSI/I2S2_SD , ,RTC_REFIN , , , , , ,,,,,,,,, +PortC,PC0 ,LPTIM1_IN1 , ,EVENTOUT ,TSC_G7_IO1 , , ,LPUART1_RX ,I2C3_SCL ,,,,,,,,,ADC1_IN10 +PortC,PC1 ,LPTIM1_OUT , ,EVENTOUT ,TSC_G7_IO2 , , ,LPUART1_TX ,I2C3_SDA ,,,,,,,,,ADC1_IN11 +PortC,PC2 ,LPTIM1_IN2 , ,SPI2_MISO/I2S2_MCK ,TSC_G7_IO3 , , , , ,,,,,,,,,ADC1_IN12 +PortC,PC3 ,LPTIM1_ETR , ,SPI2_MOSI/I2S2_SD ,TSC_G7_IO4 , , , , ,,,,,,,,,ADC1_IN13 +PortC,PC4 ,EVENTOUT , ,LPUART1_TX , , , , , ,,,,,,,,,ADC1_IN14 +PortC,PC5 ,LPUART1_RX , ,TSC_G3_IO1 , , , , , ,,,,,,,,,ADC1_IN15 +PortC,PC6 ,TIM22_CH1 , ,TIM3_CH1 ,TSC_G8_IO1 , , , , ,,,,,,,,, +PortC,PC7 ,TIM22_CH2 , ,TIM3_CH2 ,TSC_G8_IO2 , , , , ,,,,,,,,, +PortC,PC8 ,TIM22_ETR , ,TIM3_CH3 ,TSC_G8_IO3 , , , , ,,,,,,,,, +PortC,PC9 ,TIM21_ETR , ,USB_NOE/TIM3_CH4 ,TSC_G8_IO4 , , , ,I2C3_SDA ,,,,,,,,, +PortC,PC10,LPUART1_TX , , , , , ,USART4_TX , ,,,,,,,,, +PortC,PC11,LPUART1_RX , , , , , ,USART4_RX , ,,,,,,,,, +PortC,PC12, , ,USART5_TX , , , ,USART4_CK , ,,,,,,,,, +PortC,PC13, , , , , , , , ,,,,,,,,, +PortC,PC14, , , , , , , , ,,,,,,,,, +PortC,PC15, , , , , , , , ,,,,,,,,, +PortD,PD0 ,TIM21_CH1 ,SPI2_NSS/I2S2_WS , , , , , , ,,,,,,,,, +PortD,PD1 , ,SPI2_SCK/I2S2_CK , , , , , , ,,,,,,,,, +PortD,PD2 ,LPUART1_RTS/LPUART1_DE , ,TIM3_ETR , , , ,USART5_RX , ,,,,,,,,, +PortD,PD3 ,USART2_CTS , ,SPI2_MISO/I2S2_MCK , , , , , ,,,,,,,,, +PortD,PD4 ,USART2_RTS/USART2_DE ,SPI2_MOSI/I2S2_SD , , , , , , ,,,,,,,,, +PortD,PD5 ,USART2_TX , , , , , , , ,,,,,,,,, +PortD,PD6 ,USART2_RX , , , , , , , ,,,,,,,,, +PortD,PD7 ,USART2_CK ,TIM21_CH2 , , , , , , ,,,,,,,,, +PortD,PD8 ,LPUART1_TX , , , , , , , ,,,,,,,,, +PortD,PD9 ,LPUART1_RX , , , , , , , ,,,,,,,,, +PortD,PD10, , , , , , , , ,,,,,,,,, +PortD,PD11,LPUART1_CTS , , , , , , , ,,,,,,,,, +PortD,PD12,LPUART1_RTS/LPUART1_DE , , , , , , , ,,,,,,,,, +PortD,PD13, , , , , , , , ,,,,,,,,, +PortD,PD14, , , , , , , , ,,,,,,,,, +PortD,PD15,USB_CRS_SYNC , , , , , , , ,,,,,,,,, +PortE,PE0 , , ,EVENTOUT , , , , , ,,,,,,,,, +PortE,PE1 , , ,EVENTOUT , , , , , ,,,,,,,,, +PortE,PE2 , , ,TIM3_ETR , , , , , ,,,,,,,,, +PortE,PE3 ,TIM22_CH1 , ,TIM3_CH1 , , , , , ,,,,,,,,, +PortE,PE4 ,TIM22_CH2 , ,TIM3_CH2 , , , , , ,,,,,,,,, +PortE,PE5 ,TIM21_CH1 , ,TIM3_CH3 , , , , , ,,,,,,,,, +PortE,PE6 ,TIM21_CH2 , ,TIM3_CH4 , , , , , ,,,,,,,,, +PortE,PE7 , , , , , , ,USART5_CK/USART5_RTS/USART5_DE , ,,,,,,,,, +PortE,PE8 , , , , , , ,USART4_TX , ,,,,,,,,, +PortE,PE9 ,TIM2_CH1 , ,TIM2_ETR , , , ,USART4_RX , ,,,,,,,,, +PortE,PE10,TIM2_CH2 , , , , , ,USART5_TX , ,,,,,,,,, +PortE,PE11,TIM2_CH3 , , , , , ,USART5_RX , ,,,,,,,,, +PortE,PE12,TIM2_CH4 , ,SPI1_NSS , , , , , ,,,,,,,,, +PortE,PE13, , ,SPI1_SCK , , , , , ,,,,,,,,, +PortE,PE14, , ,SPI1_MISO , , , , , ,,,,,,,,, +PortE,PE15, , ,SPI1_MOSI , , , , , ,,,,,,,,, +PortH,PH0 ,USB_CRS_SYNC , , , , , , , ,,,,,,,,, +PortH,PH1 , , , , , , , , ,,,,,,,,, diff --git a/ports/stm32/boards/stm32l152_af.csv b/ports/stm32/boards/stm32l152_af.csv index a6f8e80c3028a..c4694713c88c7 100644 --- a/ports/stm32/boards/stm32l152_af.csv +++ b/ports/stm32/boards/stm32l152_af.csv @@ -1,117 +1,117 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM2,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2,SPI1/SPI2,SPI3,USART1/USART2/USART3,UART4/UART5,,,,,,,,ADC -PortA,PA0,,TIM2_CH1_ETR,TIM5_CH1,,,,,USART2_CTS,,,,,,,,EVENTOUT,ADC1_IN0 -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS,,,,,,,,EVENTOUT,ADC1_IN1 -PortA,PA2,,TIM2_CH3,TIM5_CH3,TIM9_CH1,,,,USART2_TX,,,,,,,,EVENTOUT,ADC1_IN2 -PortA,PA3,,TIM2_CH4,TIM5_CH4,TIM9_CH2,,,,USART2_RX,,,,,,,,EVENTOUT,ADC1_IN3 -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,USART2_CK,,,,,,,,EVENTOUT,ADC1_IN4 -PortA,PA5,,TIM2_CH1_ETR,,,,SPI1_SCK,,,,,,,,,,EVENTOUT,ADC1_IN5 -PortA,PA6,,,TIM3_CH1,TIM10_CH1,,SPI1_MISO,,,,,,,,,,EVENTOUT,ADC1_IN6 -PortA,PA7,,,TIM3_CH2,TIM11_CH1,,SPI1_MOSI,,,,,,,,,,EVENTOUT,ADC1_IN7 -PortA,PA8,MCO,,,,,,,USART1_CK,,,,,,,,EVENTOUT, -PortA,PA9,,,,,,,,USART1_TX,,,,,,,,EVENTOUT, -PortA,PA10,,,,,,,,USART1_RX,,,,,,,,EVENTOUT, -PortA,PA11,,,,,,SPI1_MISO,,USART1_CTS,,,,,,,,EVENTOUT, -PortA,PA12,,,,,,SPI1_MOSI,,USART1_RTS,,,,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1_ETR,,,,SPI1_NSS,SPI3_NSS/I2S3_WS,,,,,,,,,EVENTOUT, -PortB,PB0,,,TIM3_CH3,,,,,,,,,,,,,EVENTOUT,ADC1_IN8 -PortB,PB1,,,TIM3_CH4,,,,,,,,,,,,,EVENTOUT,ADC1_IN9 -PortB,PB2,BOOT1,,,,,,,,,,,,,,,EVENTOUT, -PortB,PB3,JTDO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK/I2S3_CK,,,,,,,,,EVENTOUT, -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,,,,,,,,,EVENTOUT, -PortB,PB5,,,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI/I2S3_SD,,,,,,,,,EVENTOUT, -PortB,PB6,,,TIM4_CH1,,I2C1_SCL,,,USART1_TX,,,,,,,,EVENTOUT, -PortB,PB7,,,TIM4_CH2,,I2C1_SDA,,,USART1_RX,,,,,,,,EVENTOUT, -PortB,PB8,,,TIM4_CH3,TIM10_CH1,I2C1_SCL,,,,,,,,,,,EVENTOUT, -PortB,PB9,,,TIM4_CH4,TIM11_CH1,I2C1_SDA,,,,,,,,,,,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,,,USART3_TX,,,,,,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,,USART3_RX,,,,,,,,EVENTOUT, -PortB,PB12,,,,TIM10_CH1,I2C2_SMBA,SPI2_NSS/I2S2_WS,,USART3_CK,,,,,,,,EVENTOUT,ADC1_IN18 -PortB,PB13,,,,TIM9_CH1,,SPI2_SCK/I2S2_CK,,USART3_CTS,,,,,,,,EVENTOUT,ADC1_IN19 -PortB,PB14,,,,TIM9_CH2,,SPI2_MISO,,USART3_RTS,,,,,,,,EVENTOUT,ADC1_IN20 -PortB,PB15,,,,TIM11_CH1,,SPI2_MOSI/I2S2_SD,,,,,,,,,,EVENTOUT,ADC1_IN21 -PortC,PC0,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN10 -PortC,PC1,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN11 -PortC,PC2,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN12 -PortC,PC3,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN13 -PortC,PC4,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN14 -PortC,PC5,,,,,,,,,,,,,,,,EVENTOUT,ADC1_IN15 -PortC,PC6,,,TIM3_CH1,,,I2S2_MCK,,,,,,,,,,EVENTOUT, -PortC,PC7,,,TIM3_CH2,,,,I2S3_MCK,,,,,,,,,EVENTOUT, -PortC,PC8,,,TIM3_CH3,,,,,,,,,,,,,EVENTOUT, -PortC,PC9,,,TIM3_CH4,,,,,,,,,,,,,EVENTOUT, -PortC,PC10,,,,,,,SPI3_SCK/I2S3_CK,USART3_TX,UART4_TX,,,,,,,EVENTOUT, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,,,,,,,EVENTOUT, -PortC,PC12,,,,,,,SPI3_MOSI/I2S3_SD,USART3_CK,UART5_TX,,,,,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,TIM9_CH1,,SPI2_NSS/I2S2_WS,,,,,,,,,,EVENTOUT, -PortD,PD1,,,,,,SPI2_SCK/I2S2_CK,,,,,,,,,,EVENTOUT, -PortD,PD2,,,TIM3_ETR,,,,,,UART5_RX,,,,,,,EVENTOUT, -PortD,PD3,,,,,,SPI2_MISO,,USART2_CTS,,,,,,,,EVENTOUT, -PortD,PD4,,,,,,SPI2_MOSI/I2S2_SD,,USART2_RTS,,,,,,,,EVENTOUT, -PortD,PD5,,,,,,,,USART2_TX,,,,,,,,EVENTOUT, -PortD,PD6,,,,,,,,USART2_RX,,,,,,,,EVENTOUT, -PortD,PD7,,,,TIM9_CH2,,,,USART2_CK,,,,,,,,EVENTOUT, -PortD,PD8,,,,,,,,USART3_TX,,,,,,,,EVENTOUT, -PortD,PD9,,,,,,,,USART3_RX,,,,,,,,EVENTOUT, -PortD,PD10,,,,,,,,USART3_CK,,,,,,,,EVENTOUT, -PortD,PD11,,,,,,,,USART3_CTS,,,,,,,,EVENTOUT, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS,,,,,,,,EVENTOUT, -PortD,PD13,,,TIM4_CH2,,,,,,,,,,,,,EVENTOUT, -PortD,PD14,,,TIM4_CH3,,,,,,,,,,,,,EVENTOUT, -PortD,PD15,,,TIM4_CH4,,,,,,,,,,,,,EVENTOUT, -PortE,PE0,,,TIM4_ETR,TIM10_CH1,,,,,,,,,,,,EVENTOUT, -PortE,PE1,,,,TIM11_CH1,,,,,,,,,,,,EVENTOUT, -PortE,PE2,TRACECK,,TIM3_ETR,,,,,,,,,,,,,EVENTOUT, -PortE,PE3,TRACED0,,TIM3_CH1,,,,,,,,,,,,,EVENTOUT, -PortE,PE4,TRACED1,,TIM3_CH2,,,,,,,,,,,,,EVENTOUT, -PortE,PE5,TRACED2,,,TIM9_CH1,,,,,,,,,,,,EVENTOUT, -PortE,PE6,TRACED3,,,TIM9_CH2,,,,,,,,,,,,EVENTOUT, -PortE,PE7,,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE8,,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE9,,TIM2_CH1_ETR,,,,,,,,,,,,,,EVENTOUT, -PortE,PE10,,TIM2_CH2,,,,,,,,,,,,,,EVENTOUT, -PortE,PE11,,TIM2_CH3,,,,,,,,,,,,,,EVENTOUT, -PortE,PE12,,TIM2_CH4,,,,SPI1_NSS,,,,,,,,,,EVENTOUT, -PortE,PE13,,,,,,SPI1_SCK,,,,,,,,,,EVENTOUT, -PortE,PE14,,,,,,SPI1_MISO,,,,,,,,,,EVENTOUT, -PortE,PE15,,,,,,SPI1_MOSI,,,,,,,,,,EVENTOUT, -PortF,PF0,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF1,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF2,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF3,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF4,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF5,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF6,,,TIM5_ETR,,,,,,,,,,,,,EVENTOUT, -PortF,PF7,,,TIM5_CH2,,,,,,,,,,,,,EVENTOUT, -PortF,PF8,,,TIM5_CH3,,,,,,,,,,,,,EVENTOUT, -PortF,PF9,,,TIM5_CH4,,,,,,,,,,,,,EVENTOUT, -PortF,PF10,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF11,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF12,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF13,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF14,,,,,,,,,,,,,,,,EVENTOUT, -PortF,PF15,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG0,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG1,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG2,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG3,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG4,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG5,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG6,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG7,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG8,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG9,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG10,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG11,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG12,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG13,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG14,,,,,,,,,,,,,,,,EVENTOUT, -PortG,PG15,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,, -PortH,PH1,,,,,,,,,,,,,,,,, -PortH,PH2,,,,,,,,,,,,,,,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9,AF10,AF11,AF12,AF13,AF14,AF15 ,ADC + , ,SYS_AF ,TIM2 ,TIM3/TIM4/TIM5,TIM9/TIM10/TIM11,I2C1/I2C2,SPI1/SPI2 ,SPI3 ,USART1/USART2/USART3,UART4/UART5, , , , , , , ,ADC +PortA,PA0 , ,TIM2_CH1_ETR,TIM5_CH1 , , , , ,USART2_CTS , , , , , , , ,EVENTOUT,ADC1_IN0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , , , ,USART2_RTS , , , , , , , ,EVENTOUT,ADC1_IN1 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,TIM9_CH1 , , , ,USART2_TX , , , , , , , ,EVENTOUT,ADC1_IN2 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,TIM9_CH2 , , , ,USART2_RX , , , , , , , ,EVENTOUT,ADC1_IN3 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS ,USART2_CK , , , , , , , ,EVENTOUT,ADC1_IN4 +PortA,PA5 , ,TIM2_CH1_ETR, , , ,SPI1_SCK , , , , , , , , , ,EVENTOUT,ADC1_IN5 +PortA,PA6 , , ,TIM3_CH1 ,TIM10_CH1 , ,SPI1_MISO , , , , , , , , , ,EVENTOUT,ADC1_IN6 +PortA,PA7 , , ,TIM3_CH2 ,TIM11_CH1 , ,SPI1_MOSI , , , , , , , , , ,EVENTOUT,ADC1_IN7 +PortA,PA8 ,MCO , , , , , , ,USART1_CK , , , , , , , ,EVENTOUT, +PortA,PA9 , , , , , , , ,USART1_TX , , , , , , , ,EVENTOUT, +PortA,PA10, , , , , , , ,USART1_RX , , , , , , , ,EVENTOUT, +PortA,PA11, , , , , ,SPI1_MISO , ,USART1_CTS , , , , , , , ,EVENTOUT, +PortA,PA12, , , , , ,SPI1_MOSI , ,USART1_RTS , , , , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK, , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1_ETR, , , ,SPI1_NSS ,SPI3_NSS/I2S3_WS , , , , , , , , ,EVENTOUT, +PortB,PB0 , , ,TIM3_CH3 , , , , , , , , , , , , ,EVENTOUT,ADC1_IN8 +PortB,PB1 , , ,TIM3_CH4 , , , , , , , , , , , , ,EVENTOUT,ADC1_IN9 +PortB,PB2 ,BOOT1 , , , , , , , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO ,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK/I2S3_CK , , , , , , , , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1 , , ,SPI1_MISO ,SPI3_MISO , , , , , , , , ,EVENTOUT, +PortB,PB5 , , ,TIM3_CH2 , ,I2C1_SMBA,SPI1_MOSI ,SPI3_MOSI/I2S3_SD, , , , , , , , ,EVENTOUT, +PortB,PB6 , , ,TIM4_CH1 , ,I2C1_SCL , , ,USART1_TX , , , , , , , ,EVENTOUT, +PortB,PB7 , , ,TIM4_CH2 , ,I2C1_SDA , , ,USART1_RX , , , , , , , ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 ,TIM10_CH1 ,I2C1_SCL , , , , , , , , , , ,EVENTOUT, +PortB,PB9 , , ,TIM4_CH4 ,TIM11_CH1 ,I2C1_SDA , , , , , , , , , , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL , , ,USART3_TX , , , , , , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , , ,USART3_RX , , , , , , , ,EVENTOUT, +PortB,PB12, , , ,TIM10_CH1 ,I2C2_SMBA,SPI2_NSS/I2S2_WS , ,USART3_CK , , , , , , , ,EVENTOUT,ADC1_IN18 +PortB,PB13, , , ,TIM9_CH1 , ,SPI2_SCK/I2S2_CK , ,USART3_CTS , , , , , , , ,EVENTOUT,ADC1_IN19 +PortB,PB14, , , ,TIM9_CH2 , ,SPI2_MISO , ,USART3_RTS , , , , , , , ,EVENTOUT,ADC1_IN20 +PortB,PB15, , , ,TIM11_CH1 , ,SPI2_MOSI/I2S2_SD, , , , , , , , , ,EVENTOUT,ADC1_IN21 +PortC,PC0 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN10 +PortC,PC1 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN11 +PortC,PC2 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN12 +PortC,PC3 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN13 +PortC,PC4 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN14 +PortC,PC5 , , , , , , , , , , , , , , , ,EVENTOUT,ADC1_IN15 +PortC,PC6 , , ,TIM3_CH1 , , ,I2S2_MCK , , , , , , , , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 , , , ,I2S3_MCK , , , , , , , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 , , , , , , , , , , , , ,EVENTOUT, +PortC,PC9 , , ,TIM3_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK/I2S3_CK ,USART3_TX ,UART4_TX , , , , , , ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX , , , , , , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI/I2S3_SD,USART3_CK ,UART5_TX , , , , , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , ,TIM9_CH1 , ,SPI2_NSS/I2S2_WS , , , , , , , , , ,EVENTOUT, +PortD,PD1 , , , , , ,SPI2_SCK/I2S2_CK , , , , , , , , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , , , , , ,UART5_RX , , , , , , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_MISO , ,USART2_CTS , , , , , , , ,EVENTOUT, +PortD,PD4 , , , , , ,SPI2_MOSI/I2S2_SD, ,USART2_RTS , , , , , , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , , , , ,EVENTOUT, +PortD,PD6 , , , , , , , ,USART2_RX , , , , , , , ,EVENTOUT, +PortD,PD7 , , , ,TIM9_CH2 , , , ,USART2_CK , , , , , , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , , , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , , , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , , , , , , , ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , , , , , , , ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , , , , ,USART3_RTS , , , , , , , ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , , , , , , , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR ,TIM10_CH1 , , , , , , , , , , , ,EVENTOUT, +PortE,PE1 , , , ,TIM11_CH1 , , , , , , , , , , , ,EVENTOUT, +PortE,PE2 ,TRACECK , ,TIM3_ETR , , , , , , , , , , , , ,EVENTOUT, +PortE,PE3 ,TRACED0 , ,TIM3_CH1 , , , , , , , , , , , , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,TIM3_CH2 , , , , , , , , , , , , ,EVENTOUT, +PortE,PE5 ,TRACED2 , , ,TIM9_CH1 , , , , , , , , , , , ,EVENTOUT, +PortE,PE6 ,TRACED3 , , ,TIM9_CH2 , , , , , , , , , , , ,EVENTOUT, +PortE,PE7 , , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE9 , ,TIM2_CH1_ETR, , , , , , , , , , , , , ,EVENTOUT, +PortE,PE10, ,TIM2_CH2 , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE11, ,TIM2_CH3 , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE12, ,TIM2_CH4 , , , ,SPI1_NSS , , , , , , , , , ,EVENTOUT, +PortE,PE13, , , , , ,SPI1_SCK , , , , , , , , , ,EVENTOUT, +PortE,PE14, , , , , ,SPI1_MISO , , , , , , , , , ,EVENTOUT, +PortE,PE15, , , , , ,SPI1_MOSI , , , , , , , , , ,EVENTOUT, +PortF,PF0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF4 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF5 , , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF6 , , ,TIM5_ETR , , , , , , , , , , , , ,EVENTOUT, +PortF,PF7 , , ,TIM5_CH2 , , , , , , , , , , , , ,EVENTOUT, +PortF,PF8 , , ,TIM5_CH3 , , , , , , , , , , , , ,EVENTOUT, +PortF,PF9 , , ,TIM5_CH4 , , , , , , , , , , , , ,EVENTOUT, +PortF,PF10, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF11, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF13, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF14, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF15, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG2 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG3 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG4 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG5 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG6 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG7 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG8 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG9 , , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG10, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG11, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG12, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG13, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG14, , , , , , , , , , , , , , , ,EVENTOUT, +PortG,PG15, , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , , , +PortH,PH1 , , , , , , , , , , , , , , , , , +PortH,PH2 , , , , , , , , , , , , , , , , , diff --git a/ports/stm32/boards/stm32l432_af.csv b/ports/stm32/boards/stm32l432_af.csv index debfcd7b3548a..a7afcd9fdf690 100644 --- a/ports/stm32/boards/stm32l432_af.csv +++ b/ports/stm32/boards/stm32l432_af.csv @@ -1,28 +1,28 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,,, -,,SYS_AF,TIM1/TIM2/LPTIM1,TIM1/TIM2,USART2,I2C1/I2C2/I2C3,SPI1/SPI2,SPI3,USART1/USART2/USART3,LPUART1,CAN1/TSC,USB/QUADSPI,,COMP1/COMP2/SWPMI1,SAI1,TIM2/TIM15/TIM16/LPTIM2,EVENTOUT,ADC,COMP,DAC -PortA,PA0,,TIM2_CH1,,,,,,USART2_CTS,,,,,COMP1_OUT,SAI1_EXTCLK,TIM2_ETR,EVENTOUT,ADC1_IN5,COMP1_INM, -PortA,PA1,,TIM2_CH2,,,I2C1_SMBA,SPI1_SCK,,USART2_RTS/USART2_DE,,,,,,,TIM15_CH1N,EVENTOUT,ADC1_IN6,COMP1_INP, -PortA,PA2,,TIM2_CH3,,,,,,USART2_TX,LPUART1_TX,,QUADSPI_BK1_NCS,,COMP2_OUT,,TIM15_CH1,EVENTOUT,ADC1_IN7,COMP2_INM, -PortA,PA3,,TIM2_CH4,,,,,,USART2_RX,LPUART1_RX,,QUADSPI_CLK,,,SAI1_MCLK_A,TIM15_CH2,EVENTOUT,ADC1_IN8,COMP2_INP, -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS,USART2_CK,,,,,,SAI1_FS_B,LPTIM2_OUT,EVENTOUT,ADC1_IN9,COMP1_INM/COMP2_INM,DAC1_OUT1 -PortA,PA5,,TIM2_CH1,TIM2_ETR,,,SPI1_SCK,,,,,,,,,LPTIM2_ETR,EVENTOUT,ADC1_IN10,COMP1_INM/COMP2_INM,DAC1_OUT2 -PortA,PA6,,TIM1_BKIN,,,,SPI1_MISO,COMP1_OUT,USART3_CTS,,,QUADSPI_BK1_IO3,,TIM1_BKIN_COMP2,,TIM16_CH1,EVENTOUT,ADC1_IN11,, -PortA,PA7,,TIM1_CH1N,,,I2C3_SCL,SPI1_MOSI,,,,,QUADSPI_BK1_IO2,,COMP2_OUT,,,EVENTOUT,ADC1_IN12,, -PortA,PA8,MCO,TIM1_CH1,,,,,,USART1_CK,,,,,SWPMI1_IO,SAI1_SCLK_A,LPTIM2_OUT,EVENTOUT,,, -PortA,PA9,,TIM1_CH2,,,I2C1_SCL,,,USART1_TX,,,,,,SAI1_FS_A,TIM15_BKIN,EVENTOUT,,, -PortA,PA10,,TIM1_CH3,,,I2C1_SDA,,,USART1_RX,,,USB_CRS_SYNC,,,SAI1_SD_A,,EVENTOUT,,, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,,,SPI1_MISO,COMP1_OUT,USART1_CTS,,CAN1_RX,USB_DM,,TIM1_BKIN2_COMP1,,,EVENTOUT,,, -PortA,PA12,,TIM1_ETR,,,,SPI1_MOSI,,USART1_RTS/USART1_DE,,CAN1_TX,USB_DP,,,,,EVENTOUT,,, -PortA,PA13,JTMS/SWDIO,IR_OUT,,,,,,,,,USB_NOE,,SWPMI1_TX,,,EVENTOUT,,, -PortA,PA14,JTCK/SWCLK,LPTIM1_OUT,,,I2C1_SMBA,,,,,,,,SWPMI1_RX,SAI1_SD_B,,EVENTOUT,,, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,USART2_RX,,SPI1_NSS,SPI3_NSS,USART3_RTS/USART3_DE,,TSC_G3_IO1,,,SWPMI1_SUSPEND,SAI1_FS_B,,EVENTOUT,,, -PortB,PB0,,TIM1_CH2N,,,,SPI1_NSS,,USART3_CK,,,QUADSPI_BK1_IO1,,COMP1_OUT,SA1_EXTCLK,,EVENTOUT,ADC1_IN15,, -PortB,PB1,,TIM1_CH3N,,,,,,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE,,QUADSPI_BK1_IO0,,,,LPTIM2_IN1,EVENTOUT,ADC1_IN16,COMP1_INM, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK,USART1_RTS/USART1_DE,,,,,,SAI1_SCK_B,,EVENTOUT,,COMP2_INM, -PortB,PB4,NJTRST,,,,I2C3_SDA,SPI1_MISO,SPI3_MISO,USART1_CTS,,TSC_G2_IO1,,,,SAI1_MCLK_B,,EVENTOUT,,COMP2_INP, -PortB,PB5,,LPTIM1_IN1,,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI,USART1_CK,,TSC_G2_IO2,,,COMP2_OUT,SAI1_SD_B,TIM16_BKIN,EVENTOUT,,, -PortB,PB6,,LPTIM1_ETR,,,I2C1_SCL,,,USART1_TX,,TSC_G2_IO3,,,,SAI1_FS_B,TIM16_CH1N,EVENTOUT,,COMP2_INP, -PortB,PB7,,LPTIM1_IN2,,,I2C1_SDA,,,USART1_RX,,TSC_G2_IO4,,,,,,EVENTOUT,,COMP2_INM, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT,,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH3,,,,,,,,,,,,,,,,EVENTOUT,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/LPTIM1,TIM1/TIM2 ,USART2 ,I2C1/I2C2/I2C3,SPI1/SPI2,SPI3 ,USART1/USART2/USART3,LPUART1 ,CAN1/TSC ,USB/QUADSPI , ,COMP1/COMP2/SWPMI1,SAI1 ,TIM2/TIM15/TIM16/LPTIM2,EVENTOUT,ADC +PortA,PA0 , ,TIM2_CH1 , , , , , ,USART2_CTS , , , , ,COMP1_OUT ,SAI1_EXTCLK,TIM2_ETR ,EVENTOUT,ADC1_IN5 +PortA,PA1 , ,TIM2_CH2 , , ,I2C1_SMBA ,SPI1_SCK , ,USART2_RTS/USART2_DE, , , , , , ,TIM15_CH1N ,EVENTOUT,ADC1_IN6 +PortA,PA2 , ,TIM2_CH3 , , , , , ,USART2_TX ,LPUART1_TX , ,QUADSPI_BK1_NCS, ,COMP2_OUT , ,TIM15_CH1 ,EVENTOUT,ADC1_IN7 +PortA,PA3 , ,TIM2_CH4 , , , , , ,USART2_RX ,LPUART1_RX , ,QUADSPI_CLK , , ,SAI1_MCLK_A,TIM15_CH2 ,EVENTOUT,ADC1_IN8 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS ,USART2_CK , , , , , ,SAI1_FS_B ,LPTIM2_OUT ,EVENTOUT,ADC1_IN9 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_SCK , , , , , , , , ,LPTIM2_ETR ,EVENTOUT,ADC1_IN10 +PortA,PA6 , ,TIM1_BKIN , , , ,SPI1_MISO,COMP1_OUT,USART3_CTS , , ,QUADSPI_BK1_IO3, ,TIM1_BKIN_COMP2 , ,TIM16_CH1 ,EVENTOUT,ADC1_IN11 +PortA,PA7 , ,TIM1_CH1N , , ,I2C3_SCL ,SPI1_MOSI, , , , ,QUADSPI_BK1_IO2, ,COMP2_OUT , , ,EVENTOUT,ADC1_IN12 +PortA,PA8 ,MCO ,TIM1_CH1 , , , , , ,USART1_CK , , , , ,SWPMI1_IO ,SAI1_SCLK_A,LPTIM2_OUT ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C1_SCL , , ,USART1_TX , , , , , ,SAI1_FS_A ,TIM15_BKIN ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , ,I2C1_SDA , , ,USART1_RX , , ,USB_CRS_SYNC , , ,SAI1_SD_A , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2, , ,SPI1_MISO,COMP1_OUT,USART1_CTS , ,CAN1_RX ,USB_DM , ,TIM1_BKIN2_COMP1 , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI1_MOSI, ,USART1_RTS/USART1_DE, ,CAN1_TX ,USB_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO ,IR_OUT , , , , , , , , ,USB_NOE , ,SWPMI1_TX , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK ,LPTIM1_OUT , , ,I2C1_SMBA , , , , , , , ,SWPMI1_RX ,SAI1_SD_B , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR ,USART2_RX, ,SPI1_NSS ,SPI3_NSS ,USART3_RTS/USART3_DE, ,TSC_G3_IO1, , ,SWPMI1_SUSPEND ,SAI1_FS_B , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N , , , ,SPI1_NSS , ,USART3_CK , , ,QUADSPI_BK1_IO1, ,COMP1_OUT ,SA1_EXTCLK , ,EVENTOUT,ADC1_IN15 +PortB,PB1 , ,TIM1_CH3N , , , , , ,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE, ,QUADSPI_BK1_IO0, , , ,LPTIM2_IN1 ,EVENTOUT,ADC1_IN16 +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK ,USART1_RTS/USART1_DE, , , , , ,SAI1_SCK_B , ,EVENTOUT, +PortB,PB4 ,NJTRST , , , ,I2C3_SDA ,SPI1_MISO,SPI3_MISO,USART1_CTS , ,TSC_G2_IO1, , , ,SAI1_MCLK_B, ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 , , ,I2C1_SMBA ,SPI1_MOSI,SPI3_MOSI,USART1_CK , ,TSC_G2_IO2, , ,COMP2_OUT ,SAI1_SD_B ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR , , ,I2C1_SCL , , ,USART1_TX , ,TSC_G2_IO3, , , ,SAI1_FS_B ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 , , ,I2C1_SDA , , ,USART1_RX , ,TSC_G2_IO4, , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32l452_af.csv b/ports/stm32/boards/stm32l452_af.csv index 1de5c211d2128..641cbd6e0e461 100644 --- a/ports/stm32/boards/stm32l452_af.csv +++ b/ports/stm32/boards/stm32l452_af.csv @@ -1,85 +1,85 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,,, -,,SYS_AF,TIM1/TIM2/LPTIM1,I2C4/TIM1/TIM2/TIM3,I2C4/USART2/CAN1/TIM1,I2C1/I2C2/I2C3/I2C4,SPI1/SPI2/I2C4,SPI3/DFSDM/COMP1,USART1/USART2/USART3,UART4/LPUART1/CAN1,CAN1/TSC,CAN1/USB/QUADSPI,,SDMMC1/COMP1/COMP2,SAI1,TIM2/TIM15/TIM16/LPTIM2,EVENTOUT,ADC,COMP,DAC -PortA,PA0,,TIM2_CH1,,,,,,USART2_CTS,UART4_TX,,,,COMP1_OUT,SAI1_EXTCLK,TIM2_ETR,EVENTOUT,ADC12_IN5,COMP1_INM, -PortA,PA1,,TIM2_CH2,,,I2C1_SMBA,SPI1_SCK,,USART2_RTS/USART2_DE,UART4_RX,,,,,,TIM15_CH1N,EVENTOUT,ADC12_IN6,COMP1_INP, -PortA,PA2,,TIM2_CH3,,,,,,USART2_TX,LPUART1_TX,,QUADSPI_BK1_NCS,,COMP2_OUT,,TIM15_CH1,EVENTOUT,ADC12_IN7,COMP2_INM, -PortA,PA3,,TIM2_CH4,,,,,,USART2_RX,LPUART1_RX,,QUADSPI_CLK,,,SAI1_MCLK_A,TIM15_CH2,EVENTOUT,ADC12_IN8,COMP2_INP, -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS,USART2_CK,,,,,,SAI1_FS_B,LPTIM2_OUT,EVENTOUT,ADC12_IN9,COMP1_INM/COMP2_INM,DAC1_OUT1 -PortA,PA5,,TIM2_CH1,TIM2_ETR,,,SPI1_SCK,DFSDM1_CKOUT,,,,,,,,LPTIM2_ETR,EVENTOUT,ADC12_IN10,COMP1_INM/COMP2_INM, -PortA,PA6,,TIM1_BKIN,TIM3_CH1,,,SPI1_MISO,COMP1_OUT,USART3_CTS,LPUART1_CTS,,QUADSPI_BK1_IO3,,TIM1_BKIN_COMP2,,TIM16_CH1,EVENTOUT,ADC12_IN11,, -PortA,PA7,,TIM1_CH1N,TIM3_CH2,,I2C3_SCL,SPI1_MOSI,DFSDM1_DATIN0,,,,QUADSPI_BK1_IO2,,COMP2_OUT,,,EVENTOUT,ADC12_IN12,, -PortA,PA8,MCO,TIM1_CH1,,,,,DFSDM1_CKIN1,USART1_CK,,,,,,SAI1_SCK_A,LPTIM2_OUT,EVENTOUT,,, -PortA,PA9,,TIM1_CH2,,,I2C1_SCL,,DFSDM1_DATIN1,USART1_TX,,,,,,SAI1_FS_A,TIM15_BKIN,EVENTOUT,,, -PortA,PA10,,TIM1_CH3,,,I2C1_SDA,,,USART1_RX,,,USBCRS_SYNC,,,SAI1_SD_A,,EVENTOUT,,, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,,,SPI1_MISO,COMP1_OUT,USART1_CTS,,CAN1_RX,USBDM,,TIM1_BKIN2_COMP1,,,EVENTOUT,,, -PortA,PA12,,TIM1_ETR,,,,SPI1_MOSI,,USART1_RTS/USART1_DE,,CAN1_TX,USBDP,,,,,EVENTOUT,,, -PortA,PA13,JTMS/SWDIO,IR_OUT,,,,,,,,,USBNOE,,,SAI1_SD_B,,EVENTOUT,,, -PortA,PA14,JTCK/SWCLK,LPTIM1_OUT,,,I2C1_SMBA,I2C4_SMBA,,,,,,,,SAI1_FS_B,,EVENTOUT,,, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,USART2_RX,,SPI1_NSS,SPI3_NSS,USART3_RTS/USART3_DE,UART4_RTS/UART4_DE,TSC_G3_IO1,,,,,,EVENTOUT,,, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,,,SPI1_NSS,DFSDM1_CKIN0,USART3_CK,,,QUADSPI_BK1_IO1,,COMP1_OUT,SAI1_EXTCLK,,EVENTOUT,ADC12_IN15,, -PortB,PB1,,TIM1_CH3N,TIM3_CH4,,,,DFSDM_DATIN0,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE,,QUADSPI_BK1_IO0,,,,LPTIM2_IN1,EVENTOUT,ADC12_IN16,COMP1_INN, -PortB,PB2,RTC_OUT,LPTIM1_OUT,,,I2C3_SMBA,,DFSDM_CKIN0,,,,,,,,,EVENTOUT,,COMP1_INP, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK,USART1_RTS/USART1_DE,,,,,,SAI1_SCK_B,,EVENTOUT,,COMP2_INM, -PortB,PB4,NJTRST,,TIM3_CH1,,I2C3_SDA,SPI1_MISO,SPI3_MISO,USART1_CTS,,TSC_G2_IO1,,,,SAI1_MCLK_B,,EVENTOUT,,COMP2_INP, -PortB,PB5,,LPTIM1_IN1,TIM3_CH2,CAN1_RX,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI,USART1_CK,,TSC_G2_IO2,,,COMP2_OUT,SAI1_SD_B,TIM16_BKIN,EVENTOUT,,, -PortB,PB6,,LPTIM1_ETR,,,I2C1_SCL,I2C4_SCL,,USART1_TX,CAN1_TX,TSC_G2_IO3,,,,SAI1_FS_B,TIM16_CH1N,EVENTOUT,,COMP2_INP, -PortB,PB7,,LPTIM1_IN2,,,I2C1_SDA,I2C4_SDA,,USART1_RX,UART4_CTS,TSC_G2_IO4,,,,,,EVENTOUT,,COMP2_INM, -PortB,PB8,,,,,I2C1_SCL,,,,,CAN1_RX,,,SDMMC1_D4,SAI1_MCLK_A,TIM16_CH1,EVENTOUT,,, -PortB,PB9,,IR_OUT,,,I2C1_SDA,SPI2_NSS,,,,CAN1_TX,,,SDMMC1_D5,SAI1_FS_A,,EVENTOUT,,, -PortB,PB10,,TIM2_CH3,,I2C4_SCL,I2C2_SCL,SPI2_SCK,,USART3_TX,LPUART1_RX,TSC_SYNC,QUADSPI_CLK,,COMP1_OUT,SAI1_SCK_A,,EVENTOUT,,, -PortB,PB11,,TIM2_CH4,,I2C4_SDA,I2C2_SDA,,,USART3_RX,LPUART1_TX,,QUADSPI_NCS,,COMP2_OUT,,,EVENTOUT,,, -PortB,PB12,,TIM1_BKIN,,TIM1_BKIN_COMP2,I2C2_SMBA,SPI2_NSS,DFSDM_DATIN1,USART3_CK,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1,CAN1_RX,,,SAI1_FS_A,TIM15_BKIN,EVENTOUT,,, -PortB,PB13,,TIM1_CH1N,,,I2C2_SCL,SPI2_SCK,DFSDM_CKIN1,USART3_CTS,LPUART1_CTS,TSC_G1_IO2,CAN1_TX,,,SAI1_SCK_A,TIM15_CH1N,EVENTOUT,,, -PortB,PB14,,TIM1_CH2N,,,I2C2_SDA,SPI2_MISO,DFSDM_DATIN2,USART3_RTS/USART3_DE,,TSC_G1_IO3,,,,SAI1_MCLK_A,TIM15_CH1,EVENTOUT,,, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,,,SPI2_MOSI,DFSDM_CKIN2,,,TSC_G1_IO4,,,,SAI1_SD_A,TIM15_CH2,EVENTOUT,,, -PortC,PC0,,LPTIM1_IN1,I2C4_SCL,,I2C3_SCL,,,,LPUART1_RX,,,,,,LPTIM2_IN1,EVENTOUT,ADC123_IN1,, -PortC,PC1,TRACED0,LPTIM1_OUT,I2C4_SDA,,I2C3_SDA,,,,LPUART1_TX,,,,,,,EVENTOUT,ADC123_IN2,, -PortC,PC2,,LPTIM1_IN2,,,,SPI2_MISO,DFSDM_CKOUT,,,,,,,,,EVENTOUT,ADC123_IN3,, -PortC,PC3,,LPTIM1_ETR,,,,SPI2_MOSI,,,,,,,,SAI1_SD_A,LPTIM2_ETR,EVENTOUT,ADC123_IN4,, -PortC,PC4,,,,,,,,USART3_TX,,,,,,,,EVENTOUT,ADC12_IN13,COMP1_INM, -PortC,PC5,,,,,,,,USART3_RX,,,,,,,,EVENTOUT,ADC12_IN14,COMP1_INP, -PortC,PC6,,,TIM3_CH1,,,,DFSDM_CKIN3,,,TSC_G4_IO1,,,SDMMC1_D6,,,EVENTOUT,,, -PortC,PC7,,,TIM3_CH2,,,,DFSDM_DATIN3,,,TSC_G4_IO2,,,SDMMC1_D7,,,EVENTOUT,,, -PortC,PC8,,,TIM3_CH3,,,,,,,TSC_G4_IO3,,,SDMMC1_D0,,,EVENTOUT,,, -PortC,PC9,,,TIM3_CH4,,,,,,,TSC_G4_IO4,USBNOE,,SDMMC1_D1,,,EVENTOUT,,, -PortC,PC10,TRACED1,,,,,,SPI3_SCK,USART3_TX,UART4_TX,TSC_G3_IO2,,,SDMMC1_D2,,,EVENTOUT,,, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,TSC_G3_IO3,,,SDMMC1_D3,,,EVENTOUT,,, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI,USART3_CK,,TSC_G3_IO4,,,SDMMC1_CK,,,EVENTOUT,,, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT,,, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT,,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT,,, -PortD,PD0,,,,,,SPI2_NSS,,,,CAN1_RX,,,,,,EVENTOUT,,, -PortD,PD1,,,,,,SPI2_SCK,,,,CAN1_TX,,,,,,EVENTOUT,,, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,USART3_RTS/USART3_DE,,TSC_SYNC,,,SDMMC1_CMD,,,EVENTOUT,,, -PortD,PD3,,,,,,SPI2_MISO,DFSDM_DATIN0,USART2_CTS,,,QUADSPI_BK2_NCS,,,,,EVENTOUT,,, -PortD,PD4,,,,,,SPI2_MOSI,DFSDM_CKIN0,USART2_RTS/USART2_DE,,,QUADSPI_BK2_IO0,,,,,EVENTOUT,,, -PortD,PD5,,,,,,,,USART2_TX,,,QUADSPI_BK2_IO1,,,,,EVENTOUT,,, -PortD,PD6,,,,,,,DFSDM_DATIN1,USART2_RX,,,QUADSPI_BK2_IO2,,,SAI1_SD_A,,EVENTOUT,,, -PortD,PD7,,,,,,,DFSDM_CKIN1,USART2_CK,,,QUADSPI_BK2_IO3,,,,,EVENTOUT,,, -PortD,PD8,,,,,,,,USART3_TX,,,,,,,,EVENTOUT,,, -PortD,PD9,,,,,,,,USART3_RX,,,,,,,,EVENTOUT,,, -PortD,PD10,,,,,,,,USART3_CK,,TSC_G6_IO1,,,,,,EVENTOUT,,, -PortD,PD11,,,,,I2C4_SMBA,,,USART3_CTS,,TSC_G6_IO2,,,,,LPTIM2_ETR,EVENTOUT,,, -PortD,PD12,,,,,I2C4_SCL,,,USART3_RTS/USART3_DE,,TSC_G6_IO3,,,,,LPTIM2_IN1,EVENTOUT,,, -PortD,PD13,,,,,I2C4_SDA,,,,,TSC_G6_IO4,,,,,LPTIM2_OUT,EVENTOUT,,, -PortD,PD14,,,,,,,,,,,,,,,,EVENTOUT,,, -PortD,PD15,,,,,,,,,,,,,,,,EVENTOUT,,, -PortE,PE0,,,,,,,,,,,,,,,TIM16_CH1,EVENTOUT,,, -PortE,PE1,,,,,,,,,,,,,,,,EVENTOUT,,, -PortE,PE2,TRACECLK,,TIM3_ETR,,,,,,,TSC_G7_IO1,,,,SAI1_MCLK_A,,EVENTOUT,,, -PortE,PE3,TRACED0,,TIM3_CH1,,,,,,,TSC_G7_IO2,,,,SAI1_SD_B,,EVENTOUT,,, -PortE,PE4,TRACED1,,TIM3_CH2,,,,DFSDM_DATIN3,,,TSC_G7_IO3,,,,SAI1_FS_A,,EVENTOUT,,, -PortE,PE5,TRACED2,,TIM3_CH3,,,,DFSDM_CKIN3,,,TSC_G7_IO4,,,,SAI1_SCK_A,,EVENTOUT,,, -PortE,PE6,TRACED3,,TIM3_CH4,,,,,,,,,,,SAI1_SD_A,,EVENTOUT,,, -PortE,PE7,,TIM1_ETR,,,,,DFSDM_DATIN2,,,,,,,SAI1_SD_B,,EVENTOUT,,, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM_CKIN2,,,,,,,SAI1_SCK_B,,EVENTOUT,,, -PortE,PE9,,TIM1_CH1,,,,,DFSDM_CKOUT,,,,,,,SAI1_FS_B,,EVENTOUT,,, -PortE,PE10,,TIM1_CH2N,,,,,,,,TSC_G5_IO1,QUADSPI_CLK,,,SAI1_MCLK_B,,EVENTOUT,,, -PortE,PE11,,TIM1_CH2,,,,,,,,TSC_G5_IO2,QUADSPI_BK1_NCS,,,,,EVENTOUT,,, -PortE,PE12,,TIM1_CH3N,,,,SPI1_NSS,,,,TSC_G5_IO3,QUADSPI_BK1_IO0,,,,,EVENTOUT,,, -PortE,PE13,,TIM1_CH3,,,,SPI1_SCK,,,,TSC_G5_IO4,QUADSPI_BK1_IO1,,,,,EVENTOUT,,, -PortE,PE14,,TIM1_CH4,TIM1_BKIN2,TIM1_BKIN2_COMP2,,SPI1_MISO,,,,,QUADSPI_BK1_IO2,,,,,EVENTOUT,,, -PortE,PE15,,TIM1_BKIN,,TIM1_BKIN_COMP1,,SPI1_MOSI,,,,,QUADSPI_BK1_IO3,,,,,EVENTOUT,,, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH3,,,,,,,,,,,,,,,,,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/LPTIM1,I2C4/TIM1/TIM2/TIM3,I2C4/USART2/CAN1/TIM1,I2C1/I2C2/I2C3/I2C4,SPI1/SPI2/I2C4,SPI3/DFSDM/COMP1,USART1/USART2/USART3,UART4/LPUART1/CAN1 ,CAN1/TSC ,CAN1/USB/QUADSPI, ,SDMMC1/COMP1/COMP2,SAI1 ,TIM2/TIM15/TIM16/LPTIM2,EVENTOUT,ADC +PortA,PA0 , ,TIM2_CH1 , , , , , ,USART2_CTS ,UART4_TX , , , ,COMP1_OUT ,SAI1_EXTCLK,TIM2_ETR ,EVENTOUT,ADC12_IN5 +PortA,PA1 , ,TIM2_CH2 , , ,I2C1_SMBA ,SPI1_SCK , ,USART2_RTS/USART2_DE,UART4_RX , , , , , ,TIM15_CH1N ,EVENTOUT,ADC12_IN6 +PortA,PA2 , ,TIM2_CH3 , , , , , ,USART2_TX ,LPUART1_TX , ,QUADSPI_BK1_NCS , ,COMP2_OUT , ,TIM15_CH1 ,EVENTOUT,ADC12_IN7 +PortA,PA3 , ,TIM2_CH4 , , , , , ,USART2_RX ,LPUART1_RX , ,QUADSPI_CLK , , ,SAI1_MCLK_A,TIM15_CH2 ,EVENTOUT,ADC12_IN8 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS ,USART2_CK , , , , , ,SAI1_FS_B ,LPTIM2_OUT ,EVENTOUT,ADC12_IN9 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_SCK ,DFSDM1_CKOUT , , , , , , , ,LPTIM2_ETR ,EVENTOUT,ADC12_IN10 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 , , ,SPI1_MISO ,COMP1_OUT ,USART3_CTS ,LPUART1_CTS , ,QUADSPI_BK1_IO3 , ,TIM1_BKIN_COMP2 , ,TIM16_CH1 ,EVENTOUT,ADC12_IN11 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 , ,I2C3_SCL ,SPI1_MOSI ,DFSDM1_DATIN0 , , , ,QUADSPI_BK1_IO2 , ,COMP2_OUT , , ,EVENTOUT,ADC12_IN12 +PortA,PA8 ,MCO ,TIM1_CH1 , , , , ,DFSDM1_CKIN1 ,USART1_CK , , , , , ,SAI1_SCK_A ,LPTIM2_OUT ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , ,I2C1_SCL , ,DFSDM1_DATIN1 ,USART1_TX , , , , , ,SAI1_FS_A ,TIM15_BKIN ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , ,I2C1_SDA , , ,USART1_RX , , ,USBCRS_SYNC , , ,SAI1_SD_A , ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2 , , ,SPI1_MISO ,COMP1_OUT ,USART1_CTS , ,CAN1_RX ,USBDM , ,TIM1_BKIN2_COMP1 , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI1_MOSI , ,USART1_RTS/USART1_DE, ,CAN1_TX ,USBDP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO ,IR_OUT , , , , , , , , ,USBNOE , , ,SAI1_SD_B , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK ,LPTIM1_OUT , , ,I2C1_SMBA ,I2C4_SMBA , , , , , , , ,SAI1_FS_B , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR ,USART2_RX , ,SPI1_NSS ,SPI3_NSS ,USART3_RTS/USART3_DE,UART4_RTS/UART4_DE ,TSC_G3_IO1, , , , , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 , , ,SPI1_NSS ,DFSDM1_CKIN0 ,USART3_CK , , ,QUADSPI_BK1_IO1 , ,COMP1_OUT ,SAI1_EXTCLK, ,EVENTOUT,ADC12_IN15 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 , , , ,DFSDM_DATIN0 ,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE, ,QUADSPI_BK1_IO0 , , , ,LPTIM2_IN1 ,EVENTOUT,ADC12_IN16 +PortB,PB2 ,RTC_OUT ,LPTIM1_OUT , , ,I2C3_SMBA , ,DFSDM_CKIN0 , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK ,USART1_RTS/USART1_DE, , , , , ,SAI1_SCK_B , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1 , ,I2C3_SDA ,SPI1_MISO ,SPI3_MISO ,USART1_CTS , ,TSC_G2_IO1, , , ,SAI1_MCLK_B, ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 ,TIM3_CH2 ,CAN1_RX ,I2C1_SMBA ,SPI1_MOSI ,SPI3_MOSI ,USART1_CK , ,TSC_G2_IO2, , ,COMP2_OUT ,SAI1_SD_B ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR , , ,I2C1_SCL ,I2C4_SCL , ,USART1_TX ,CAN1_TX ,TSC_G2_IO3, , , ,SAI1_FS_B ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 , , ,I2C1_SDA ,I2C4_SDA , ,USART1_RX ,UART4_CTS ,TSC_G2_IO4, , , , , ,EVENTOUT, +PortB,PB8 , , , , ,I2C1_SCL , , , , ,CAN1_RX , , ,SDMMC1_D4 ,SAI1_MCLK_A,TIM16_CH1 ,EVENTOUT, +PortB,PB9 , ,IR_OUT , , ,I2C1_SDA ,SPI2_NSS , , , ,CAN1_TX , , ,SDMMC1_D5 ,SAI1_FS_A , ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , ,I2C4_SCL ,I2C2_SCL ,SPI2_SCK , ,USART3_TX ,LPUART1_RX ,TSC_SYNC ,QUADSPI_CLK , ,COMP1_OUT ,SAI1_SCK_A , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , ,I2C4_SDA ,I2C2_SDA , , ,USART3_RX ,LPUART1_TX , ,QUADSPI_NCS , ,COMP2_OUT , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,TIM1_BKIN_COMP2 ,I2C2_SMBA ,SPI2_NSS ,DFSDM_DATIN1 ,USART3_CK ,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1,CAN1_RX , , ,SAI1_FS_A ,TIM15_BKIN ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2C2_SCL ,SPI2_SCK ,DFSDM_CKIN1 ,USART3_CTS ,LPUART1_CTS ,TSC_G1_IO2,CAN1_TX , , ,SAI1_SCK_A ,TIM15_CH1N ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , , ,I2C2_SDA ,SPI2_MISO ,DFSDM_DATIN2 ,USART3_RTS/USART3_DE, ,TSC_G1_IO3, , , ,SAI1_MCLK_A,TIM15_CH1 ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , , , ,SPI2_MOSI ,DFSDM_CKIN2 , , ,TSC_G1_IO4, , , ,SAI1_SD_A ,TIM15_CH2 ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 ,I2C4_SCL , ,I2C3_SCL , , , ,LPUART1_RX , , , , , ,LPTIM2_IN1 ,EVENTOUT,ADC123_IN1 +PortC,PC1 ,TRACED0 ,LPTIM1_OUT ,I2C4_SDA , ,I2C3_SDA , , , ,LPUART1_TX , , , , , , ,EVENTOUT,ADC123_IN2 +PortC,PC2 , ,LPTIM1_IN2 , , , ,SPI2_MISO ,DFSDM_CKOUT , , , , , , , , ,EVENTOUT,ADC123_IN3 +PortC,PC3 , ,LPTIM1_ETR , , , ,SPI2_MOSI , , , , , , , ,SAI1_SD_A ,LPTIM2_ETR ,EVENTOUT,ADC123_IN4 +PortC,PC4 , , , , , , , ,USART3_TX , , , , , , , ,EVENTOUT,ADC12_IN13 +PortC,PC5 , , , , , , , ,USART3_RX , , , , , , , ,EVENTOUT,ADC12_IN14 +PortC,PC6 , , ,TIM3_CH1 , , , ,DFSDM_CKIN3 , , ,TSC_G4_IO1, , ,SDMMC1_D6 , , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 , , , ,DFSDM_DATIN3 , , ,TSC_G4_IO2, , ,SDMMC1_D7 , , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 , , , , , , ,TSC_G4_IO3, , ,SDMMC1_D0 , , ,EVENTOUT, +PortC,PC9 , , ,TIM3_CH4 , , , , , , ,TSC_G4_IO4,USBNOE , ,SDMMC1_D1 , , ,EVENTOUT, +PortC,PC10,TRACED1 , , , , , ,SPI3_SCK ,USART3_TX ,UART4_TX ,TSC_G3_IO2, , ,SDMMC1_D2 , , ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,TSC_G3_IO3, , ,SDMMC1_D3 , , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI ,USART3_CK , ,TSC_G3_IO4, , ,SDMMC1_CK , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , ,SPI2_NSS , , , ,CAN1_RX , , , , , ,EVENTOUT, +PortD,PD1 , , , , , ,SPI2_SCK , , , ,CAN1_TX , , , , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR , , , , ,USART3_RTS/USART3_DE, ,TSC_SYNC , , ,SDMMC1_CMD , , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_MISO ,DFSDM_DATIN0 ,USART2_CTS , , ,QUADSPI_BK2_NCS , , , , ,EVENTOUT, +PortD,PD4 , , , , , ,SPI2_MOSI ,DFSDM_CKIN0 ,USART2_RTS/USART2_DE, , ,QUADSPI_BK2_IO0 , , , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , ,QUADSPI_BK2_IO1 , , , , ,EVENTOUT, +PortD,PD6 , , , , , , ,DFSDM_DATIN1 ,USART2_RX , , ,QUADSPI_BK2_IO2 , , ,SAI1_SD_A , ,EVENTOUT, +PortD,PD7 , , , , , , ,DFSDM_CKIN1 ,USART2_CK , , ,QUADSPI_BK2_IO3 , , , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , , , , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , , , , , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , ,TSC_G6_IO1, , , , , ,EVENTOUT, +PortD,PD11, , , , ,I2C4_SMBA , , ,USART3_CTS , ,TSC_G6_IO2, , , , ,LPTIM2_ETR ,EVENTOUT, +PortD,PD12, , , , ,I2C4_SCL , , ,USART3_RTS/USART3_DE, ,TSC_G6_IO3, , , , ,LPTIM2_IN1 ,EVENTOUT, +PortD,PD13, , , , ,I2C4_SDA , , , , ,TSC_G6_IO4, , , , ,LPTIM2_OUT ,EVENTOUT, +PortD,PD14, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD15, , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE0 , , , , , , , , , , , , , , ,TIM16_CH1 ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE2 ,TRACECLK , ,TIM3_ETR , , , , , , ,TSC_G7_IO1, , , ,SAI1_MCLK_A, ,EVENTOUT, +PortE,PE3 ,TRACED0 , ,TIM3_CH1 , , , , , , ,TSC_G7_IO2, , , ,SAI1_SD_B , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,TIM3_CH2 , , , ,DFSDM_DATIN3 , , ,TSC_G7_IO3, , , ,SAI1_FS_A , ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,TIM3_CH3 , , , ,DFSDM_CKIN3 , , ,TSC_G7_IO4, , , ,SAI1_SCK_A , ,EVENTOUT, +PortE,PE6 ,TRACED3 , ,TIM3_CH4 , , , , , , , , , , ,SAI1_SD_A , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM_DATIN2 , , , , , , ,SAI1_SD_B , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM_CKIN2 , , , , , , ,SAI1_SCK_B , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM_CKOUT , , , , , , ,SAI1_FS_B , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , , , , ,TSC_G5_IO1,QUADSPI_CLK , , ,SAI1_MCLK_B, ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , , , , , ,TSC_G5_IO2,QUADSPI_BK1_NCS , , , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI1_NSS , , , ,TSC_G5_IO3,QUADSPI_BK1_IO0 , , , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI1_SCK , , , ,TSC_G5_IO4,QUADSPI_BK1_IO1 , , , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 ,TIM1_BKIN2 ,TIM1_BKIN2_COMP2 , ,SPI1_MISO , , , , ,QUADSPI_BK1_IO2 , , , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , ,TIM1_BKIN_COMP1 , ,SPI1_MOSI , , , , ,QUADSPI_BK1_IO3 , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , , , , , , , diff --git a/ports/stm32/boards/stm32l476_af.csv b/ports/stm32/boards/stm32l476_af.csv index df824ed7080fc..bb99d39735ac4 100644 --- a/ports/stm32/boards/stm32l476_af.csv +++ b/ports/stm32/boards/stm32l476_af.csv @@ -1,116 +1,116 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,, -,,SYS_AF,TIM1/TIM2/TIM5/TIM8/LPTIM1,TIM1/TIM2/TIM3/TIM4/TIM5,TIM8,I2C1/I2C2/I2C3,SPI1/SPI2,SPI3/DFSDM,USART1/USART2/USART3,UART4/UART5/LPUART1,CAN1/TSC,OTG_FS/QUADSPI,LCD,SDMMC1/COMP1/COMP2/FMC/SWPMI1,SAI1/SAI2,TIM2/TIM15/TIM16/TIM17/LPTIM2,EVENTOUT,ADC,COMP -PortA,PA0,,TIM2_CH1,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,,,SAI1_EXTCLK,TIM2_ETR,EVENTOUT,ADC12_IN5, -PortA,PA1,,TIM2_CH2,TIM5_CH2,,,,,USART2_RTS/USART2_DE,UART4_RX,,,LCD_SEG0,,,TIM15_CH1N,EVENTOUT,ADC12_IN6, -PortA,PA2,,TIM2_CH3,TIM5_CH3,,,,,USART2_TX,,,,LCD_SEG1,,SAI2_EXTCLK,TIM15_CH1,EVENTOUT,ADC12_IN7, -PortA,PA3,,TIM2_CH4,TIM5_CH4,,,,,USART2_RX,,,,LCD_SEG2,,,TIM15_CH2,EVENTOUT,ADC12_IN8, -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS,USART2_CK,,,,,,SAI1_FS_B,LPTIM2_OUT,EVENTOUT,ADC12_IN9, -PortA,PA5,,TIM2_CH1,TIM2_ETR,TIM8_CH1N,,SPI1_SCK,,,,,,,,,LPTIM2_ETR,EVENTOUT,ADC12_IN10, -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,,SPI1_MISO,,USART3_CTS,,,QUADSPI_BK1_IO3,LCD_SEG3,TIM1_BKIN_COMP2,TIM8_BKIN_COMP2,TIM16_CH1,EVENTOUT,ADC12_IN11, -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,,SPI1_MOSI,,,,,QUADSPI_BK1_IO2,LCD_SEG4,,,TIM17_CH1,EVENTOUT,ADC12_IN12, -PortA,PA8,MCO,TIM1_CH1,,,,,,USART1_CK,,,OTG_FS_SOF,LCD_COM0,,,LPTIM2_OUT,EVENTOUT,, -PortA,PA9,,TIM1_CH2,,,,,,USART1_TX,,,,LCD_COM1,,,TIM15_BKIN,EVENTOUT,, -PortA,PA10,,TIM1_CH3,,,,,,USART1_RX,,,OTG_FS_ID,LCD_COM2,,,TIM17_BKIN,EVENTOUT,, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,,,,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,TIM1_BKIN2_COMP1,,,EVENTOUT,, -PortA,PA12,,TIM1_ETR,,,,,,USART1_RTS/USART1_DE,,CAN1_TX,OTG_FS_DP,,,,,EVENTOUT,, -PortA,PA13,JTMS/SWDIO,IR_OUT,,,,,,,,,OTG_FS_NOE,,,,,EVENTOUT,, -PortA,PA14,JTCK/SWCLK,,,,,,,,,,,,,,,EVENTOUT,, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,,,SPI1_NSS,SPI3_NSS,,UART4_RTS/UART4_DE,TSC_G3_IO1,,LCD_SEG17,,SAI2_FS_B,,EVENTOUT,, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,,,USART3_CK,,,QUADSPI_BK1_IO1,LCD_SEG5,COMP1_OUT,,,EVENTOUT,ADC12_IN15, -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,DFSDM_DATIN0,USART3_RTS/USART3_DE,,,QUADSPI_BK1_IO0,LCD_SEG6,,,LPTIM2_IN1,EVENTOUT,ADC12_IN16,COMP1_INN -PortB,PB2,RTC_OUT,LPTIM1_OUT,,,I2C3_SMBA,,DFSDM_CKIN0,,,,,,,,,EVENTOUT,,COMP1_INP -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK,USART1_RTS/USART1_DE,,,,LCD_SEG7,,SAI1_SCK_B,,EVENTOUT,,COMP2_INM -PortB,PB4,NJTRST,,TIM3_CH1,,,SPI1_MISO,SPI3_MISO,USART1_CTS,UART5_RTS/UART5_DE,TSC_G2_IO1,,LCD_SEG8,,SAI1_MCLK_B,TIM17_BKIN,EVENTOUT,,COMP2_INP -PortB,PB5,,LPTIM1_IN1,TIM3_CH2,,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI,USART1_CK,UART5_CTS,TSC_G2_IO2,,LCD_SEG9,COMP2_OUT,SAI1_SD_B,TIM16_BKIN,EVENTOUT,, -PortB,PB6,,LPTIM1_ETR,TIM4_CH1,TIM8_BKIN2,I2C1_SCL,,DFSDM_DATIN5,USART1_TX,,TSC_G2_IO3,,,TIM8_BKIN2_COMP2,SAI1_FS_B,TIM16_CH1N,EVENTOUT,,COMP2_INP -PortB,PB7,,LPTIM1_IN2,TIM4_CH2,TIM8_BKIN,I2C1_SDA,,DFSDM_CKIN5,USART1_RX,UART4_CTS,TSC_G2_IO4,,LCD_SEG21,FMC_NL,TIM8_BKIN_COMP1,TIM17_CH1N,EVENTOUT,,COMP2_INM -PortB,PB8,,,TIM4_CH3,,I2C1_SCL,,DFSDM_DATIN6,,,CAN1_RX,,LCD_SEG16,SDMMC1_D4,SAI1_MCLK_A,TIM16_CH1,EVENTOUT,, -PortB,PB9,,IR_OUT,TIM4_CH4,,I2C1_SDA,SPI2_NSS,DFSDM_CKIN6,,,CAN1_TX,,LCD_COM3,SDMMC1_D5,SAI1_FS_A,TIM17_CH1,EVENTOUT,, -PortB,PB10,,TIM2_CH3,,,I2C2_SCL,SPI2_SCK,DFSDM_DATIN7,USART3_TX,LPUART1_RX,,QUADSPI_CLK,LCD_SEG10,COMP1_OUT,SAI1_SCK_A,,EVENTOUT,, -PortB,PB11,,TIM2_CH4,,,I2C2_SDA,,DFSDM_CKIN7,USART3_RX,LPUART1_TX,,QUADSPI_NCS,LCD_SEG11,COMP2_OUT,,,EVENTOUT,, -PortB,PB12,,TIM1_BKIN,,TIM1_BKIN_COMP2,I2C2_SMBA,SPI2_NSS,DFSDM_DATIN1,USART3_CK,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1,,LCD_SEG12,SWPMI1_IO,SAI2_FS_A,TIM15_BKIN,EVENTOUT,, -PortB,PB13,,TIM1_CH1N,,,I2C2_SCL,SPI2_SCK,DFSDM_CKIN1,USART3_CTS,LPUART1_CTS,TSC_G1_IO2,,LCD_SEG13,SWPMI1_TX,SAI2_SCK_A,TIM15_CH1N,EVENTOUT,, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,I2C2_SDA,SPI2_MISO,DFSDM_DATIN2,USART3_RTS/USART3_DE,,TSC_G1_IO3,,LCD_SEG14,SWPMI1_RX,SAI2_MCLK_A,TIM15_CH1,EVENTOUT,, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI,DFSDM_CKIN2,,,TSC_G1_IO4,,LCD_SEG15,SWPMI1_SUSPEND,SAI2_SD_A,TIM15_CH2,EVENTOUT,, -PortC,PC0,,LPTIM1_IN1,,,I2C3_SCL,,DFSDM_DATIN4,,LPUART1_RX,,,LCD_SEG18,,,LPTIM2_IN1,EVENTOUT,ADC123_IN1, -PortC,PC1,,LPTIM1_OUT,,,I2C3_SDA,,DFSDM_CKIN4,,LPUART1_TX,,,LCD_SEG19,,,,EVENTOUT,ADC123_IN2, -PortC,PC2,,LPTIM1_IN2,,,,SPI2_MISO,DFSDM_CKOUT,,,,,LCD_SEG20,,,,EVENTOUT,ADC123_IN3, -PortC,PC3,,LPTIM1_ETR,,,,SPI2_MOSI,,,,,,LCD_VLCD,,SAI1_SD_A,LPTIM2_ETR,EVENTOUT,ADC123_IN4, -PortC,PC4,,,,,,,,USART3_TX,,,,LCD_SEG22,,,,EVENTOUT,ADC12_IN13,COMP1_INM -PortC,PC5,,,,,,,,USART3_RX,,,,LCD_SEG23,,,,EVENTOUT,ADC12_IN14,COMP1_INP -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,,DFSDM_CKIN3,,,TSC_G4_IO1,,LCD_SEG24,SDMMC1_D6,SAI2_MCLK_A,,EVENTOUT,, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,DFSDM_DATIN3,,,TSC_G4_IO2,,LCD_SEG25,SDMMC1_D7,SAI2_MCLK_B,,EVENTOUT,, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,,TSC_G4_IO3,,LCD_SEG26,SDMMC1_D0,,,EVENTOUT,, -PortC,PC9,,TIM8_BKIN2,TIM3_CH4,TIM8_CH4,,,,,,TSC_G4_IO4,OTG_FS_NOE,LCD_SEG27,SDMMC1_D1,SAI2_EXTCLK,TIM8_BKIN2_COMP1,EVENTOUT,, -PortC,PC10,,,,,,,SPI3_SCK,USART3_TX,UART4_TX,TSC_G3_IO2,,LCD_COM4/LCD_SEG28/LCD_SEG40,SDMMC1_D2,SAI2_SCK_B,,EVENTOUT,, -PortC,PC11,,,,,,,SPI3_MISO,USART3_RX,UART4_RX,TSC_G3_IO3,,LCD_COM5/LCD_SEG29/LCD_SEG41,SDMMC1_D3,SAI2_MCLK_B,,EVENTOUT,, -PortC,PC12,,,,,,,SPI3_MOSI,USART3_CK,UART5_TX,TSC_G3_IO4,,LCD_COM6/LCD_SEG30/LCD_SEG42,SDMMC1_CK,SAI2_SD_B,,EVENTOUT,, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT,, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT,, -PortD,PD0,,,,,,SPI2_NSS,DFSDM_DATIN7,,,CAN1_RX,,,FMC_D2,,,EVENTOUT,, -PortD,PD1,,,,,,SPI2_SCK,DFSDM_CKIN7,,,CAN1_TX,,,FMC_D3,,,EVENTOUT,, -PortD,PD2,,,TIM3_ETR,,,,,USART3_RTS/USART3_DE,UART5_RX,TSC_SYNC,,LCD_COM7/LCD_SEG31/LCD_SEG43,SDMMC1_CMD,,,EVENTOUT,, -PortD,PD3,,,,,,SPI2_MISO,DFSDM_DATIN0,USART2_CTS,,,,,FMC_CLK,,,EVENTOUT,, -PortD,PD4,,,,,,SPI2_MOSI,DFSDM_CKIN0,USART2_RTS/USART2_DE,,,,,FMC_NOE,,,EVENTOUT,, -PortD,PD5,,,,,,,,USART2_TX,,,,,FMC_NWE,,,EVENTOUT,, -PortD,PD6,,,,,,,DFSDM_DATIN1,USART2_RX,,,,,FMC_NWAIT,SAI1_SD_A,,EVENTOUT,, -PortD,PD7,,,,,,,DFSDM_CKIN1,USART2_CK,,,,,FMC_NE1,,,EVENTOUT,, -PortD,PD8,,,,,,,,USART3_TX,,,,LCD_SEG28,FMC_D13,,,EVENTOUT,, -PortD,PD9,,,,,,,,USART3_RX,,,,LCD_SEG29,FMC_D14,SAI2_MCLK_A,,EVENTOUT,, -PortD,PD10,,,,,,,,USART3_CK,,TSC_G6_IO1,,LCD_SEG30,FMC_D15,SAI2_SCK_A,,EVENTOUT,, -PortD,PD11,,,,,,,,USART3_CTS,,TSC_G6_IO2,,LCD_SEG31,FMC_A16,SAI2_SD_A,LPTIM2_ETR,EVENTOUT,, -PortD,PD12,,,TIM4_CH1,,,,,USART3_RTS/USART3_DE,,TSC_G6_IO3,,LCD_SEG32,FMC_A17,SAI2_FS_A,LPTIM2_IN1,EVENTOUT,, -PortD,PD13,,,TIM4_CH2,,,,,,,TSC_G6_IO4,,LCD_SEG33,FMC_A18,,LPTIM2_OUT,EVENTOUT,, -PortD,PD14,,,TIM4_CH3,,,,,,,,,LCD_SEG34,FMC_D0,,,EVENTOUT,, -PortD,PD15,,,TIM4_CH4,,,,,,,,,LCD_SEG35,FMC_D1,,,EVENTOUT,, -PortE,PE0,,,TIM4_ETR,,,,,,,,,LCD_SEG36,FMC_NBL0,,TIM16_CH1,EVENTOUT,, -PortE,PE1,,,,,,,,,,,,LCD_SEG37,FMC_NBL1,,TIM17_CH1,EVENTOUT,, -PortE,PE2,TRACECLK,,TIM3_ETR,,,,,,,TSC_G7_IO1,,LCD_SEG38,FMC_A23,SAI1_MCLK_A,,EVENTOUT,, -PortE,PE3,TRACED0,,TIM3_CH1,,,,,,,TSC_G7_IO2,,LCD_SEG39,FMC_A19,SAI1_SD_B,,EVENTOUT,, -PortE,PE4,TRACED1,,TIM3_CH2,,,,DFSDM_DATIN3,,,TSC_G7_IO3,,,FMC_A20,SAI1_FS_A,,EVENTOUT,, -PortE,PE5,TRACED2,,TIM3_CH3,,,,DFSDM_CKIN3,,,TSC_G7_IO4,,,FMC_A21,SAI1_SCK_A,,EVENTOUT,, -PortE,PE6,TRACED3,,TIM3_CH4,,,,,,,,,,FMC_A22,SAI1_SD_A,,EVENTOUT,, -PortE,PE7,,TIM1_ETR,,,,,DFSDM_DATIN2,,,,,,FMC_D4,SAI1_SD_B,,EVENTOUT,, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM_CKIN2,,,,,,FMC_D5,SAI1_SCK_B,,EVENTOUT,, -PortE,PE9,,TIM1_CH1,,,,,DFSDM_CKOUT,,,,,,FMC_D6,SAI1_FS_B,,EVENTOUT,, -PortE,PE10,,TIM1_CH2N,,,,,DFSDM_DATIN4,,,TSC_G5_IO1,QUADSPI_CLK,,FMC_D7,SAI1_MCLK_B,,EVENTOUT,, -PortE,PE11,,TIM1_CH2,,,,,DFSDM_CKIN4,,,TSC_G5_IO2,QUADSPI_NCS,,FMC_D8,,,EVENTOUT,, -PortE,PE12,,TIM1_CH3N,,,,SPI1_NSS,DFSDM_DATIN5,,,TSC_G5_IO3,QUADSPI_BK1_IO0,,FMC_D9,,,EVENTOUT,, -PortE,PE13,,TIM1_CH3,,,,SPI1_SCK,DFSDM_CKIN5,,,TSC_G5_IO4,QUADSPI_BK1_IO1,,FMC_D10,,,EVENTOUT,, -PortE,PE14,,TIM1_CH4,TIM1_BKIN2,TIM1_BKIN2_COMP2,,SPI1_MISO,,,,,QUADSPI_BK1_IO2,,FMC_D11,,,EVENTOUT,, -PortE,PE15,,TIM1_BKIN,,TIM1_BKIN_COMP1,,SPI1_MOSI,,,,,QUADSPI_BK1_IO3,,FMC_D12,,,EVENTOUT,, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT,, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT,, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT,, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN6, -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN7, -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN8, -PortF,PF6,,TIM5_ETR,TIM5_CH1,,,,,,,,,,,SAI1_SD_B,,EVENTOUT,ADC3_IN9, -PortF,PF7,,,TIM5_CH2,,,,,,,,,,,SAI1_MCLK_B,,EVENTOUT,ADC3_IN10, -PortF,PF8,,,TIM5_CH3,,,,,,,,,,,SAI1_SCK_B,,EVENTOUT,ADC3_IN11, -PortF,PF9,,,TIM5_CH4,,,,,,,,,,,SAI1_FS_B,TIM15_CH1,EVENTOUT,ADC3_IN12, -PortF,PF10,,,,,,,,,,,,,,,TIM15_CH2,EVENTOUT,ADC3_IN13, -PortF,PF11,,,,,,,,,,,,,,,,EVENTOUT,, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT,, -PortF,PF13,,,,,,,DFSDM_DATIN6,,,,,,FMC_A7,,,EVENTOUT,, -PortF,PF14,,,,,,,DFSDM_CKIN6,,,TSC_G8_IO1,,,FMC_A8,,,EVENTOUT,, -PortF,PF15,,,,,,,,,,TSC_G8_IO2,,,FMC_A9,,,EVENTOUT,, -PortG,PG0,,,,,,,,,,TSC_G8_IO3,,,FMC_A10,,,EVENTOUT,, -PortG,PG1,,,,,,,,,,TSC_G8_IO4,,,FMC_A11,,,EVENTOUT,, -PortG,PG2,,,,,,SPI1_SCK,,,,,,,FMC_A12,SAI2_SCK_B,,EVENTOUT,, -PortG,PG3,,,,,,SPI1_MISO,,,,,,,FMC_A13,SAI2_FS_B,,EVENTOUT,, -PortG,PG4,,,,,,SPI1_MOSI,,,,,,,FMC_A14,SAI2_MCLK_B,,EVENTOUT,, -PortG,PG5,,,,,,SPI1_NSS,,,LPUART1_CTS,,,,FMC_A15,SAI2_SD_B,,EVENTOUT,, -PortG,PG6,,,,,I2C3_SMBA,,,,LPUART1_RTS/LPUART1_DE,,,,,,,EVENTOUT,, -PortG,PG7,,,,,I2C3_SCL,,,,LPUART1_TX,,,,FMC_INT3,,,EVENTOUT,, -PortG,PG8,,,,,I2C3_SDA,,,,LPUART1_RX,,,,,,,EVENTOUT,, -PortG,PG9,,,,,,,SPI3_SCK,USART1_TX,,,,,FMC_NCE3/FMC_NE2,SAI2_SCK_A,TIM15_CH1N,EVENTOUT,, -PortG,PG10,,LPTIM1_IN1,,,,,SPI3_MISO,USART1_RX,,,,,FMC_NE3,SAI2_FS_A,TIM15_CH1,EVENTOUT,, -PortG,PG11,,LPTIM1_IN2,,,,,SPI3_MOSI,USART1_CTS,,,,,,SAI2_MCLK_A,TIM15_CH2,EVENTOUT,, -PortG,PG12,,LPTIM1_ETR,,,,,SPI3_NSS,USART1_RTS/USART1_DE,,,,,FMC_NE4,SAI2_SD_A,,EVENTOUT,, -PortG,PG13,,,,,I2C1_SDA,,,USART1_CK,,,,,FMC_A24,,,EVENTOUT,, -PortG,PG14,,,,,I2C1_SCL,,,,,,,,FMC_A25,,,EVENTOUT,, -PortG,PG15,,LPTIM1_OUT,,,I2C1_SMBA,,,,,,,,,,,EVENTOUT,, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT,, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/TIM5/TIM8/LPTIM1,TIM1/TIM2/TIM3/TIM4/TIM5,TIM8 ,I2C1/I2C2/I2C3,SPI1/SPI2,SPI3/DFSDM ,USART1/USART2/USART3,UART4/UART5/LPUART1 ,CAN1/TSC ,OTG_FS/QUADSPI ,LCD ,SDMMC1/COMP1/COMP2/FMC/SWPMI1,SAI1/SAI2 ,TIM2/TIM15/TIM16/TIM17/LPTIM2,EVENTOUT,ADC +PortA,PA0 , ,TIM2_CH1 ,TIM5_CH1 ,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , , , ,SAI1_EXTCLK ,TIM2_ETR ,EVENTOUT,ADC12_IN5 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , , , , ,USART2_RTS/USART2_DE,UART4_RX , , ,LCD_SEG0 , , ,TIM15_CH1N ,EVENTOUT,ADC12_IN6 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , , , , ,USART2_TX , , , ,LCD_SEG1 , ,SAI2_EXTCLK ,TIM15_CH1 ,EVENTOUT,ADC12_IN7 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 , , , , ,USART2_RX , , , ,LCD_SEG2 , , ,TIM15_CH2 ,EVENTOUT,ADC12_IN8 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS ,USART2_CK , , , , , ,SAI1_FS_B ,LPTIM2_OUT ,EVENTOUT,ADC12_IN9 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR ,TIM8_CH1N , ,SPI1_SCK , , , , , , , , ,LPTIM2_ETR ,EVENTOUT,ADC12_IN10 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,SPI1_MISO, ,USART3_CTS , , ,QUADSPI_BK1_IO3,LCD_SEG3 ,TIM1_BKIN_COMP2 ,TIM8_BKIN_COMP2,TIM16_CH1 ,EVENTOUT,ADC12_IN11 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N , ,SPI1_MOSI, , , , ,QUADSPI_BK1_IO2,LCD_SEG4 , , ,TIM17_CH1 ,EVENTOUT,ADC12_IN12 +PortA,PA8 ,MCO ,TIM1_CH1 , , , , , ,USART1_CK , , ,OTG_FS_SOF ,LCD_COM0 , , ,LPTIM2_OUT ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , , , , , ,USART1_TX , , , ,LCD_COM1 , , ,TIM15_BKIN ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , , , , ,USART1_RX , , ,OTG_FS_ID ,LCD_COM2 , , ,TIM17_BKIN ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2 , , , , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , ,TIM1_BKIN2_COMP1 , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , , , ,USART1_RTS/USART1_DE, ,CAN1_TX ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO ,IR_OUT , , , , , , , , ,OTG_FS_NOE , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK , , , , , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_NSS ,SPI3_NSS , ,UART4_RTS/UART4_DE ,TSC_G3_IO1, ,LCD_SEG17 , ,SAI2_FS_B , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , , , ,USART3_CK , , ,QUADSPI_BK1_IO1,LCD_SEG5 ,COMP1_OUT , , ,EVENTOUT,ADC12_IN15 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM_DATIN0,USART3_RTS/USART3_DE, , ,QUADSPI_BK1_IO0,LCD_SEG6 , , ,LPTIM2_IN1 ,EVENTOUT,ADC12_IN16 +PortB,PB2 ,RTC_OUT ,LPTIM1_OUT , , ,I2C3_SMBA , ,DFSDM_CKIN0 , , , , , , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK ,USART1_RTS/USART1_DE, , , ,LCD_SEG7 , ,SAI1_SCK_B , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1 , , ,SPI1_MISO,SPI3_MISO ,USART1_CTS ,UART5_RTS/UART5_DE ,TSC_G2_IO1, ,LCD_SEG8 , ,SAI1_MCLK_B ,TIM17_BKIN ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 ,TIM3_CH2 , ,I2C1_SMBA ,SPI1_MOSI,SPI3_MOSI ,USART1_CK ,UART5_CTS ,TSC_G2_IO2, ,LCD_SEG9 ,COMP2_OUT ,SAI1_SD_B ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR ,TIM4_CH1 ,TIM8_BKIN2 ,I2C1_SCL , ,DFSDM_DATIN5,USART1_TX , ,TSC_G2_IO3, , ,TIM8_BKIN2_COMP2 ,SAI1_FS_B ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 ,TIM4_CH2 ,TIM8_BKIN ,I2C1_SDA , ,DFSDM_CKIN5 ,USART1_RX ,UART4_CTS ,TSC_G2_IO4, ,LCD_SEG21 ,FMC_NL ,TIM8_BKIN_COMP1,TIM17_CH1N ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 , ,I2C1_SCL , ,DFSDM_DATIN6, , ,CAN1_RX , ,LCD_SEG16 ,SDMMC1_D4 ,SAI1_MCLK_A ,TIM16_CH1 ,EVENTOUT, +PortB,PB9 , ,IR_OUT ,TIM4_CH4 , ,I2C1_SDA ,SPI2_NSS ,DFSDM_CKIN6 , , ,CAN1_TX , ,LCD_COM3 ,SDMMC1_D5 ,SAI1_FS_A ,TIM17_CH1 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C2_SCL ,SPI2_SCK ,DFSDM_DATIN7,USART3_TX ,LPUART1_RX , ,QUADSPI_CLK ,LCD_SEG10 ,COMP1_OUT ,SAI1_SCK_A , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C2_SDA , ,DFSDM_CKIN7 ,USART3_RX ,LPUART1_TX , ,QUADSPI_NCS ,LCD_SEG11 ,COMP2_OUT , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,TIM1_BKIN_COMP2 ,I2C2_SMBA ,SPI2_NSS ,DFSDM_DATIN1,USART3_CK ,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1, ,LCD_SEG12 ,SWPMI1_IO ,SAI2_FS_A ,TIM15_BKIN ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2C2_SCL ,SPI2_SCK ,DFSDM_CKIN1 ,USART3_CTS ,LPUART1_CTS ,TSC_G1_IO2, ,LCD_SEG13 ,SWPMI1_TX ,SAI2_SCK_A ,TIM15_CH1N ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N ,I2C2_SDA ,SPI2_MISO,DFSDM_DATIN2,USART3_RTS/USART3_DE, ,TSC_G1_IO3, ,LCD_SEG14 ,SWPMI1_RX ,SAI2_MCLK_A ,TIM15_CH1 ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI,DFSDM_CKIN2 , , ,TSC_G1_IO4, ,LCD_SEG15 ,SWPMI1_SUSPEND ,SAI2_SD_A ,TIM15_CH2 ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 , , ,I2C3_SCL , ,DFSDM_DATIN4, ,LPUART1_RX , , ,LCD_SEG18 , , ,LPTIM2_IN1 ,EVENTOUT,ADC123_IN1 +PortC,PC1 , ,LPTIM1_OUT , , ,I2C3_SDA , ,DFSDM_CKIN4 , ,LPUART1_TX , , ,LCD_SEG19 , , , ,EVENTOUT,ADC123_IN2 +PortC,PC2 , ,LPTIM1_IN2 , , , ,SPI2_MISO,DFSDM_CKOUT , , , , ,LCD_SEG20 , , , ,EVENTOUT,ADC123_IN3 +PortC,PC3 , ,LPTIM1_ETR , , , ,SPI2_MOSI, , , , , ,LCD_VLCD , ,SAI1_SD_A ,LPTIM2_ETR ,EVENTOUT,ADC123_IN4 +PortC,PC4 , , , , , , , ,USART3_TX , , , ,LCD_SEG22 , , , ,EVENTOUT,ADC12_IN13 +PortC,PC5 , , , , , , , ,USART3_RX , , , ,LCD_SEG23 , , , ,EVENTOUT,ADC12_IN14 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 , , ,DFSDM_CKIN3 , , ,TSC_G4_IO1, ,LCD_SEG24 ,SDMMC1_D6 ,SAI2_MCLK_A , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 ,TIM8_CH2 , , ,DFSDM_DATIN3, , ,TSC_G4_IO2, ,LCD_SEG25 ,SDMMC1_D7 ,SAI2_MCLK_B , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 ,TIM8_CH3 , , , , , ,TSC_G4_IO3, ,LCD_SEG26 ,SDMMC1_D0 , , ,EVENTOUT, +PortC,PC9 , ,TIM8_BKIN2 ,TIM3_CH4 ,TIM8_CH4 , , , , , ,TSC_G4_IO4,OTG_FS_NOE ,LCD_SEG27 ,SDMMC1_D1 ,SAI2_EXTCLK ,TIM8_BKIN2_COMP1 ,EVENTOUT, +PortC,PC10, , , , , , ,SPI3_SCK ,USART3_TX ,UART4_TX ,TSC_G3_IO2, ,LCD_COM4/LCD_SEG28/LCD_SEG40,SDMMC1_D2 ,SAI2_SCK_B , ,EVENTOUT, +PortC,PC11, , , , , , ,SPI3_MISO ,USART3_RX ,UART4_RX ,TSC_G3_IO3, ,LCD_COM5/LCD_SEG29/LCD_SEG41,SDMMC1_D3 ,SAI2_MCLK_B , ,EVENTOUT, +PortC,PC12, , , , , , ,SPI3_MOSI ,USART3_CK ,UART5_TX ,TSC_G3_IO4, ,LCD_COM6/LCD_SEG30/LCD_SEG42,SDMMC1_CK ,SAI2_SD_B , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , ,SPI2_NSS ,DFSDM_DATIN7, , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , ,SPI2_SCK ,DFSDM_CKIN7 , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 , , ,TIM3_ETR , , , , ,USART3_RTS/USART3_DE,UART5_RX ,TSC_SYNC , ,LCD_COM7/LCD_SEG31/LCD_SEG43,SDMMC1_CMD , , ,EVENTOUT, +PortD,PD3 , , , , , ,SPI2_MISO,DFSDM_DATIN0,USART2_CTS , , , , ,FMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , ,SPI2_MOSI,DFSDM_CKIN0 ,USART2_RTS/USART2_DE, , , , ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , , , ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , , , ,DFSDM_DATIN1,USART2_RX , , , , ,FMC_NWAIT ,SAI1_SD_A , ,EVENTOUT, +PortD,PD7 , , , , , , ,DFSDM_CKIN1 ,USART2_CK , , , , ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , , ,LCD_SEG28 ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , , ,LCD_SEG29 ,FMC_D14 ,SAI2_MCLK_A , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , ,TSC_G6_IO1, ,LCD_SEG30 ,FMC_D15 ,SAI2_SCK_A , ,EVENTOUT, +PortD,PD11, , , , , , , ,USART3_CTS , ,TSC_G6_IO2, ,LCD_SEG31 ,FMC_A16 ,SAI2_SD_A ,LPTIM2_ETR ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , , , , ,USART3_RTS/USART3_DE, ,TSC_G6_IO3, ,LCD_SEG32 ,FMC_A17 ,SAI2_FS_A ,LPTIM2_IN1 ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , , , , , , ,TSC_G6_IO4, ,LCD_SEG33 ,FMC_A18 , ,LPTIM2_OUT ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , , , , ,LCD_SEG34 ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , , , , ,LCD_SEG35 ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR , , , , , , , , ,LCD_SEG36 ,FMC_NBL0 , ,TIM16_CH1 ,EVENTOUT, +PortE,PE1 , , , , , , , , , , , ,LCD_SEG37 ,FMC_NBL1 , ,TIM17_CH1 ,EVENTOUT, +PortE,PE2 ,TRACECLK , ,TIM3_ETR , , , , , , ,TSC_G7_IO1, ,LCD_SEG38 ,FMC_A23 ,SAI1_MCLK_A , ,EVENTOUT, +PortE,PE3 ,TRACED0 , ,TIM3_CH1 , , , , , , ,TSC_G7_IO2, ,LCD_SEG39 ,FMC_A19 ,SAI1_SD_B , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,TIM3_CH2 , , , ,DFSDM_DATIN3, , ,TSC_G7_IO3, , ,FMC_A20 ,SAI1_FS_A , ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,TIM3_CH3 , , , ,DFSDM_CKIN3 , , ,TSC_G7_IO4, , ,FMC_A21 ,SAI1_SCK_A , ,EVENTOUT, +PortE,PE6 ,TRACED3 , ,TIM3_CH4 , , , , , , , , , ,FMC_A22 ,SAI1_SD_A , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM_DATIN2, , , , , ,FMC_D4 ,SAI1_SD_B , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM_CKIN2 , , , , , ,FMC_D5 ,SAI1_SCK_B , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM_CKOUT , , , , , ,FMC_D6 ,SAI1_FS_B , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , ,DFSDM_DATIN4, , ,TSC_G5_IO1,QUADSPI_CLK , ,FMC_D7 ,SAI1_MCLK_B , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , , ,DFSDM_CKIN4 , , ,TSC_G5_IO2,QUADSPI_NCS , ,FMC_D8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI1_NSS ,DFSDM_DATIN5, , ,TSC_G5_IO3,QUADSPI_BK1_IO0, ,FMC_D9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI1_SCK ,DFSDM_CKIN5 , , ,TSC_G5_IO4,QUADSPI_BK1_IO1, ,FMC_D10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 ,TIM1_BKIN2 ,TIM1_BKIN2_COMP2, ,SPI1_MISO, , , , ,QUADSPI_BK1_IO2, ,FMC_D11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , ,TIM1_BKIN_COMP1 , ,SPI1_MOSI, , , , ,QUADSPI_BK1_IO3, ,FMC_D12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN6 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN7 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN8 +PortF,PF6 , ,TIM5_ETR ,TIM5_CH1 , , , , , , , , , , ,SAI1_SD_B , ,EVENTOUT,ADC3_IN9 +PortF,PF7 , , ,TIM5_CH2 , , , , , , , , , , ,SAI1_MCLK_B , ,EVENTOUT,ADC3_IN10 +PortF,PF8 , , ,TIM5_CH3 , , , , , , , , , , ,SAI1_SCK_B , ,EVENTOUT,ADC3_IN11 +PortF,PF9 , , ,TIM5_CH4 , , , , , , , , , , ,SAI1_FS_B ,TIM15_CH1 ,EVENTOUT,ADC3_IN12 +PortF,PF10, , , , , , , , , , , , , , ,TIM15_CH2 ,EVENTOUT,ADC3_IN13 +PortF,PF11, , , , , , , , , , , , , , , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , , , ,DFSDM_DATIN6, , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , , , ,DFSDM_CKIN6 , , ,TSC_G8_IO1, , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , , , , , , ,TSC_G8_IO2, , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,TSC_G8_IO3, , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,TSC_G8_IO4, , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , ,SPI1_SCK , , , , , , ,FMC_A12 ,SAI2_SCK_B , ,EVENTOUT, +PortG,PG3 , , , , , ,SPI1_MISO, , , , , , ,FMC_A13 ,SAI2_FS_B , ,EVENTOUT, +PortG,PG4 , , , , , ,SPI1_MOSI, , , , , , ,FMC_A14 ,SAI2_MCLK_B , ,EVENTOUT, +PortG,PG5 , , , , , ,SPI1_NSS , , ,LPUART1_CTS , , , ,FMC_A15 ,SAI2_SD_B , ,EVENTOUT, +PortG,PG6 , , , , ,I2C3_SMBA , , , ,LPUART1_RTS/LPUART1_DE, , , , , , ,EVENTOUT, +PortG,PG7 , , , , ,I2C3_SCL , , , ,LPUART1_TX , , , ,FMC_INT3 , , ,EVENTOUT, +PortG,PG8 , , , , ,I2C3_SDA , , , ,LPUART1_RX , , , , , , ,EVENTOUT, +PortG,PG9 , , , , , , ,SPI3_SCK ,USART1_TX , , , , ,FMC_NCE3/FMC_NE2 ,SAI2_SCK_A ,TIM15_CH1N ,EVENTOUT, +PortG,PG10, ,LPTIM1_IN1 , , , , ,SPI3_MISO ,USART1_RX , , , , ,FMC_NE3 ,SAI2_FS_A ,TIM15_CH1 ,EVENTOUT, +PortG,PG11, ,LPTIM1_IN2 , , , , ,SPI3_MOSI ,USART1_CTS , , , , , ,SAI2_MCLK_A ,TIM15_CH2 ,EVENTOUT, +PortG,PG12, ,LPTIM1_ETR , , , , ,SPI3_NSS ,USART1_RTS/USART1_DE, , , , ,FMC_NE4 ,SAI2_SD_A , ,EVENTOUT, +PortG,PG13, , , , ,I2C1_SDA , , ,USART1_CK , , , , ,FMC_A24 , , ,EVENTOUT, +PortG,PG14, , , , ,I2C1_SCL , , , , , , , ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, ,LPTIM1_OUT , , ,I2C1_SMBA , , , , , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32l496_af.csv b/ports/stm32/boards/stm32l496_af.csv index 311770a055a84..a0d77f1e10cd8 100644 --- a/ports/stm32/boards/stm32l496_af.csv +++ b/ports/stm32/boards/stm32l496_af.csv @@ -1,142 +1,142 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15,,, -,,SYS_AF,TIM1/TIM2/TIM5/TIM8/LPTIM1,TIM1/TIM2/TIM3/TIM4/TIM5,TIM8,I2C1/I2C2/I2C3,SPI1/SPI2,SPI3/DFSDM,USART1/USART2/USART3,UART4/UART5/LPUART1,CAN1/TSC,OTG_FS/QUADSPI,LCD,SDMMC1/COMP1/COMP2/FMC/SWPMI1,SAI1/SAI2,TIM2/TIM15/TIM16/TIM17/LPTIM2,EVENTOUT,ADC,COMP,DAC -PortA,PA0,,TIM2_CH1,TIM5_CH1,TIM8_ETR,,,,USART2_CTS,UART4_TX,,,,,SAI1_EXTCLK,TIM2_ETR,EVENTOUT,ADC12_IN5,, -PortA,PA1,,TIM2_CH2,TIM5_CH2,,I2C1_SMBA,SPI1_SCK,,USART2_RTS/USART2_DE,UART4_RX,,,LCD_SEG0,,,TIM15_CH1N,EVENTOUT,ADC12_IN6,, -PortA,PA2,,TIM2_CH3,TIM5_CH3,,,,,USART2_TX,LPUART1_TX,,QUADSPI_BK1_NCS,LCD_SEG1,,SAI2_EXTCLK,TIM15_CH1,EVENTOUT,ADC12_IN7,, -PortA,PA3,,TIM2_CH4,TIM5_CH4,,,,,USART2_RX,LPUART1_RX,,QUADSPI_CLK,LCD_SEG2,,SAI1_MCLK_A,TIM15_CH2,EVENTOUT,ADC12_IN8,, -PortA,PA4,,,,,,SPI1_NSS,SPI3_NSS,USART2_CK,,,DCMI_HSYNC,,,SAI1_FS_B,LPTIM2_OUT,EVENTOUT,ADC12_IN9,,DAC1_OUT1 -PortA,PA5,,TIM2_CH1,TIM2_ETR,TIM8_CH1N,,SPI1_SCK,,,,,,,,,LPTIM2_ETR,EVENTOUT,ADC12_IN10,,DAC1_OUT2 -PortA,PA6,,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,DCMI_PIXCLK,SPI1_MISO,,USART3_CTS,LPUART1_CTS,,QUADSPI_BK1_IO3,LCD_SEG3,TIM1_BKIN_COMP2,TIM8_BKIN_COMP2,TIM16_CH1,EVENTOUT,ADC12_IN11,, -PortA,PA7,,TIM1_CH1N,TIM3_CH2,TIM8_CH1N,I2C3_SCL,SPI1_MOSI,,,,,QUADSPI_BK1_IO2,LCD_SEG4,,,TIM17_CH1,EVENTOUT,ADC12_IN12,, -PortA,PA8,MCO,TIM1_CH1,,,,,,USART1_CK,,,OTG_FS_SOF,LCD_COM0,SWPMI1_IO,SAI1_SCK_A,LPTIM2_OUT,EVENTOUT,,, -PortA,PA9,,TIM1_CH2,,SPI2_SCK,I2C1_SCL,DCMI_D0,,USART1_TX,,,,LCD_COM1,,SAI1_FS_A,TIM15_BKIN,EVENTOUT,,, -PortA,PA10,,TIM1_CH3,,,I2C1_SDA,DCMI_D1,,USART1_RX,,,OTG_FS_ID,LCD_COM2,,SAI1_SD_A,TIM17_BKIN,EVENTOUT,,, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,,,SPI1_MISO,,USART1_CTS,,CAN1_RX,OTG_FS_DM,,TIM1_BKIN2_COMP1,,,EVENTOUT,,, -PortA,PA12,,TIM1_ETR,,,,SPI1_MOSI,,USART1_RTS/USART1_DE,,CAN1_TX,OTG_FS_DP,,,,,EVENTOUT,,, -PortA,PA13,JTMS/SWDIO,IR_OUT,,,,,,,,,OTG_FS_NOE,,SWPMI1_TX,SAI1_SD_B,,EVENTOUT,,, -PortA,PA14,JTCK/SWCLK,LPTIM1_OUT,,,I2C1_SMBA,I2C4_SMBA,,,,,OTG_FS_SOF,,SWPMI1_RX,SAI1_FS_B,,EVENTOUT,,, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,USART2_RX,,SPI1_NSS,SPI3_NSS,USART3_RTS/USART3_DE,UART4_RTS/UART4_DE,TSC_G3_IO1,,LCD_SEG17,SWPMI1_SUSPEND,SAI2_FS_B,,EVENTOUT,,, -PortB,PB0,,TIM1_CH2N,TIM3_CH3,TIM8_CH2N,,SPI1_NSS,,USART3_CK,,,QUADSPI_BK1_IO1,LCD_SEG5,COMP1_OUT,SAI1_EXTCLK,,EVENTOUT,ADC12_IN15,, -PortB,PB1,,TIM1_CH3N,TIM3_CH4,TIM8_CH3N,,,DFSDM1_DATIN0,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE,,QUADSPI_BK1_IO0,LCD_SEG6,,,LPTIM2_IN1,EVENTOUT,ADC12_IN16,COMP1_INM, -PortB,PB2,RTC_OUT,LPTIM1_OUT,,,I2C3_SMBA,,DFSDM1_CKIN0,,,,,LCD_VLCD,,,,EVENTOUT,,COMP1_INP, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,SPI3_SCK,USART1_RTS/USART1_DE,,,OTG_FS_CRS_SYNC,LCD_SEG7,,SAI1_SCK_B,,EVENTOUT,,COMP2_INM, -PortB,PB4,NJTRST,,TIM3_CH1,,I2C3_SDA,SPI1_MISO,SPI3_MISO,USART1_CTS,UART5_RTS/UART5_DE,TSC_G2_IO1,DCMI_D12,LCD_SEG8,,SAI1_MCLK_B,TIM17_BKIN,EVENTOUT,,COMP2_INP, -PortB,PB5,,LPTIM1_IN1,TIM3_CH2,CAN2_RX,I2C1_SMBA,SPI1_MOSI,SPI3_MOSI,USART1_CK,UART5_CTS,TSC_G2_IO2,DCMI_D10,LCD_SEG9,COMP2_OUT,SAI1_SD_B,TIM16_BKIN,EVENTOUT,,, -PortB,PB6,,LPTIM1_ETR,TIM4_CH1,TIM8_BKIN2,I2C1_SCL,I2C4_SCL,DFSDM1_DATIN5,USART1_TX,CAN2_TX,TSC_G2_IO3,DCMI_D5,,TIM8_BKIN2_COMP2,SAI1_FS_B,TIM16_CH1N,EVENTOUT,,COMP2_INP, -PortB,PB7,,LPTIM1_IN2,TIM4_CH2,TIM8_BKIN,I2C1_SDA,I2C4_SDA,DFSDM1_CKIN5,USART1_RX,UART4_CTS,TSC_G2_IO4,DCMI_VSYNC,LCD_SEG21,FMC_NL,TIM8_BKIN_COMP1,TIM17_CH1N,EVENTOUT,,COMP2_INM, -PortB,PB8,,,TIM4_CH3,,I2C1_SCL,,DFSDM1_DATIN6,,,CAN1_RX,DCMI_D6,LCD_SEG16,SDMMC1_D4,SAI1_MCLK_A,TIM16_CH1,EVENTOUT,,, -PortB,PB9,,IR_OUT,TIM4_CH4,,I2C1_SDA,SPI2_NSS,DFSDM1_CKIN6,,,CAN1_TX,DCMI_D7,LCD_COM3,SDMMC1_D5,SAI1_FS_A,TIM17_CH1,EVENTOUT,,, -PortB,PB10,,TIM2_CH3,,I2C4_SCL,I2C2_SCL,SPI2_SCK,DFSDM1_DATIN7,USART3_TX,LPUART1_RX,TSC_SYNC,QUADSPI_CLK,LCD_SEG10,COMP1_OUT,SAI1_SCK_A,,EVENTOUT,,, -PortB,PB11,,TIM2_CH4,,I2C4_SDA,I2C2_SDA,,DFSDM1_CKIN7,USART3_RX,LPUART1_TX,,QUADSPI_BK1_NCS,LCD_SEG11,COMP2_OUT,,,EVENTOUT,,, -PortB,PB12,,TIM1_BKIN,,TIM1_BKIN_COMP2,I2C2_SMBA,SPI2_NSS,DFSDM1_DATIN1,USART3_CK,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1,CAN2_RX,LCD_SEG12,SWPMI1_IO,SAI2_FS_A,TIM15_BKIN,EVENTOUT,,, -PortB,PB13,,TIM1_CH1N,,,I2C2_SCL,SPI2_SCK,DFSDM1_CKIN1,USART3_CTS,LPUART1_CTS,TSC_G1_IO2,CAN2_TX,LCD_SEG13,SWPMI1_TX,SAI2_SCK_A,TIM15_CH1N,EVENTOUT,,, -PortB,PB14,,TIM1_CH2N,,TIM8_CH2N,I2C2_SDA,SPI2_MISO,DFSDM1_DATIN2,USART3_RTS/USART3_DE,,TSC_G1_IO3,,LCD_SEG14,SWPMI1_RX,SAI2_MCLK_A,TIM15_CH1,EVENTOUT,,, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,TIM8_CH3N,,SPI2_MOSI,DFSDM1_CKIN2,,,TSC_G1_IO4,,LCD_SEG15,SWPMI1_SUSPEND,SAI2_SD_A,TIM15_CH2,EVENTOUT,,, -PortC,PC0,,LPTIM1_IN1,I2C4_SCL,,I2C3_SCL,,DFSDM1_DATIN4,,LPUART1_RX,,,LCD_SEG18,,,LPTIM2_IN1,EVENTOUT,ADC123_IN1,, -PortC,PC1,TRACED0,LPTIM1_OUT,I2C4_SDA,SPI2_MOSI,I2C3_SDA,,DFSDM1_CKIN4,,LPUART1_TX,,QUADSPI_BK2_IO0,LCD_SEG19,,SAI1_SD_A,,EVENTOUT,ADC123_IN2,, -PortC,PC2,,LPTIM1_IN2,,,,SPI2_MISO,DFSDM1_CKOUT,,,,QUADSPI_BK2_IO1,LCD_SEG20,,,,EVENTOUT,ADC123_IN3,, -PortC,PC3,,LPTIM1_ETR,,,,SPI2_MOSI,,,,,QUADSPI_BK2_IO2,LCD_VLCD,,SAI1_SD_A,LPTIM2_ETR,EVENTOUT,ADC123_IN4,, -PortC,PC4,,,,,,,,USART3_TX,,,QUADSPI_BK2_IO3,LCD_SEG22,,,,EVENTOUT,ADC12_IN13,COMP1_INM, -PortC,PC5,,,,,,,,USART3_RX,,,,LCD_SEG23,,,,EVENTOUT,ADC12_IN14,COMP1_INP, -PortC,PC6,,,TIM3_CH1,TIM8_CH1,,,DFSDM1_CKIN3,,,TSC_G4_IO1,DCMI_D0,LCD_SEG24,SDMMC1_D6,SAI2_MCLK_A,,EVENTOUT,,, -PortC,PC7,,,TIM3_CH2,TIM8_CH2,,,DFSDM1_DATIN3,,,TSC_G4_IO2,DCMI_D1,LCD_SEG25,SDMMC1_D7,SAI2_MCLK_B,,EVENTOUT,,, -PortC,PC8,,,TIM3_CH3,TIM8_CH3,,,,,,TSC_G4_IO3,DCMI_D2,LCD_SEG26,SDMMC1_D0,,,EVENTOUT,,, -PortC,PC9,,TIM8_BKIN2,TIM3_CH4,TIM8_CH4,DCMI_D3,,I2C3_SDA,,,TSC_G4_IO4,OTG_FS_NOE,LCD_SEG27,SDMMC1_D1,SAI2_EXTCLK,TIM8_BKIN2_COMP1,EVENTOUT,,, -PortC,PC10,TRACED1,,,,,,SPI3_SCK,USART3_TX,UART4_TX,TSC_G3_IO2,DCMI_D8,LCD_COM4/LCD_SEG28/LCD_SEG40,SDMMC1_D2,SAI2_SCK_B,,EVENTOUT,,, -PortC,PC11,,,,,,QUADSPI_BK2_NCS,SPI3_MISO,USART3_RX,UART4_RX,TSC_G3_IO3,DCMI_D4,LCD_COM5/LCD_SEG29/LCD_SEG41,SDMMC1_D3,SAI2_MCLK_B,,EVENTOUT,,, -PortC,PC12,TRACED3,,,,,,SPI3_MOSI,USART3_CK,UART5_TX,TSC_G3_IO4,DCMI_D9,LCD_COM6/LCD_SEG30/LCD_SEG42,SDMMC1_CK,SAI2_SD_B,,EVENTOUT,,, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT,,, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT,,, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT,,, -PortD,PD0,,,,,,SPI2_NSS,DFSDM1_DATIN7,,,CAN1_RX,,,FMC_D2,,,EVENTOUT,,, -PortD,PD1,,,,,,SPI2_SCK,DFSDM1_CKIN7,,,CAN1_TX,,,FMC_D3,,,EVENTOUT,,, -PortD,PD2,TRACED2,,TIM3_ETR,,,,,USART3_RTS/USART3_DE,UART5_RX,TSC_SYNC,DCMI_D11,LCD_COM7/LCD_SEG31/LCD_SEG43,SDMMC1_CMD,,,EVENTOUT,,, -PortD,PD3,,,,SPI2_SCK,DCMI_D5,SPI2_MISO,DFSDM1_DATIN0,USART2_CTS,,,QUADSPI_BK2_NCS,,FMC_CLK,,,EVENTOUT,,, -PortD,PD4,,,,,,SPI2_MOSI,DFSDM1_CKIN0,USART2_RTS/USART2_DE,,,QUADSPI_BK2_IO0,,FMC_NOE,,,EVENTOUT,,, -PortD,PD5,,,,,,,,USART2_TX,,,QUADSPI_BK2_IO1,,FMC_NWE,,,EVENTOUT,,, -PortD,PD6,,,,,DCMI_D10,QUADSPI_BK2_IO1,DFSDM1_DATIN1,USART2_RX,,,QUADSPI_BK2_IO2,,FMC_NWAIT,SAI1_SD_A,,EVENTOUT,,, -PortD,PD7,,,,,,,DFSDM1_CKIN1,USART2_CK,,,QUADSPI_BK2_IO3,,FMC_NE1,,,EVENTOUT,,, -PortD,PD8,,,,,,,,USART3_TX,,,DCMI_HSYNC,LCD_SEG28,FMC_D13,,,EVENTOUT,,, -PortD,PD9,,,,,,,,USART3_RX,,,DCMI_PIXCLK,LCD_SEG29,FMC_D14,SAI2_MCLK_A,,EVENTOUT,,, -PortD,PD10,,,,,,,,USART3_CK,,TSC_G6_IO1,,LCD_SEG30,FMC_D15,SAI2_SCK_A,,EVENTOUT,,, -PortD,PD11,,,,,I2C4_SMBA,,,USART3_CTS,,TSC_G6_IO2,,LCD_SEG31,FMC_A16,SAI2_SD_A,LPTIM2_ETR,EVENTOUT,,, -PortD,PD12,,,TIM4_CH1,,I2C4_SCL,,,USART3_RTS/USART3_DE,,TSC_G6_IO3,,LCD_SEG32,FMC_A17,SAI2_FS_A,LPTIM2_IN1,EVENTOUT,,, -PortD,PD13,,,TIM4_CH2,,I2C4_SDA,,,,,TSC_G6_IO4,,LCD_SEG33,FMC_A18,,LPTIM2_OUT,EVENTOUT,,, -PortD,PD14,,,TIM4_CH3,,,,,,,,,LCD_SEG34,FMC_D0,,,EVENTOUT,,, -PortD,PD15,,,TIM4_CH4,,,,,,,,,LCD_SEG35,FMC_D1,,,EVENTOUT,,, -PortE,PE0,,,TIM4_ETR,,,,,,,,DCMI_D2,LCD_SEG36,FMC_NBL0,,TIM16_CH1,EVENTOUT,,, -PortE,PE1,,,,,,,,,,,DCMI_D3,LCD_SEG37,FMC_NBL1,,TIM17_CH1,EVENTOUT,,, -PortE,PE2,TRACECLK,,TIM3_ETR,,,,,,,TSC_G7_IO1,,LCD_SEG38,FMC_A23,SAI1_MCLK_A,,EVENTOUT,,, -PortE,PE3,TRACED0,,TIM3_CH1,,,,,,,TSC_G7_IO2,,LCD_SEG39,FMC_A19,SAI1_SD_B,,EVENTOUT,,, -PortE,PE4,TRACED1,,TIM3_CH2,,,,DFSDM1_DATIN3,,,TSC_G7_IO3,DCMI_D4,,FMC_A20,SAI1_FS_A,,EVENTOUT,,, -PortE,PE5,TRACED2,,TIM3_CH3,,,,DFSDM1_CKIN3,,,TSC_G7_IO4,DCMI_D6,,FMC_A21,SAI1_SCK_A,,EVENTOUT,,, -PortE,PE6,TRACED3,,TIM3_CH4,,,,,,,,DCMI_D7,,FMC_A22,SAI1_SD_A,,EVENTOUT,,, -PortE,PE7,,TIM1_ETR,,,,,DFSDM1_DATIN2,,,,,,FMC_D4,SAI1_SD_B,,EVENTOUT,,, -PortE,PE8,,TIM1_CH1N,,,,,DFSDM1_CKIN2,,,,,,FMC_D5,SAI1_SCK_B,,EVENTOUT,,, -PortE,PE9,,TIM1_CH1,,,,,DFSDM1_CKOUT,,,,,,FMC_D6,SAI1_FS_B,,EVENTOUT,,, -PortE,PE10,,TIM1_CH2N,,,,,DFSDM1_DATIN4,,,TSC_G5_IO1,QUADSPI_CLK,,FMC_D7,SAI1_MCLK_B,,EVENTOUT,,, -PortE,PE11,,TIM1_CH2,,,,,DFSDM1_CKIN4,,,TSC_G5_IO2,QUADSPI_BK1_NCS,,FMC_D8,,,EVENTOUT,,, -PortE,PE12,,TIM1_CH3N,,,,SPI1_NSS,DFSDM1_DATIN5,,,TSC_G5_IO3,QUADSPI_BK1_IO0,,FMC_D9,,,EVENTOUT,,, -PortE,PE13,,TIM1_CH3,,,,SPI1_SCK,DFSDM1_CKIN5,,,TSC_G5_IO4,QUADSPI_BK1_IO1,,FMC_D10,,,EVENTOUT,,, -PortE,PE14,,TIM1_CH4,TIM1_BKIN2,TIM1_BKIN2_COMP2,,SPI1_MISO,,,,,QUADSPI_BK1_IO2,,FMC_D11,,,EVENTOUT,,, -PortE,PE15,,TIM1_BKIN,,TIM1_BKIN_COMP1,,SPI1_MOSI,,,,,QUADSPI_BK1_IO3,,FMC_D12,,,EVENTOUT,,, -PortF,PF0,,,,,I2C2_SDA,,,,,,,,FMC_A0,,,EVENTOUT,,, -PortF,PF1,,,,,I2C2_SCL,,,,,,,,FMC_A1,,,EVENTOUT,,, -PortF,PF2,,,,,I2C2_SMBA,,,,,,,,FMC_A2,,,EVENTOUT,,, -PortF,PF3,,,,,,,,,,,,,FMC_A3,,,EVENTOUT,ADC3_IN6,, -PortF,PF4,,,,,,,,,,,,,FMC_A4,,,EVENTOUT,ADC3_IN7,, -PortF,PF5,,,,,,,,,,,,,FMC_A5,,,EVENTOUT,ADC3_IN8,, -PortF,PF6,,TIM5_ETR,TIM5_CH1,,,,,,,,QUADSPI_BK1_IO3,,,SAI1_SD_B,,EVENTOUT,ADC3_IN9,, -PortF,PF7,,,TIM5_CH2,,,,,,,,QUADSPI_BK1_IO2,,,SAI1_MCLK_B,,EVENTOUT,ADC3_IN10,, -PortF,PF8,,,TIM5_CH3,,,,,,,,QUADSPI_BK1_IO0,,,SAI1_SCK_B,,EVENTOUT,ADC3_IN11,, -PortF,PF9,,,TIM5_CH4,,,,,,,,QUADSPI_BK1_IO1,,,SAI1_FS_B,TIM15_CH1,EVENTOUT,ADC3_IN12,, -PortF,PF10,,,,QUADSPI_CLK,,,,,,,DCMI_D11,,,,TIM15_CH2,EVENTOUT,ADC3_IN13,, -PortF,PF11,,,,,,,,,,,DCMI_D12,,,,,EVENTOUT,,, -PortF,PF12,,,,,,,,,,,,,FMC_A6,,,EVENTOUT,,, -PortF,PF13,,,,,I2C4_SMBA,,DFSDM1_DATIN6,,,,,,FMC_A7,,,EVENTOUT,,, -PortF,PF14,,,,,I2C4_SCL,,DFSDM1_CKIN6,,,TSC_G8_IO1,,,FMC_A8,,,EVENTOUT,,, -PortF,PF15,,,,,I2C4_SDA,,,,,TSC_G8_IO2,,,FMC_A9,,,EVENTOUT,,, -PortG,PG0,,,,,,,,,,TSC_G8_IO3,,,FMC_A10,,,EVENTOUT,,, -PortG,PG1,,,,,,,,,,TSC_G8_IO4,,,FMC_A11,,,EVENTOUT,,, -PortG,PG2,,,,,,SPI1_SCK,,,,,,,FMC_A12,SAI2_SCK_B,,EVENTOUT,,, -PortG,PG3,,,,,,SPI1_MISO,,,,,,,FMC_A13,SAI2_FS_B,,EVENTOUT,,, -PortG,PG4,,,,,,SPI1_MOSI,,,,,,,FMC_A14,SAI2_MCLK_B,,EVENTOUT,,, -PortG,PG5,,,,,,SPI1_NSS,,,LPUART1_CTS,,,,FMC_A15,SAI2_SD_B,,EVENTOUT,,, -PortG,PG6,,,,,I2C3_SMBA,,,,LPUART1_RTS/LPUART1_DE,,,,,,,EVENTOUT,,, -PortG,PG7,,,,,I2C3_SCL,,,,LPUART1_TX,,,,FMC_INT,SAI1_MCLK_A,,EVENTOUT,,, -PortG,PG8,,,,,I2C3_SDA,,,,LPUART1_RX,,,,,,,EVENTOUT,,, -PortG,PG9,,,,,,,SPI3_SCK,USART1_TX,,,,,FMC_NCE/FMC_NE2,SAI2_SCK_A,TIM15_CH1N,EVENTOUT,,, -PortG,PG10,,LPTIM1_IN1,,,,,SPI3_MISO,USART1_RX,,,,,FMC_NE3,SAI2_FS_A,TIM15_CH1,EVENTOUT,,, -PortG,PG11,,LPTIM1_IN2,,,,,SPI3_MOSI,USART1_CTS,,,,,,SAI2_MCLK_A,TIM15_CH2,EVENTOUT,,, -PortG,PG12,,LPTIM1_ETR,,,,,SPI3_NSS,USART1_RTS/USART1_DE,,,,,FMC_NE4,SAI2_SD_A,,EVENTOUT,,, -PortG,PG13,,,,,I2C1_SDA,,,USART1_CK,,,,,FMC_A24,,,EVENTOUT,,, -PortG,PG14,,,,,I2C1_SCL,,,,,,,,FMC_A25,,,EVENTOUT,,, -PortG,PG15,,LPTIM1_OUT,,,I2C1_SMBA,,,,,,DCMI_D13,,,,,EVENTOUT,,, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH2,,,,QUADSPI_BK2_IO0,,,,,,,,,,,,EVENTOUT,,, -PortH,PH3,,,,,,,,,,,,,,,,EVENTOUT,,, -PortH,PH4,,,,,I2C2_SCL,,,,,,,,,,,EVENTOUT,,, -PortH,PH5,,,,,I2C2_SDA,,,,,,DCMI_PIXCLK,,,,,EVENTOUT,,, -PortH,PH6,,,,,I2C2_SMBA,,,,,,DCMI_D8,,,,,EVENTOUT,,, -PortH,PH7,,,,,I2C3_SCL,,,,,,DCMI_D9,,,,,EVENTOUT,,, -PortH,PH8,,,,,I2C3_SDA,,,,,,DCMI_HSYNC,,,,,EVENTOUT,,, -PortH,PH9,,,,,I2C3_SMBA,,,,,,DCMI_D0,,,,,EVENTOUT,,, -PortH,PH10,,,TIM5_CH1,,,,,,,,DCMI_D1,,,,,EVENTOUT,,, -PortH,PH11,,,TIM5_CH2,,,,,,,,DCMI_D2,,,,,EVENTOUT,,, -PortH,PH12,,,TIM5_CH3,,,,,,,,DCMI_D3,,,,,EVENTOUT,,, -PortH,PH13,,,,TIM8_CH1N,,,,,,CAN1_TX,,,,,,EVENTOUT,,, -PortH,PH14,,,,TIM8_CH2N,,,,,,,DCMI_D4,,,,,EVENTOUT,,, -PortH,PH15,,,,TIM8_CH3N,,,,,,,DCMI_D11,,,,,EVENTOUT,,, -PortI,PI0,,,TIM5_CH4,,,SPI2_NSS,,,,,DCMI_D13,,,,,EVENTOUT,,, -PortI,PI1,,,,,,SPI2_SCK,,,,,DCMI_D8,,,,,EVENTOUT,,, -PortI,PI2,,,,TIM8_CH4,,SPI2_MISO,,,,,DCMI_D9,,,,,EVENTOUT,,, -PortI,PI3,,,,TIM8_ETR,,SPI2_MOSI,,,,,DCMI_D10,,,,,EVENTOUT,,, -PortI,PI4,,,,TIM8_BKIN,,,,,,,DCMI_D5,,,,,EVENTOUT,,, -PortI,PI5,,,,TIM8_CH1,,,,,,,DCMI_VSYNC,,,,,EVENTOUT,,, -PortI,PI6,,,,TIM8_CH2,,,,,,,DCMI_D6,,,,,EVENTOUT,,, -PortI,PI7,,,,TIM8_CH3,,,,,,,DCMI_D7,,,,,EVENTOUT,,, -PortI,PI8,,,,,,,,,,,DCMI_D12,,,,,EVENTOUT,,, -PortI,PI9,,,,,,,,,,CAN1_RX,,,,,,EVENTOUT,,, -PortI,PI10,,,,,,,,,,,,,,,,EVENTOUT,,, -PortI,PI11,,,,,,,,,,,,,,,,EVENTOUT,,, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/TIM5/TIM8/LPTIM1,TIM1/TIM2/TIM3/TIM4/TIM5,TIM8 ,I2C1/I2C2/I2C3,SPI1/SPI2 ,SPI3/DFSDM ,USART1/USART2/USART3,UART4/UART5/LPUART1 ,CAN1/TSC ,OTG_FS/QUADSPI ,LCD ,SDMMC1/COMP1/COMP2/FMC/SWPMI1,SAI1/SAI2 ,TIM2/TIM15/TIM16/TIM17/LPTIM2,EVENTOUT,ADC +PortA,PA0 , ,TIM2_CH1 ,TIM5_CH1 ,TIM8_ETR , , , ,USART2_CTS ,UART4_TX , , , , ,SAI1_EXTCLK ,TIM2_ETR ,EVENTOUT,ADC12_IN5 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 , ,I2C1_SMBA ,SPI1_SCK , ,USART2_RTS/USART2_DE,UART4_RX , , ,LCD_SEG0 , , ,TIM15_CH1N ,EVENTOUT,ADC12_IN6 +PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , , , , ,USART2_TX ,LPUART1_TX , ,QUADSPI_BK1_NCS,LCD_SEG1 , ,SAI2_EXTCLK ,TIM15_CH1 ,EVENTOUT,ADC12_IN7 +PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 , , , , ,USART2_RX ,LPUART1_RX , ,QUADSPI_CLK ,LCD_SEG2 , ,SAI1_MCLK_A ,TIM15_CH2 ,EVENTOUT,ADC12_IN8 +PortA,PA4 , , , , , ,SPI1_NSS ,SPI3_NSS ,USART2_CK , , ,DCMI_HSYNC , , ,SAI1_FS_B ,LPTIM2_OUT ,EVENTOUT,ADC12_IN9 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR ,TIM8_CH1N , ,SPI1_SCK , , , , , , , , ,LPTIM2_ETR ,EVENTOUT,ADC12_IN10 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN ,DCMI_PIXCLK ,SPI1_MISO , ,USART3_CTS ,LPUART1_CTS , ,QUADSPI_BK1_IO3,LCD_SEG3 ,TIM1_BKIN_COMP2 ,TIM8_BKIN_COMP2,TIM16_CH1 ,EVENTOUT,ADC12_IN11 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N ,I2C3_SCL ,SPI1_MOSI , , , , ,QUADSPI_BK1_IO2,LCD_SEG4 , , ,TIM17_CH1 ,EVENTOUT,ADC12_IN12 +PortA,PA8 ,MCO ,TIM1_CH1 , , , , , ,USART1_CK , , ,OTG_FS_SOF ,LCD_COM0 ,SWPMI1_IO ,SAI1_SCK_A ,LPTIM2_OUT ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,SPI2_SCK ,I2C1_SCL ,DCMI_D0 , ,USART1_TX , , , ,LCD_COM1 , ,SAI1_FS_A ,TIM15_BKIN ,EVENTOUT, +PortA,PA10, ,TIM1_CH3 , , ,I2C1_SDA ,DCMI_D1 , ,USART1_RX , , ,OTG_FS_ID ,LCD_COM2 , ,SAI1_SD_A ,TIM17_BKIN ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2 , , ,SPI1_MISO , ,USART1_CTS , ,CAN1_RX ,OTG_FS_DM , ,TIM1_BKIN2_COMP1 , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI1_MOSI , ,USART1_RTS/USART1_DE, ,CAN1_TX ,OTG_FS_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO ,IR_OUT , , , , , , , , ,OTG_FS_NOE , ,SWPMI1_TX ,SAI1_SD_B , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK ,LPTIM1_OUT , , ,I2C1_SMBA ,I2C4_SMBA , , , , ,OTG_FS_SOF , ,SWPMI1_RX ,SAI1_FS_B , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR ,USART2_RX , ,SPI1_NSS ,SPI3_NSS ,USART3_RTS/USART3_DE,UART4_RTS/UART4_DE ,TSC_G3_IO1, ,LCD_SEG17 ,SWPMI1_SUSPEND ,SAI2_FS_B , ,EVENTOUT, +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N , ,SPI1_NSS , ,USART3_CK , , ,QUADSPI_BK1_IO1,LCD_SEG5 ,COMP1_OUT ,SAI1_EXTCLK , ,EVENTOUT,ADC12_IN15 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM1_DATIN0,USART3_RTS/USART3_DE,LPUART1_RTS/LPUART1_DE, ,QUADSPI_BK1_IO0,LCD_SEG6 , , ,LPTIM2_IN1 ,EVENTOUT,ADC12_IN16 +PortB,PB2 ,RTC_OUT ,LPTIM1_OUT , , ,I2C3_SMBA , ,DFSDM1_CKIN0 , , , , ,LCD_VLCD , , , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,SPI3_SCK ,USART1_RTS/USART1_DE, , ,OTG_FS_CRS_SYNC,LCD_SEG7 , ,SAI1_SCK_B , ,EVENTOUT, +PortB,PB4 ,NJTRST , ,TIM3_CH1 , ,I2C3_SDA ,SPI1_MISO ,SPI3_MISO ,USART1_CTS ,UART5_RTS/UART5_DE ,TSC_G2_IO1,DCMI_D12 ,LCD_SEG8 , ,SAI1_MCLK_B ,TIM17_BKIN ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 ,TIM3_CH2 ,CAN2_RX ,I2C1_SMBA ,SPI1_MOSI ,SPI3_MOSI ,USART1_CK ,UART5_CTS ,TSC_G2_IO2,DCMI_D10 ,LCD_SEG9 ,COMP2_OUT ,SAI1_SD_B ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR ,TIM4_CH1 ,TIM8_BKIN2 ,I2C1_SCL ,I2C4_SCL ,DFSDM1_DATIN5,USART1_TX ,CAN2_TX ,TSC_G2_IO3,DCMI_D5 , ,TIM8_BKIN2_COMP2 ,SAI1_FS_B ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 ,TIM4_CH2 ,TIM8_BKIN ,I2C1_SDA ,I2C4_SDA ,DFSDM1_CKIN5 ,USART1_RX ,UART4_CTS ,TSC_G2_IO4,DCMI_VSYNC ,LCD_SEG21 ,FMC_NL ,TIM8_BKIN_COMP1,TIM17_CH1N ,EVENTOUT, +PortB,PB8 , , ,TIM4_CH3 , ,I2C1_SCL , ,DFSDM1_DATIN6, , ,CAN1_RX ,DCMI_D6 ,LCD_SEG16 ,SDMMC1_D4 ,SAI1_MCLK_A ,TIM16_CH1 ,EVENTOUT, +PortB,PB9 , ,IR_OUT ,TIM4_CH4 , ,I2C1_SDA ,SPI2_NSS ,DFSDM1_CKIN6 , , ,CAN1_TX ,DCMI_D7 ,LCD_COM3 ,SDMMC1_D5 ,SAI1_FS_A ,TIM17_CH1 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , ,I2C4_SCL ,I2C2_SCL ,SPI2_SCK ,DFSDM1_DATIN7,USART3_TX ,LPUART1_RX ,TSC_SYNC ,QUADSPI_CLK ,LCD_SEG10 ,COMP1_OUT ,SAI1_SCK_A , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , ,I2C4_SDA ,I2C2_SDA , ,DFSDM1_CKIN7 ,USART3_RX ,LPUART1_TX , ,QUADSPI_BK1_NCS,LCD_SEG11 ,COMP2_OUT , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,TIM1_BKIN_COMP2 ,I2C2_SMBA ,SPI2_NSS ,DFSDM1_DATIN1,USART3_CK ,LPUART1_RTS/LPUART1_DE,TSC_G1_IO1,CAN2_RX ,LCD_SEG12 ,SWPMI1_IO ,SAI2_FS_A ,TIM15_BKIN ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2C2_SCL ,SPI2_SCK ,DFSDM1_CKIN1 ,USART3_CTS ,LPUART1_CTS ,TSC_G1_IO2,CAN2_TX ,LCD_SEG13 ,SWPMI1_TX ,SAI2_SCK_A ,TIM15_CH1N ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,TIM8_CH2N ,I2C2_SDA ,SPI2_MISO ,DFSDM1_DATIN2,USART3_RTS/USART3_DE, ,TSC_G1_IO3, ,LCD_SEG14 ,SWPMI1_RX ,SAI2_MCLK_A ,TIM15_CH1 ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , ,TIM8_CH3N , ,SPI2_MOSI ,DFSDM1_CKIN2 , , ,TSC_G1_IO4, ,LCD_SEG15 ,SWPMI1_SUSPEND ,SAI2_SD_A ,TIM15_CH2 ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 ,I2C4_SCL , ,I2C3_SCL , ,DFSDM1_DATIN4, ,LPUART1_RX , , ,LCD_SEG18 , , ,LPTIM2_IN1 ,EVENTOUT,ADC123_IN1 +PortC,PC1 ,TRACED0 ,LPTIM1_OUT ,I2C4_SDA ,SPI2_MOSI ,I2C3_SDA , ,DFSDM1_CKIN4 , ,LPUART1_TX , ,QUADSPI_BK2_IO0,LCD_SEG19 , ,SAI1_SD_A , ,EVENTOUT,ADC123_IN2 +PortC,PC2 , ,LPTIM1_IN2 , , , ,SPI2_MISO ,DFSDM1_CKOUT , , , ,QUADSPI_BK2_IO1,LCD_SEG20 , , , ,EVENTOUT,ADC123_IN3 +PortC,PC3 , ,LPTIM1_ETR , , , ,SPI2_MOSI , , , , ,QUADSPI_BK2_IO2,LCD_VLCD , ,SAI1_SD_A ,LPTIM2_ETR ,EVENTOUT,ADC123_IN4 +PortC,PC4 , , , , , , , ,USART3_TX , , ,QUADSPI_BK2_IO3,LCD_SEG22 , , , ,EVENTOUT,ADC12_IN13 +PortC,PC5 , , , , , , , ,USART3_RX , , , ,LCD_SEG23 , , , ,EVENTOUT,ADC12_IN14 +PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 , , ,DFSDM1_CKIN3 , , ,TSC_G4_IO1,DCMI_D0 ,LCD_SEG24 ,SDMMC1_D6 ,SAI2_MCLK_A , ,EVENTOUT, +PortC,PC7 , , ,TIM3_CH2 ,TIM8_CH2 , , ,DFSDM1_DATIN3, , ,TSC_G4_IO2,DCMI_D1 ,LCD_SEG25 ,SDMMC1_D7 ,SAI2_MCLK_B , ,EVENTOUT, +PortC,PC8 , , ,TIM3_CH3 ,TIM8_CH3 , , , , , ,TSC_G4_IO3,DCMI_D2 ,LCD_SEG26 ,SDMMC1_D0 , , ,EVENTOUT, +PortC,PC9 , ,TIM8_BKIN2 ,TIM3_CH4 ,TIM8_CH4 ,DCMI_D3 , ,I2C3_SDA , , ,TSC_G4_IO4,OTG_FS_NOE ,LCD_SEG27 ,SDMMC1_D1 ,SAI2_EXTCLK ,TIM8_BKIN2_COMP1 ,EVENTOUT, +PortC,PC10,TRACED1 , , , , , ,SPI3_SCK ,USART3_TX ,UART4_TX ,TSC_G3_IO2,DCMI_D8 ,LCD_COM4/LCD_SEG28/LCD_SEG40,SDMMC1_D2 ,SAI2_SCK_B , ,EVENTOUT, +PortC,PC11, , , , , ,QUADSPI_BK2_NCS,SPI3_MISO ,USART3_RX ,UART4_RX ,TSC_G3_IO3,DCMI_D4 ,LCD_COM5/LCD_SEG29/LCD_SEG41,SDMMC1_D3 ,SAI2_MCLK_B , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , ,SPI3_MOSI ,USART3_CK ,UART5_TX ,TSC_G3_IO4,DCMI_D9 ,LCD_COM6/LCD_SEG30/LCD_SEG42,SDMMC1_CK ,SAI2_SD_B , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , ,SPI2_NSS ,DFSDM1_DATIN7, , ,CAN1_RX , , ,FMC_D2 , , ,EVENTOUT, +PortD,PD1 , , , , , ,SPI2_SCK ,DFSDM1_CKIN7 , , ,CAN1_TX , , ,FMC_D3 , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , ,TIM3_ETR , , , , ,USART3_RTS/USART3_DE,UART5_RX ,TSC_SYNC ,DCMI_D11 ,LCD_COM7/LCD_SEG31/LCD_SEG43,SDMMC1_CMD , , ,EVENTOUT, +PortD,PD3 , , , ,SPI2_SCK ,DCMI_D5 ,SPI2_MISO ,DFSDM1_DATIN0,USART2_CTS , , ,QUADSPI_BK2_NCS, ,FMC_CLK , , ,EVENTOUT, +PortD,PD4 , , , , , ,SPI2_MOSI ,DFSDM1_CKIN0 ,USART2_RTS/USART2_DE, , ,QUADSPI_BK2_IO0, ,FMC_NOE , , ,EVENTOUT, +PortD,PD5 , , , , , , , ,USART2_TX , , ,QUADSPI_BK2_IO1, ,FMC_NWE , , ,EVENTOUT, +PortD,PD6 , , , , ,DCMI_D10 ,QUADSPI_BK2_IO1,DFSDM1_DATIN1,USART2_RX , , ,QUADSPI_BK2_IO2, ,FMC_NWAIT ,SAI1_SD_A , ,EVENTOUT, +PortD,PD7 , , , , , , ,DFSDM1_CKIN1 ,USART2_CK , , ,QUADSPI_BK2_IO3, ,FMC_NE1 , , ,EVENTOUT, +PortD,PD8 , , , , , , , ,USART3_TX , , ,DCMI_HSYNC ,LCD_SEG28 ,FMC_D13 , , ,EVENTOUT, +PortD,PD9 , , , , , , , ,USART3_RX , , ,DCMI_PIXCLK ,LCD_SEG29 ,FMC_D14 ,SAI2_MCLK_A , ,EVENTOUT, +PortD,PD10, , , , , , , ,USART3_CK , ,TSC_G6_IO1, ,LCD_SEG30 ,FMC_D15 ,SAI2_SCK_A , ,EVENTOUT, +PortD,PD11, , , , ,I2C4_SMBA , , ,USART3_CTS , ,TSC_G6_IO2, ,LCD_SEG31 ,FMC_A16 ,SAI2_SD_A ,LPTIM2_ETR ,EVENTOUT, +PortD,PD12, , ,TIM4_CH1 , ,I2C4_SCL , , ,USART3_RTS/USART3_DE, ,TSC_G6_IO3, ,LCD_SEG32 ,FMC_A17 ,SAI2_FS_A ,LPTIM2_IN1 ,EVENTOUT, +PortD,PD13, , ,TIM4_CH2 , ,I2C4_SDA , , , , ,TSC_G6_IO4, ,LCD_SEG33 ,FMC_A18 , ,LPTIM2_OUT ,EVENTOUT, +PortD,PD14, , ,TIM4_CH3 , , , , , , , , ,LCD_SEG34 ,FMC_D0 , , ,EVENTOUT, +PortD,PD15, , ,TIM4_CH4 , , , , , , , , ,LCD_SEG35 ,FMC_D1 , , ,EVENTOUT, +PortE,PE0 , , ,TIM4_ETR , , , , , , , ,DCMI_D2 ,LCD_SEG36 ,FMC_NBL0 , ,TIM16_CH1 ,EVENTOUT, +PortE,PE1 , , , , , , , , , , ,DCMI_D3 ,LCD_SEG37 ,FMC_NBL1 , ,TIM17_CH1 ,EVENTOUT, +PortE,PE2 ,TRACECLK , ,TIM3_ETR , , , , , , ,TSC_G7_IO1, ,LCD_SEG38 ,FMC_A23 ,SAI1_MCLK_A , ,EVENTOUT, +PortE,PE3 ,TRACED0 , ,TIM3_CH1 , , , , , , ,TSC_G7_IO2, ,LCD_SEG39 ,FMC_A19 ,SAI1_SD_B , ,EVENTOUT, +PortE,PE4 ,TRACED1 , ,TIM3_CH2 , , , ,DFSDM1_DATIN3, , ,TSC_G7_IO3,DCMI_D4 , ,FMC_A20 ,SAI1_FS_A , ,EVENTOUT, +PortE,PE5 ,TRACED2 , ,TIM3_CH3 , , , ,DFSDM1_CKIN3 , , ,TSC_G7_IO4,DCMI_D6 , ,FMC_A21 ,SAI1_SCK_A , ,EVENTOUT, +PortE,PE6 ,TRACED3 , ,TIM3_CH4 , , , , , , , ,DCMI_D7 , ,FMC_A22 ,SAI1_SD_A , ,EVENTOUT, +PortE,PE7 , ,TIM1_ETR , , , , ,DFSDM1_DATIN2, , , , , ,FMC_D4 ,SAI1_SD_B , ,EVENTOUT, +PortE,PE8 , ,TIM1_CH1N , , , , ,DFSDM1_CKIN2 , , , , , ,FMC_D5 ,SAI1_SCK_B , ,EVENTOUT, +PortE,PE9 , ,TIM1_CH1 , , , , ,DFSDM1_CKOUT , , , , , ,FMC_D6 ,SAI1_FS_B , ,EVENTOUT, +PortE,PE10, ,TIM1_CH2N , , , , ,DFSDM1_DATIN4, , ,TSC_G5_IO1,QUADSPI_CLK , ,FMC_D7 ,SAI1_MCLK_B , ,EVENTOUT, +PortE,PE11, ,TIM1_CH2 , , , , ,DFSDM1_CKIN4 , , ,TSC_G5_IO2,QUADSPI_BK1_NCS, ,FMC_D8 , , ,EVENTOUT, +PortE,PE12, ,TIM1_CH3N , , , ,SPI1_NSS ,DFSDM1_DATIN5, , ,TSC_G5_IO3,QUADSPI_BK1_IO0, ,FMC_D9 , , ,EVENTOUT, +PortE,PE13, ,TIM1_CH3 , , , ,SPI1_SCK ,DFSDM1_CKIN5 , , ,TSC_G5_IO4,QUADSPI_BK1_IO1, ,FMC_D10 , , ,EVENTOUT, +PortE,PE14, ,TIM1_CH4 ,TIM1_BKIN2 ,TIM1_BKIN2_COMP2, ,SPI1_MISO , , , , ,QUADSPI_BK1_IO2, ,FMC_D11 , , ,EVENTOUT, +PortE,PE15, ,TIM1_BKIN , ,TIM1_BKIN_COMP1 , ,SPI1_MOSI , , , , ,QUADSPI_BK1_IO3, ,FMC_D12 , , ,EVENTOUT, +PortF,PF0 , , , , ,I2C2_SDA , , , , , , , ,FMC_A0 , , ,EVENTOUT, +PortF,PF1 , , , , ,I2C2_SCL , , , , , , , ,FMC_A1 , , ,EVENTOUT, +PortF,PF2 , , , , ,I2C2_SMBA , , , , , , , ,FMC_A2 , , ,EVENTOUT, +PortF,PF3 , , , , , , , , , , , , ,FMC_A3 , , ,EVENTOUT,ADC3_IN6 +PortF,PF4 , , , , , , , , , , , , ,FMC_A4 , , ,EVENTOUT,ADC3_IN7 +PortF,PF5 , , , , , , , , , , , , ,FMC_A5 , , ,EVENTOUT,ADC3_IN8 +PortF,PF6 , ,TIM5_ETR ,TIM5_CH1 , , , , , , , ,QUADSPI_BK1_IO3, , ,SAI1_SD_B , ,EVENTOUT,ADC3_IN9 +PortF,PF7 , , ,TIM5_CH2 , , , , , , , ,QUADSPI_BK1_IO2, , ,SAI1_MCLK_B , ,EVENTOUT,ADC3_IN10 +PortF,PF8 , , ,TIM5_CH3 , , , , , , , ,QUADSPI_BK1_IO0, , ,SAI1_SCK_B , ,EVENTOUT,ADC3_IN11 +PortF,PF9 , , ,TIM5_CH4 , , , , , , , ,QUADSPI_BK1_IO1, , ,SAI1_FS_B ,TIM15_CH1 ,EVENTOUT,ADC3_IN12 +PortF,PF10, , , ,QUADSPI_CLK , , , , , , ,DCMI_D11 , , , ,TIM15_CH2 ,EVENTOUT,ADC3_IN13 +PortF,PF11, , , , , , , , , , ,DCMI_D12 , , , , ,EVENTOUT, +PortF,PF12, , , , , , , , , , , , ,FMC_A6 , , ,EVENTOUT, +PortF,PF13, , , , ,I2C4_SMBA , ,DFSDM1_DATIN6, , , , , ,FMC_A7 , , ,EVENTOUT, +PortF,PF14, , , , ,I2C4_SCL , ,DFSDM1_CKIN6 , , ,TSC_G8_IO1, , ,FMC_A8 , , ,EVENTOUT, +PortF,PF15, , , , ,I2C4_SDA , , , , ,TSC_G8_IO2, , ,FMC_A9 , , ,EVENTOUT, +PortG,PG0 , , , , , , , , , ,TSC_G8_IO3, , ,FMC_A10 , , ,EVENTOUT, +PortG,PG1 , , , , , , , , , ,TSC_G8_IO4, , ,FMC_A11 , , ,EVENTOUT, +PortG,PG2 , , , , , ,SPI1_SCK , , , , , , ,FMC_A12 ,SAI2_SCK_B , ,EVENTOUT, +PortG,PG3 , , , , , ,SPI1_MISO , , , , , , ,FMC_A13 ,SAI2_FS_B , ,EVENTOUT, +PortG,PG4 , , , , , ,SPI1_MOSI , , , , , , ,FMC_A14 ,SAI2_MCLK_B , ,EVENTOUT, +PortG,PG5 , , , , , ,SPI1_NSS , , ,LPUART1_CTS , , , ,FMC_A15 ,SAI2_SD_B , ,EVENTOUT, +PortG,PG6 , , , , ,I2C3_SMBA , , , ,LPUART1_RTS/LPUART1_DE, , , , , , ,EVENTOUT, +PortG,PG7 , , , , ,I2C3_SCL , , , ,LPUART1_TX , , , ,FMC_INT ,SAI1_MCLK_A , ,EVENTOUT, +PortG,PG8 , , , , ,I2C3_SDA , , , ,LPUART1_RX , , , , , , ,EVENTOUT, +PortG,PG9 , , , , , , ,SPI3_SCK ,USART1_TX , , , , ,FMC_NCE/FMC_NE2 ,SAI2_SCK_A ,TIM15_CH1N ,EVENTOUT, +PortG,PG10, ,LPTIM1_IN1 , , , , ,SPI3_MISO ,USART1_RX , , , , ,FMC_NE3 ,SAI2_FS_A ,TIM15_CH1 ,EVENTOUT, +PortG,PG11, ,LPTIM1_IN2 , , , , ,SPI3_MOSI ,USART1_CTS , , , , , ,SAI2_MCLK_A ,TIM15_CH2 ,EVENTOUT, +PortG,PG12, ,LPTIM1_ETR , , , , ,SPI3_NSS ,USART1_RTS/USART1_DE, , , , ,FMC_NE4 ,SAI2_SD_A , ,EVENTOUT, +PortG,PG13, , , , ,I2C1_SDA , , ,USART1_CK , , , , ,FMC_A24 , , ,EVENTOUT, +PortG,PG14, , , , ,I2C1_SCL , , , , , , , ,FMC_A25 , , ,EVENTOUT, +PortG,PG15, ,LPTIM1_OUT , , ,I2C1_SMBA , , , , , ,DCMI_D13 , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH2 , , , ,QUADSPI_BK2_IO0 , , , , , , , , , , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH4 , , , , ,I2C2_SCL , , , , , , , , , , ,EVENTOUT, +PortH,PH5 , , , , ,I2C2_SDA , , , , , ,DCMI_PIXCLK , , , , ,EVENTOUT, +PortH,PH6 , , , , ,I2C2_SMBA , , , , , ,DCMI_D8 , , , , ,EVENTOUT, +PortH,PH7 , , , , ,I2C3_SCL , , , , , ,DCMI_D9 , , , , ,EVENTOUT, +PortH,PH8 , , , , ,I2C3_SDA , , , , , ,DCMI_HSYNC , , , , ,EVENTOUT, +PortH,PH9 , , , , ,I2C3_SMBA , , , , , ,DCMI_D0 , , , , ,EVENTOUT, +PortH,PH10, , ,TIM5_CH1 , , , , , , , ,DCMI_D1 , , , , ,EVENTOUT, +PortH,PH11, , ,TIM5_CH2 , , , , , , , ,DCMI_D2 , , , , ,EVENTOUT, +PortH,PH12, , ,TIM5_CH3 , , , , , , , ,DCMI_D3 , , , , ,EVENTOUT, +PortH,PH13, , , ,TIM8_CH1N , , , , , ,CAN1_TX , , , , , ,EVENTOUT, +PortH,PH14, , , ,TIM8_CH2N , , , , , , ,DCMI_D4 , , , , ,EVENTOUT, +PortH,PH15, , , ,TIM8_CH3N , , , , , , ,DCMI_D11 , , , , ,EVENTOUT, +PortI,PI0 , , ,TIM5_CH4 , , ,SPI2_NSS , , , , ,DCMI_D13 , , , , ,EVENTOUT, +PortI,PI1 , , , , , ,SPI2_SCK , , , , ,DCMI_D8 , , , , ,EVENTOUT, +PortI,PI2 , , , ,TIM8_CH4 , ,SPI2_MISO , , , , ,DCMI_D9 , , , , ,EVENTOUT, +PortI,PI3 , , , ,TIM8_ETR , ,SPI2_MOSI , , , , ,DCMI_D10 , , , , ,EVENTOUT, +PortI,PI4 , , , ,TIM8_BKIN , , , , , , ,DCMI_D5 , , , , ,EVENTOUT, +PortI,PI5 , , , ,TIM8_CH1 , , , , , , ,DCMI_VSYNC , , , , ,EVENTOUT, +PortI,PI6 , , , ,TIM8_CH2 , , , , , , ,DCMI_D6 , , , , ,EVENTOUT, +PortI,PI7 , , , ,TIM8_CH3 , , , , , , ,DCMI_D7 , , , , ,EVENTOUT, +PortI,PI8 , , , , , , , , , , ,DCMI_D12 , , , , ,EVENTOUT, +PortI,PI9 , , , , , , , , , ,CAN1_RX , , , , , ,EVENTOUT, +PortI,PI10, , , , , , , , , , , , , , , ,EVENTOUT, +PortI,PI11, , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32wb55_af.csv b/ports/stm32/boards/stm32wb55_af.csv index d6e1c3f77334c..3d319b03cfc17 100644 --- a/ports/stm32/boards/stm32wb55_af.csv +++ b/ports/stm32/boards/stm32wb55_af.csv @@ -1,74 +1,74 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2/LPTIM1,TIM1/TIM2,SPI2/SAI1/TIM1,I2C1/I2C3,SPI1/SPI2,RF,USART1,LPUART1,TSC,USB/QUADSPI,LCD,COMP1/COMP2/TIM1,SAI1,TIM2/TIM16/TIM17/LPTIM2,EVENTOUT,ADC -PortA,PA0,,TIM2_CH1,,,,,,,,,,,COMP1_OUT,SAI1_EXTCLK,TIM2_ETR,EVENTOUT,ADC1_IN5 -PortA,PA1,,TIM2_CH2,,,I2C1_SMBA,SPI1_SCK,,,,,,LCD_SEG0,,,,EVENTOUT,ADC1_IN6 -PortA,PA2,LSCO,TIM2_CH3,,,,,,,LPUART1_TX,,QUADSPI_BK1_NCS,LCD_SEG1,COMP2_OUT,,,EVENTOUT,ADC1_IN7 -PortA,PA3,,TIM2_CH4,,SAI1_PDM_CK1,,,,,LPUART1_RX,,QUADSPI_CLK,LCD_SEG2,,SAI1_MCLK_A,,EVENTOUT,ADC1_IN8 -PortA,PA4,,,,,,SPI1_NSS,,,,,,LCD_SEG5,,SAI1_FS_B,LPTIM2_OUT,EVENTOUT,ADC1_IN9 -PortA,PA5,,TIM2_CH1,TIM2_ETR,,,SPI1_SCK,,,,,,,,SAI1_SD_B,LPTIM2_ETR,EVENTOUT,ADC1_IN10 -PortA,PA6,,TIM1_BKIN,,,,SPI1_MISO,,,LPUART1_CTS,,QUADSPI_BK1_IO3,LCD_SEG3,TIM1_BKIN,,TIM16_CH1,EVENTOUT,ADC1_IN11 -PortA,PA7,,TIM1_CH1N,,,I2C3_SCL,SPI1_MOSI,,,,,QUADSPI_BK1_IO2,LCD_SEG4,COMP2_OUT,,TIM17_CH1,EVENTOUT,ADC1_IN12 -PortA,PA8,MCO,TIM1_CH1,,SAI1_PDM_CK2,,,,USART1_CK,,,,LCD_COM0,,SAI1_SCK_A,LPTIM2_OUT,EVENTOUT,ADC1_IN15 -PortA,PA9,,TIM1_CH2,,SAI1_PDM_DI2,I2C1_SCL,SPI2_SCK,,USART1_TX,,,,LCD_COM1,,SAI1_FS_A,,EVENTOUT,ADC1_IN16 -PortA,PA10,,TIM1_CH3,,SAI1_PDM_DI1,I2C1_SDA,,,USART1_RX,,,USB_CRS_SYNC,LCD_COM2,,SAI1_SD_A,TIM17_BKIN,EVENTOUT, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,,,SPI1_MISO,,USART1_CTS,,,USB_DM,,TIM1_BKIN2,,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,,,SPI1_MOSI,,USART1_RTS/USART1_DE,LPUART1_RX,,USB_DP,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,,,,,IR_OUT,,USB_NOE,,,SAI1_SD_B,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,LPTIM1_OUT,,,I2C1_SMBA,,,,,,,LCD_SEG5,,SAI1_FS_B,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,,,SPI1_NSS,,,,TSC_G3_IO1,,LCD_SEG17,,,,EVENTOUT, -PortB,PB0,,,,,,,EXT_PA_TX,,,,,,COMP1_OUT,,,EVENTOUT, -PortB,PB1,,,,,,,,,LPUART1_RTS/LPUART1_DE,,,,,,LPTIM2_IN1,EVENTOUT, -PortB,PB2,RTC_OUT,LPTIM1_OUT,,,I2C3_SMBA,SPI1_NSS,,,,,,LCD_VLCD,,SAI1_EXTCLK,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,,USART1_RTS/USART1_DE,,,,LCD_SEG7,,SAI1_SCK_B,,EVENTOUT, -PortB,PB4,NJTRST,,,,I2C3_SDA,SPI1_MISO,,USART1_CTS,,TSC_G2_IO1,,LCD_SEG8,,SAI1_MCLK_B,TIM17_BKIN,EVENTOUT, -PortB,PB5,,LPTIM1_IN1,,,I2C1_SMBA,SPI1_MOSI,,USART1_CK,LPUART1_TX,TSC_G2_IO2,,LCD_SEG9,COMP2_OUT,SAI1_SD_B,TIM16_BKIN,EVENTOUT, -PortB,PB6,MCO,LPTIM1_ETR,,,I2C1_SCL,,,USART1_TX,,TSC_G2_IO3,,LCD_SEG6,,SAI1_FS_B,TIM16_CH1N,EVENTOUT, -PortB,PB7,,LPTIM1_IN2,,TIM1_BKIN,I2C1_SDA,,,USART1_RX,,TSC_G2_IO4,,LCD_SEG21,,,TIM17_CH1N,EVENTOUT, -PortB,PB8,,TIM1_CH2N,,SAI1_PDM_CK1,I2C1_SCL,,,,,,QUADSPI_BK1_IO1,LCD_SEG16,,SAI1_MCLK_A,TIM16_CH1,EVENTOUT, -PortB,PB9,,TIM1_CH3N,,SAI1_PDM_DI2,I2C1_SDA,SPI2_NSS,,,IR_OUT,TSC_G7_IO4,QUADSPI_BK1_IO0,LCD_COM3,,SAI1_FS_A,TIM17_CH1,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C3_SCL,SPI2_SCK,,,LPUART1_RX,TSC_SYNC,QUADSPI_CLK,LCD_SEG10,COMP1_OUT,SAI1_SCK_A,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C3_SDA,,,,LPUART1_TX,,QUADSPI_BK1_NCS,LCD_SEG11,COMP2_OUT,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,TIM1_BKIN,I2C3_SMBA,SPI2_NSS,,,LPUART1_RTS,TSC_G1_IO1,,LCD_SEG12,,SAI1_FS_A,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,I2C3_SCL,SPI2_SCK,,,LPUART1_CTS,TSC_G1_IO2,,LCD_SEG13,,SAI1_SCK_A,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,,I2C3_SDA,SPI2_MISO,,,,TSC_G1_IO3,,LCD_SEG14,,SAI1_MCLK_A,,EVENTOUT, -PortB,PB15,RTC_REFIN,TIM1_CH3N,,,,SPI2_MOSI,,,,TSC_G1_IO4,,LCD_SEG15,,SAI1_SD_A,,EVENTOUT, -PortC,PC0,,LPTIM1_IN1,,,I2C3_SCL,,,,LPUART1_RX,,,LCD_SEG18,,,LPTIM2_IN1,EVENTOUT,ADC1_IN1 -PortC,PC1,,LPTIM1_OUT,,SPI2_MOSI,I2C3_SDA,,,,LPUART1_TX,,,LCD_SEG19,,,,EVENTOUT,ADC1_IN2 -PortC,PC2,,LPTIM1_IN2,,,,SPI2_MISO,,,,,,LCD_SEG20,,,,EVENTOUT,ADC1_IN3 -PortC,PC3,,LPTIM1_ETR,,SAI1_PDM_DI1,,SPI2_MOSI,,,,,,LCD_VLCD,,SAI1_SD_A,LPTIM2_ETR,EVENTOUT,ADC1_IN4 -PortC,PC4,,,,,,,,,,,,LCD_SEG22,,,,EVENTOUT,ADC1_IN13 -PortC,PC5,,,,SAI1_PDM_DI3,,,,,,,,LCD_SEG23,,,,EVENTOUT,ADC1_IN14 -PortC,PC6,,,,,,,,,,TSC_G4_IO1,,LCD_SEG24,,,,EVENTOUT, -PortC,PC7,,,,,,,,,,TSC_G4_IO2,,LCD_SEG25,,,,EVENTOUT, -PortC,PC8,,,,,,,,,,TSC_G4_IO3,,LCD_SEG26,,,,EVENTOUT, -PortC,PC9,,,,TIM1_BKIN,,,,,,TSC_G4_IO4,USB_NOE,LCD_SEG27,,SAI1_SCK_B,,EVENTOUT, -PortC,PC10,TRACED1,,,,,,,,,TSC_G3_IO2,,LCD_COM4LCD_SEG28LCD_SEG40,,,,EVENTOUT, -PortC,PC11,,,,,,,,,,TSC_G3_IO3,,LCD_COM5LCD_SEG29LCD_SEG41,,,,EVENTOUT, -PortC,PC12,TRACED3,,,,,,,,,TSC_G3_IO4,,LCD_COM6LCD_SEG30LCD_SEG42,,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortD,PD0,,,,,,SPI2_NSS,,,,,,,,,,EVENTOUT, -PortD,PD1,,,,,,SPI2_SCK,,,,,,,,,,EVENTOUT, -PortD,PD2,TRACED2,,,,,,,,,TSC_SYNC,,LCD_COM7LCD_SEG31LCD_SEG43,,,,EVENTOUT, -PortD,PD3,,,,SPI2_SCK,,SPI2_MISO,,,,,QUADSPI_BK1_NCS,,,,,EVENTOUT, -PortD,PD4,,,,,,SPI2_MOSI,,,,TSC_G5_IO1,QUADSPI_BK1_IO0,,,,,EVENTOUT, -PortD,PD5,,,,,,,,,,TSC_G5_IO2,QUADSPI_BK1_IO1,,,SAI1_MCLK_B,,EVENTOUT, -PortD,PD6,,,,SAI1_PDM_DI1,,,,,,TSC_G5_IO3,QUADSPI_BK1_IO2,,,SAI1_SD_A,,EVENTOUT, -PortD,PD7,,,,,,,,,,TSC_G5_IO4,QUADSPI_BK1_IO3,LCD_SEG39,,,,EVENTOUT, -PortD,PD8,,,TIM1_BKIN2,,,,,,,,,LCD_SEG28,,,,EVENTOUT, -PortD,PD9,TRACED0,,,,,,,,,,,LCD_SEG29,,,,EVENTOUT, -PortD,PD10,TRIG_INOUT,,,,,,,,,TSC_G6_IO1,,LCD_SEG30,,,,EVENTOUT, -PortD,PD11,,,,,,,,,,TSC_G6_IO2,,LCD_SEG31,,,LPTIM2_ETR,EVENTOUT, -PortD,PD12,,,,,,,,,,TSC_G6_IO3,,LCD_SEG32,,,LPTIM2_IN1,EVENTOUT, -PortD,PD13,,,,,,,,,,TSC_G6_IO4,,LCD_SEG33,,,LPTIM2_OUT,EVENTOUT, -PortD,PD14,,TIM1_CH1,,,,,,,,,,LCD_SEG34,,,,EVENTOUT, -PortD,PD15,,TIM1_CH2,,,,,,,,,,LCD_SEG35,,,,EVENTOUT, -PortE,PE0,,TIM1_ETR,,,,,,,,TSC_G7_IO3,,LCD_SEG36,,,TIM16_CH1,EVENTOUT, -PortE,PE1,,,,,,,,,,TSC_G7_IO2,,LCD_SEG37,,,TIM17_CH1,EVENTOUT, -PortE,PE2,TRACECK,,,SAI1_PDM_CK1,,,,,,TSC_G7_IO1,,LCD_SEG38,,SAI1_MCLK_A,,EVENTOUT, -PortE,PE3,,,,,,,,,,,,,,,,EVENTOUT, -PortE,PE4,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH0,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH1,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH3,LSCO,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/LPTIM1,TIM1/TIM2 ,SPI2/SAI1/TIM1,I2C1/I2C3,SPI1/SPI2,RF ,USART1 ,LPUART1 ,TSC ,USB/QUADSPI ,LCD ,COMP1/COMP2/TIM1,SAI1 ,TIM2/TIM16/TIM17/LPTIM2,EVENTOUT,ADC +PortA,PA0 , ,TIM2_CH1 , , , , , , , , , , ,COMP1_OUT ,SAI1_EXTCLK,TIM2_ETR ,EVENTOUT,ADC1_IN5 +PortA,PA1 , ,TIM2_CH2 , , ,I2C1_SMBA,SPI1_SCK , , , , , ,LCD_SEG0 , , , ,EVENTOUT,ADC1_IN6 +PortA,PA2 ,LSCO ,TIM2_CH3 , , , , , , ,LPUART1_TX , ,QUADSPI_BK1_NCS,LCD_SEG1 ,COMP2_OUT , , ,EVENTOUT,ADC1_IN7 +PortA,PA3 , ,TIM2_CH4 , ,SAI1_PDM_CK1 , , , , ,LPUART1_RX , ,QUADSPI_CLK ,LCD_SEG2 , ,SAI1_MCLK_A, ,EVENTOUT,ADC1_IN8 +PortA,PA4 , , , , , ,SPI1_NSS , , , , , ,LCD_SEG5 , ,SAI1_FS_B ,LPTIM2_OUT ,EVENTOUT,ADC1_IN9 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_SCK , , , , , , , ,SAI1_SD_B ,LPTIM2_ETR ,EVENTOUT,ADC1_IN10 +PortA,PA6 , ,TIM1_BKIN , , , ,SPI1_MISO, , ,LPUART1_CTS , ,QUADSPI_BK1_IO3,LCD_SEG3 ,TIM1_BKIN , ,TIM16_CH1 ,EVENTOUT,ADC1_IN11 +PortA,PA7 , ,TIM1_CH1N , , ,I2C3_SCL ,SPI1_MOSI, , , , ,QUADSPI_BK1_IO2,LCD_SEG4 ,COMP2_OUT , ,TIM17_CH1 ,EVENTOUT,ADC1_IN12 +PortA,PA8 ,MCO ,TIM1_CH1 , ,SAI1_PDM_CK2 , , , ,USART1_CK , , , ,LCD_COM0 , ,SAI1_SCK_A ,LPTIM2_OUT ,EVENTOUT,ADC1_IN15 +PortA,PA9 , ,TIM1_CH2 , ,SAI1_PDM_DI2 ,I2C1_SCL ,SPI2_SCK , ,USART1_TX , , , ,LCD_COM1 , ,SAI1_FS_A , ,EVENTOUT,ADC1_IN16 +PortA,PA10, ,TIM1_CH3 , ,SAI1_PDM_DI1 ,I2C1_SDA , , ,USART1_RX , , ,USB_CRS_SYNC ,LCD_COM2 , ,SAI1_SD_A ,TIM17_BKIN ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2, , ,SPI1_MISO, ,USART1_CTS , , ,USB_DM , ,TIM1_BKIN2 , , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , , , ,SPI1_MOSI, ,USART1_RTS/USART1_DE,LPUART1_RX , ,USB_DP , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , , , , , ,IR_OUT , ,USB_NOE , , ,SAI1_SD_B , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK ,LPTIM1_OUT , , ,I2C1_SMBA, , , , , , ,LCD_SEG5 , ,SAI1_FS_B , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR , , ,SPI1_NSS , , , ,TSC_G3_IO1, ,LCD_SEG17 , , , ,EVENTOUT, +PortB,PB0 , , , , , , ,EXT_PA_TX, , , , , ,COMP1_OUT , , ,EVENTOUT, +PortB,PB1 , , , , , , , , ,LPUART1_RTS/LPUART1_DE, , , , , ,LPTIM2_IN1 ,EVENTOUT, +PortB,PB2 ,RTC_OUT ,LPTIM1_OUT , , ,I2C3_SMBA,SPI1_NSS , , , , , ,LCD_VLCD , ,SAI1_EXTCLK, ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK , ,USART1_RTS/USART1_DE, , , ,LCD_SEG7 , ,SAI1_SCK_B , ,EVENTOUT, +PortB,PB4 ,NJTRST , , , ,I2C3_SDA ,SPI1_MISO, ,USART1_CTS , ,TSC_G2_IO1, ,LCD_SEG8 , ,SAI1_MCLK_B,TIM17_BKIN ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 , , ,I2C1_SMBA,SPI1_MOSI, ,USART1_CK ,LPUART1_TX ,TSC_G2_IO2, ,LCD_SEG9 ,COMP2_OUT ,SAI1_SD_B ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 ,MCO ,LPTIM1_ETR , , ,I2C1_SCL , , ,USART1_TX , ,TSC_G2_IO3, ,LCD_SEG6 , ,SAI1_FS_B ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 , ,TIM1_BKIN ,I2C1_SDA , , ,USART1_RX , ,TSC_G2_IO4, ,LCD_SEG21 , , ,TIM17_CH1N ,EVENTOUT, +PortB,PB8 , ,TIM1_CH2N , ,SAI1_PDM_CK1 ,I2C1_SCL , , , , , ,QUADSPI_BK1_IO1,LCD_SEG16 , ,SAI1_MCLK_A,TIM16_CH1 ,EVENTOUT, +PortB,PB9 , ,TIM1_CH3N , ,SAI1_PDM_DI2 ,I2C1_SDA ,SPI2_NSS , , ,IR_OUT ,TSC_G7_IO4,QUADSPI_BK1_IO0,LCD_COM3 , ,SAI1_FS_A ,TIM17_CH1 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C3_SCL ,SPI2_SCK , , ,LPUART1_RX ,TSC_SYNC ,QUADSPI_CLK ,LCD_SEG10 ,COMP1_OUT ,SAI1_SCK_A , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C3_SDA , , , ,LPUART1_TX , ,QUADSPI_BK1_NCS,LCD_SEG11 ,COMP2_OUT , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,TIM1_BKIN ,I2C3_SMBA,SPI2_NSS , , ,LPUART1_RTS ,TSC_G1_IO1, ,LCD_SEG12 , ,SAI1_FS_A , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2C3_SCL ,SPI2_SCK , , ,LPUART1_CTS ,TSC_G1_IO2, ,LCD_SEG13 , ,SAI1_SCK_A , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , , ,I2C3_SDA ,SPI2_MISO, , , ,TSC_G1_IO3, ,LCD_SEG14 , ,SAI1_MCLK_A, ,EVENTOUT, +PortB,PB15,RTC_REFIN ,TIM1_CH3N , , , ,SPI2_MOSI, , , ,TSC_G1_IO4, ,LCD_SEG15 , ,SAI1_SD_A , ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 , , ,I2C3_SCL , , , ,LPUART1_RX , , ,LCD_SEG18 , , ,LPTIM2_IN1 ,EVENTOUT,ADC1_IN1 +PortC,PC1 , ,LPTIM1_OUT , ,SPI2_MOSI ,I2C3_SDA , , , ,LPUART1_TX , , ,LCD_SEG19 , , , ,EVENTOUT,ADC1_IN2 +PortC,PC2 , ,LPTIM1_IN2 , , , ,SPI2_MISO, , , , , ,LCD_SEG20 , , , ,EVENTOUT,ADC1_IN3 +PortC,PC3 , ,LPTIM1_ETR , ,SAI1_PDM_DI1 , ,SPI2_MOSI, , , , , ,LCD_VLCD , ,SAI1_SD_A ,LPTIM2_ETR ,EVENTOUT,ADC1_IN4 +PortC,PC4 , , , , , , , , , , , ,LCD_SEG22 , , , ,EVENTOUT,ADC1_IN13 +PortC,PC5 , , , ,SAI1_PDM_DI3 , , , , , , , ,LCD_SEG23 , , , ,EVENTOUT,ADC1_IN14 +PortC,PC6 , , , , , , , , , ,TSC_G4_IO1, ,LCD_SEG24 , , , ,EVENTOUT, +PortC,PC7 , , , , , , , , , ,TSC_G4_IO2, ,LCD_SEG25 , , , ,EVENTOUT, +PortC,PC8 , , , , , , , , , ,TSC_G4_IO3, ,LCD_SEG26 , , , ,EVENTOUT, +PortC,PC9 , , , ,TIM1_BKIN , , , , , ,TSC_G4_IO4,USB_NOE ,LCD_SEG27 , ,SAI1_SCK_B , ,EVENTOUT, +PortC,PC10,TRACED1 , , , , , , , , ,TSC_G3_IO2, ,LCD_COM4LCD_SEG28LCD_SEG40, , , ,EVENTOUT, +PortC,PC11, , , , , , , , , ,TSC_G3_IO3, ,LCD_COM5LCD_SEG29LCD_SEG41, , , ,EVENTOUT, +PortC,PC12,TRACED3 , , , , , , , , ,TSC_G3_IO4, ,LCD_COM6LCD_SEG30LCD_SEG42, , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortD,PD0 , , , , , ,SPI2_NSS , , , , , , , , , ,EVENTOUT, +PortD,PD1 , , , , , ,SPI2_SCK , , , , , , , , , ,EVENTOUT, +PortD,PD2 ,TRACED2 , , , , , , , , ,TSC_SYNC , ,LCD_COM7LCD_SEG31LCD_SEG43, , , ,EVENTOUT, +PortD,PD3 , , , ,SPI2_SCK , ,SPI2_MISO, , , , ,QUADSPI_BK1_NCS, , , , ,EVENTOUT, +PortD,PD4 , , , , , ,SPI2_MOSI, , , ,TSC_G5_IO1,QUADSPI_BK1_IO0, , , , ,EVENTOUT, +PortD,PD5 , , , , , , , , , ,TSC_G5_IO2,QUADSPI_BK1_IO1, , ,SAI1_MCLK_B, ,EVENTOUT, +PortD,PD6 , , , ,SAI1_PDM_DI1 , , , , , ,TSC_G5_IO3,QUADSPI_BK1_IO2, , ,SAI1_SD_A , ,EVENTOUT, +PortD,PD7 , , , , , , , , , ,TSC_G5_IO4,QUADSPI_BK1_IO3,LCD_SEG39 , , , ,EVENTOUT, +PortD,PD8 , , ,TIM1_BKIN2, , , , , , , , ,LCD_SEG28 , , , ,EVENTOUT, +PortD,PD9 ,TRACED0 , , , , , , , , , , ,LCD_SEG29 , , , ,EVENTOUT, +PortD,PD10,TRIG_INOUT , , , , , , , , ,TSC_G6_IO1, ,LCD_SEG30 , , , ,EVENTOUT, +PortD,PD11, , , , , , , , , ,TSC_G6_IO2, ,LCD_SEG31 , , ,LPTIM2_ETR ,EVENTOUT, +PortD,PD12, , , , , , , , , ,TSC_G6_IO3, ,LCD_SEG32 , , ,LPTIM2_IN1 ,EVENTOUT, +PortD,PD13, , , , , , , , , ,TSC_G6_IO4, ,LCD_SEG33 , , ,LPTIM2_OUT ,EVENTOUT, +PortD,PD14, ,TIM1_CH1 , , , , , , , , , ,LCD_SEG34 , , , ,EVENTOUT, +PortD,PD15, ,TIM1_CH2 , , , , , , , , , ,LCD_SEG35 , , , ,EVENTOUT, +PortE,PE0 , ,TIM1_ETR , , , , , , , ,TSC_G7_IO3, ,LCD_SEG36 , , ,TIM16_CH1 ,EVENTOUT, +PortE,PE1 , , , , , , , , , ,TSC_G7_IO2, ,LCD_SEG37 , , ,TIM17_CH1 ,EVENTOUT, +PortE,PE2 ,TRACECK , , ,SAI1_PDM_CK1 , , , , , ,TSC_G7_IO1, ,LCD_SEG38 , ,SAI1_MCLK_A, ,EVENTOUT, +PortE,PE3 , , , , , , , , , , , , , , , ,EVENTOUT, +PortE,PE4 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH0 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH1 , , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH3 ,LSCO , , , , , , , , , , , , , , ,EVENTOUT, diff --git a/ports/stm32/boards/stm32wl55_af.csv b/ports/stm32/boards/stm32wl55_af.csv index 219b8b08b7853..c5ef81a4ac4e5 100644 --- a/ports/stm32/boards/stm32wl55_af.csv +++ b/ports/stm32/boards/stm32wl55_af.csv @@ -1,45 +1,45 @@ -Port,,AF0,AF1,AF2,AF3,AF4,AF5,AF6,AF7,AF8,AF9,AF10,AF11,AF12,AF13,AF14,AF15, -,,SYS_AF,TIM1/TIM2/LPTIM1,TIM1/TIM2,SPI2S2/TIM1/LPTIM3,I2C1/I2C2/I2C3,SPI1/SPI2S2,RF,USART1/USART2,LPUART1,,,,COMP1/COMP2/TIM1,DEBUG,TIM2/TIM16/TIM17/LPTIM2,EVENOUT,ADC -PortA,PA0,,TIM2_CH1,,,I2C3_SMBA,I2S_CKIN,,USART2_CTS,,,,,COMP1_OUT,DEBUG_PWR_REGLP1S,TIM2_ETR,EVENTOUT,ADC123_IN0 -PortA,PA1,,TIM2_CH2,,LPTIM3_OUT,I2C1_SMBA,SPI1_SCK,,USART2_RTS,LPUART1_RTS,,,,,DEBUG_PWR_REGLP2S,,EVENTOUT,ADC123_IN1 -PortA,PA2,LSCO,TIM2_CH3,,,,,,USART2_TX,LPUART1_TX,,,,COMP2_OUT,DEBUG_PWR_LDORDY,,EVENTOUT,ADC123_IN2 -PortA,PA3,,TIM2_CH4,,,,I2S2_MCK,,USART2_RX,LPUART1_RX,,,,,,,EVENTOUT,ADC123_IN3 -PortA,PA4,RTC_OUT2,LPTIM1_OUT,,,,SPI1_NSS,,USART2_CK,,,,,,DEBUG_SUBGHZSPI_NSSOUT,LPTIM2_OUT,EVENTOUT,ADC12_IN4 -PortA,PA5,,TIM2_CH1,TIM2_ETR,SPI2_MISO,,SPI1_SCK,,,,,,,,DEBUG_SUBGHZSPI_SCKOUT,LPTIM2_ETR,EVENTOUT,ADC12_IN5 -PortA,PA6,,TIM1_BKIN,,,I2C2_SMBA,SPI1_MISO,,,LPUART1_CTS,,,,TIM1_BKIN,DEBUG_SUBGHZSPI_MISOOUT,TIM16_CH1,EVENTOUT,ADC12_IN6 -PortA,PA7,,TIM1_CH1N,,,I2C3_SCL,SPI1_MOSI,,,,,,,COMP2_OUT,DEBUG_SUBGHZSPI_MOSIOUT,TIM17_CH1,EVENTOUT,ADC12_IN7 -PortA,PA8,MCO,TIM1_CH1,,,,SPI2_SCK/I2S2_CK,,USART1_CK,,,,,,,LPTIM2_OUT,EVENTOUT, -PortA,PA9,,TIM1_CH2,,SPI2_NSS/I2S2_WS,I2C1_SCL,SPI2_SCK/I2S2_CK,,USART1_TX,,,,,,,,EVENTOUT, -PortA,PA10,RTC_REFIN,TIM1_CH3,,,I2C1_SDA,SPI2_MOSI/I2S2_SD,,USART1_RX,,,,,,DEBUG_RF_HSE32RDY,TIM17_BKIN,EVENTOUT, -PortA,PA11,,TIM1_CH4,TIM1_BKIN2,LPTIM3_ETR,I2C2_SDA,SPI1_MISO,,USART1_CTS,,,,,TIM1_BKIN2,DEBUG_RF_NRESET,,EVENTOUT, -PortA,PA12,,TIM1_ETR,,LPTIM3_IN1,I2C2_SCL,SPI1_MOSI,RF_BUSY,USART1_RTS,,,,,,,,EVENTOUT, -PortA,PA13,JTMS/SWDIO,,,,I2C2_SMBA,,,,IR_OUT,,,,,,,EVENTOUT, -PortA,PA14,JTCK/SWCLK,LPTIM1_OUT,,,I2C1_SMBA,,,,,,,,,,,EVENTOUT, -PortA,PA15,JTDI,TIM2_CH1,TIM2_ETR,,I2C2_SDA,SPI1_NSS,,,,,,,,,,EVENTOUT, -PortB,PB0,,,,,,,,,,,,,COMP1_OUT,,,EVENTOUT,ADC12_IN8 -PortB,PB1,,,,,,,,,LPUART1_RTS_DE,,,,,,LPTIM2_IN1,EVENTOUT,ADC12_IN9 -PortB,PB2,,LPTIM1_OUT,,,I2C3_SMBA,SPI1_NSS,,,,,,,,DEBUG_RF_SMPSRDY,,EVENTOUT, -PortB,PB3,JTDO/TRACESWO,TIM2_CH2,,,,SPI1_SCK,RF_IRQ0,USART1_RTS,,,,,,DEBUG_RF_DTB1,,EVENTOUT, -PortB,PB4,NJTRST,,,,I2C3_SDA,SPI1_MISO,,USART1_CTS,,,,,,DEBUG_RF_LDORDY,TIM17_BKIN,EVENTOUT, -PortB,PB5,,LPTIM1_IN1,,,I2C1_SMBA,SPI1_MOSI,RF_IRQ1,USART1_CK,,,,,COMP2_OUT,,TIM16_BKIN,EVENTOUT, -PortB,PB6,,LPTIM1_ETR,,,I2C1_SCL,,,USART1_TX,,,,,,,TIM16_CH1N,EVENTOUT, -PortB,PB7,,LPTIM1_IN2,,TIM1_BKIN,I2C1_SDA,,,USART1_RX,,,,,,,TIM17_CH1N,EVENTOUT, -PortB,PB8,,TIM1_CH2N,,,I2C1_SCL,,RF_IRQ2,,,,,,,,TIM16_CH1,EVENTOUT, -PortB,PB9,,TIM1_CH3N,,,I2C1_SDA,SPI2_NSS/I2S2_WS,,,IR_OUT,,,,,,TIM17_CH1,EVENTOUT, -PortB,PB10,,TIM2_CH3,,,I2C3_SCL,SPI2_SCK/I2S2_CK,,,LPUART1_RX,,,,COMP1_OUT,,,EVENTOUT, -PortB,PB11,,TIM2_CH4,,,I2C3_SDA,,,,LPUART1_TX,,,,COMP2_OUT,,,EVENTOUT, -PortB,PB12,,TIM1_BKIN,,TIM1_BKIN,I2C3_SMBA,SPI2_NSS/I2S2_WS,,,LPUART1_RTS,,,,,,,EVENTOUT, -PortB,PB13,,TIM1_CH1N,,,I2C3_SCL,SPI2_SCK/I2S2_CK,,,LPUART1_CTS,,,,,,,EVENTOUT, -PortB,PB14,,TIM1_CH2N,,I2S2_MCK,I2C3_SDA,SPI2_MISO,,,,,,,,,,EVENTOUT, -PortB,PB15,,TIM1_CH3N,,,I2C2_SCL,SPI2_MOSI/I2S2_SD,,,,,,,,,,EVENTOUT, -PortC,PC0,,LPTIM1_IN1,,,I2C3_SCL,,,,LPUART1_RX,,,,,,LPTIM2_IN1,EVENTOUT,ADC123_IN10 -PortC,PC1,,LPTIM1_OUT,,SPI2_MOSI/I2S2_SD,I2C3_SDA,,,,LPUART1_TX,,,,,,,EVENTOUT,ADC123_IN11 -PortC,PC2,,LPTIM1_IN2,,,,SPI2_MISO,,,,,,,,,,EVENTOUT,ADC123_IN12 -PortC,PC3,,LPTIM1_ETR,,,,SPI2_MOSI/I2S2_SD,,,,,,,,,LPTIM2_ETR,EVENTOUT,ADC123_IN13 -PortC,PC4,,,,,,,,,,,,,,,,EVENTOUT,ADC12_IN14 -PortC,PC5,,,,,,,,,,,,,,,,EVENTOUT,ADC12_IN15 -PortC,PC6,,,,,,I2S2_MCK,,,,,,,,,,EVENTOUT, -PortC,PC13,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC14,,,,,,,,,,,,,,,,EVENTOUT, -PortC,PC15,,,,,,,,,,,,,,,,EVENTOUT, -PortH,PH3,,,,,,,,,,,,,,,,EVENTOUT, +Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9,AF10,AF11,AF12 ,AF13 ,AF14 ,AF15 ,ADC + , ,SYS_AF ,TIM1/TIM2/LPTIM1,TIM1/TIM2 ,SPI2S2/TIM1/LPTIM3,I2C1/I2C2/I2C3,SPI1/SPI2S2 ,RF ,USART1/USART2,LPUART1 , , , ,COMP1/COMP2/TIM1,DEBUG ,TIM2/TIM16/TIM17/LPTIM2,EVENOUT ,ADC +PortA,PA0 , ,TIM2_CH1 , , ,I2C3_SMBA ,I2S_CKIN , ,USART2_CTS , , , , ,COMP1_OUT ,DEBUG_PWR_REGLP1S ,TIM2_ETR ,EVENTOUT,ADC123_IN0 +PortA,PA1 , ,TIM2_CH2 , ,LPTIM3_OUT ,I2C1_SMBA ,SPI1_SCK , ,USART2_RTS ,LPUART1_RTS , , , , ,DEBUG_PWR_REGLP2S , ,EVENTOUT,ADC123_IN1 +PortA,PA2 ,LSCO ,TIM2_CH3 , , , , , ,USART2_TX ,LPUART1_TX , , , ,COMP2_OUT ,DEBUG_PWR_LDORDY , ,EVENTOUT,ADC123_IN2 +PortA,PA3 , ,TIM2_CH4 , , , ,I2S2_MCK , ,USART2_RX ,LPUART1_RX , , , , , , ,EVENTOUT,ADC123_IN3 +PortA,PA4 ,RTC_OUT2 ,LPTIM1_OUT , , , ,SPI1_NSS , ,USART2_CK , , , , , ,DEBUG_SUBGHZSPI_NSSOUT ,LPTIM2_OUT ,EVENTOUT,ADC12_IN4 +PortA,PA5 , ,TIM2_CH1 ,TIM2_ETR ,SPI2_MISO , ,SPI1_SCK , , , , , , , ,DEBUG_SUBGHZSPI_SCKOUT ,LPTIM2_ETR ,EVENTOUT,ADC12_IN5 +PortA,PA6 , ,TIM1_BKIN , , ,I2C2_SMBA ,SPI1_MISO , , ,LPUART1_CTS , , , ,TIM1_BKIN ,DEBUG_SUBGHZSPI_MISOOUT,TIM16_CH1 ,EVENTOUT,ADC12_IN6 +PortA,PA7 , ,TIM1_CH1N , , ,I2C3_SCL ,SPI1_MOSI , , , , , , ,COMP2_OUT ,DEBUG_SUBGHZSPI_MOSIOUT,TIM17_CH1 ,EVENTOUT,ADC12_IN7 +PortA,PA8 ,MCO ,TIM1_CH1 , , , ,SPI2_SCK/I2S2_CK , ,USART1_CK , , , , , , ,LPTIM2_OUT ,EVENTOUT, +PortA,PA9 , ,TIM1_CH2 , ,SPI2_NSS/I2S2_WS ,I2C1_SCL ,SPI2_SCK/I2S2_CK , ,USART1_TX , , , , , , , ,EVENTOUT, +PortA,PA10,RTC_REFIN ,TIM1_CH3 , , ,I2C1_SDA ,SPI2_MOSI/I2S2_SD, ,USART1_RX , , , , , ,DEBUG_RF_HSE32RDY ,TIM17_BKIN ,EVENTOUT, +PortA,PA11, ,TIM1_CH4 ,TIM1_BKIN2,LPTIM3_ETR ,I2C2_SDA ,SPI1_MISO , ,USART1_CTS , , , , ,TIM1_BKIN2 ,DEBUG_RF_NRESET , ,EVENTOUT, +PortA,PA12, ,TIM1_ETR , ,LPTIM3_IN1 ,I2C2_SCL ,SPI1_MOSI ,RF_BUSY,USART1_RTS , , , , , , , ,EVENTOUT, +PortA,PA13,JTMS/SWDIO , , , ,I2C2_SMBA , , , ,IR_OUT , , , , , , ,EVENTOUT, +PortA,PA14,JTCK/SWCLK ,LPTIM1_OUT , , ,I2C1_SMBA , , , , , , , , , , ,EVENTOUT, +PortA,PA15,JTDI ,TIM2_CH1 ,TIM2_ETR , ,I2C2_SDA ,SPI1_NSS , , , , , , , , , ,EVENTOUT, +PortB,PB0 , , , , , , , , , , , , ,COMP1_OUT , , ,EVENTOUT,ADC12_IN8 +PortB,PB1 , , , , , , , , ,LPUART1_RTS_DE, , , , , ,LPTIM2_IN1 ,EVENTOUT,ADC12_IN9 +PortB,PB2 , ,LPTIM1_OUT , , ,I2C3_SMBA ,SPI1_NSS , , , , , , , ,DEBUG_RF_SMPSRDY , ,EVENTOUT, +PortB,PB3 ,JTDO/TRACESWO,TIM2_CH2 , , , ,SPI1_SCK ,RF_IRQ0,USART1_RTS , , , , , ,DEBUG_RF_DTB1 , ,EVENTOUT, +PortB,PB4 ,NJTRST , , , ,I2C3_SDA ,SPI1_MISO , ,USART1_CTS , , , , , ,DEBUG_RF_LDORDY ,TIM17_BKIN ,EVENTOUT, +PortB,PB5 , ,LPTIM1_IN1 , , ,I2C1_SMBA ,SPI1_MOSI ,RF_IRQ1,USART1_CK , , , , ,COMP2_OUT , ,TIM16_BKIN ,EVENTOUT, +PortB,PB6 , ,LPTIM1_ETR , , ,I2C1_SCL , , ,USART1_TX , , , , , , ,TIM16_CH1N ,EVENTOUT, +PortB,PB7 , ,LPTIM1_IN2 , ,TIM1_BKIN ,I2C1_SDA , , ,USART1_RX , , , , , , ,TIM17_CH1N ,EVENTOUT, +PortB,PB8 , ,TIM1_CH2N , , ,I2C1_SCL , ,RF_IRQ2, , , , , , , ,TIM16_CH1 ,EVENTOUT, +PortB,PB9 , ,TIM1_CH3N , , ,I2C1_SDA ,SPI2_NSS/I2S2_WS , , ,IR_OUT , , , , , ,TIM17_CH1 ,EVENTOUT, +PortB,PB10, ,TIM2_CH3 , , ,I2C3_SCL ,SPI2_SCK/I2S2_CK , , ,LPUART1_RX , , , ,COMP1_OUT , , ,EVENTOUT, +PortB,PB11, ,TIM2_CH4 , , ,I2C3_SDA , , , ,LPUART1_TX , , , ,COMP2_OUT , , ,EVENTOUT, +PortB,PB12, ,TIM1_BKIN , ,TIM1_BKIN ,I2C3_SMBA ,SPI2_NSS/I2S2_WS , , ,LPUART1_RTS , , , , , , ,EVENTOUT, +PortB,PB13, ,TIM1_CH1N , , ,I2C3_SCL ,SPI2_SCK/I2S2_CK , , ,LPUART1_CTS , , , , , , ,EVENTOUT, +PortB,PB14, ,TIM1_CH2N , ,I2S2_MCK ,I2C3_SDA ,SPI2_MISO , , , , , , , , , ,EVENTOUT, +PortB,PB15, ,TIM1_CH3N , , ,I2C2_SCL ,SPI2_MOSI/I2S2_SD, , , , , , , , , ,EVENTOUT, +PortC,PC0 , ,LPTIM1_IN1 , , ,I2C3_SCL , , , ,LPUART1_RX , , , , , ,LPTIM2_IN1 ,EVENTOUT,ADC123_IN10 +PortC,PC1 , ,LPTIM1_OUT , ,SPI2_MOSI/I2S2_SD ,I2C3_SDA , , , ,LPUART1_TX , , , , , , ,EVENTOUT,ADC123_IN11 +PortC,PC2 , ,LPTIM1_IN2 , , , ,SPI2_MISO , , , , , , , , , ,EVENTOUT,ADC123_IN12 +PortC,PC3 , ,LPTIM1_ETR , , , ,SPI2_MOSI/I2S2_SD, , , , , , , , ,LPTIM2_ETR ,EVENTOUT,ADC123_IN13 +PortC,PC4 , , , , , , , , , , , , , , , ,EVENTOUT,ADC12_IN14 +PortC,PC5 , , , , , , , , , , , , , , , ,EVENTOUT,ADC12_IN15 +PortC,PC6 , , , , , ,I2S2_MCK , , , , , , , , , ,EVENTOUT, +PortC,PC13, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC14, , , , , , , , , , , , , , , ,EVENTOUT, +PortC,PC15, , , , , , , , , , , , , , , ,EVENTOUT, +PortH,PH3 , , , , , , , , , , , , , , , ,EVENTOUT, From b4236c7368a8f43a399b48a758f8c36063066d9b Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Wed, 9 Aug 2023 02:14:13 +1000 Subject: [PATCH 14/20] stm32: Rename pin_obj_t to machine_pin_obj_t. This is now consistent with other ports. Also renamed `pin_{board/cpu}_pins_locals_dict` to `machine_pin_{board/cpu}_pins_locals_dict`. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/stm32/adc.c | 10 ++++----- ports/stm32/boards/make-pins.py | 14 +++++++----- ports/stm32/can.c | 2 +- ports/stm32/dac.c | 2 +- ports/stm32/extint.c | 8 +++---- ports/stm32/extint.h | 4 ++-- ports/stm32/fdcan.c | 2 +- ports/stm32/lcd.c | 8 +++---- ports/stm32/led.c | 14 ++++++------ ports/stm32/machine_adc.c | 2 +- ports/stm32/mphalport.h | 4 ++-- ports/stm32/pin.c | 40 ++++++++++++++++----------------- ports/stm32/pin.h | 38 +++++++++---------------------- ports/stm32/pin_defs_stm32.c | 6 ++--- ports/stm32/pin_defs_stm32.h | 2 ++ ports/stm32/pin_named_pins.c | 12 +++++----- ports/stm32/pyb_i2c.c | 4 ++-- ports/stm32/servo.c | 2 +- ports/stm32/spi.c | 2 +- ports/stm32/timer.c | 2 +- ports/stm32/uart.c | 2 +- 21 files changed, 84 insertions(+), 96 deletions(-) diff --git a/ports/stm32/adc.c b/ports/stm32/adc.c index 6bd0f4ce25b6d..ddb8a35703bb4 100644 --- a/ports/stm32/adc.c +++ b/ports/stm32/adc.c @@ -527,7 +527,7 @@ STATIC mp_obj_t adc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_ // STM32H5 has two ADC instances where some pins are only available on ADC1 or ADC2 (but not both). // Assume we're using a channel of ADC1. Can be overridden for ADC2 later in this function. ADC_TypeDef *adc = ADC1; - const pin_obj_t *const *pin_adc_table = pin_adc1; + const machine_pin_obj_t *const *pin_adc_table = pin_adc1; uint32_t num_adc_pins = MP_ARRAY_SIZE(pin_adc1); #endif uint32_t channel; @@ -535,7 +535,7 @@ STATIC mp_obj_t adc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_ if (mp_obj_is_int(pin_obj)) { channel = adc_get_internal_channel(mp_obj_get_int(pin_obj)); } else { - const pin_obj_t *pin = pin_find(pin_obj); + const machine_pin_obj_t *pin = pin_find(pin_obj); if ((pin->adc_num & PIN_ADC_MASK) == 0) { // No ADC function on the given pin. mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("Pin(%q) doesn't have ADC capabilities"), pin->name); @@ -557,14 +557,14 @@ STATIC mp_obj_t adc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_ // If this channel corresponds to a pin then configure the pin in ADC mode. #if defined(STM32H5) if (channel < num_adc_pins) { - const pin_obj_t *pin = pin_adc_table[channel]; + const machine_pin_obj_t *pin = pin_adc_table[channel]; if (pin != NULL) { mp_hal_pin_config(pin, MP_HAL_PIN_MODE_ADC, MP_HAL_PIN_PULL_NONE, 0); } } #else if (channel < MP_ARRAY_SIZE(pin_adc_table)) { - const pin_obj_t *pin = pin_adc_table[channel]; + const machine_pin_obj_t *pin = pin_adc_table[channel]; if (pin != NULL) { mp_hal_pin_config(pin, MP_HAL_PIN_MODE_ADC, MP_HAL_PIN_PULL_NONE, 0); } @@ -862,7 +862,7 @@ void adc_init_all(pyb_adc_all_obj_t *adc_all, uint32_t resolution, uint32_t en_m // only initialise those channels that are selected with the en_mask if (en_mask & (1 << channel)) { // If this channel corresponds to a pin then configure the pin in ADC mode. - const pin_obj_t *pin = pin_adcall_table[channel]; + const machine_pin_obj_t *pin = pin_adcall_table[channel]; if (pin) { mp_hal_pin_config(pin, MP_HAL_PIN_MODE_ADC, MP_HAL_PIN_PULL_NONE, 0); } diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index 92e8d7673406a..303f2df2645e5 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -281,7 +281,7 @@ def print(self, out_source): print("};", file=out_source) print("", file=out_source) print( - "const pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s}, {:s}, {:d});".format( + "const machine_pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s}, {:s}, {:d});".format( self.cpu_pin_name(), self.port_letter(), self.pin, @@ -295,7 +295,7 @@ def print(self, out_source): def print_header(self, out_header): n = self.cpu_pin_name() - print("extern const pin_obj_t pin_{:s}_obj;".format(n), file=out_header) + print("extern const machine_pin_obj_t pin_{:s}_obj;".format(n), file=out_header) print("#define pin_{:s} (&pin_{:s}_obj)".format(n, n), file=out_header) if self.alt_fn_count > 0: print("extern const pin_af_obj_t pin_{:s}_af[];".format(n), file=out_header) @@ -381,7 +381,9 @@ def parse_board_file(self, filename): def print_named(self, label, named_pins, out_source): print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), + "STATIC const mp_rom_map_elem_t machine_pin_{:s}_pins_locals_dict_table[] = {{".format( + label + ), file=out_source, ) for named_pin in named_pins: @@ -395,7 +397,7 @@ def print_named(self, label, named_pins, out_source): ) print("};", file=out_source) print( - "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( + "MP_DEFINE_CONST_DICT(machine_pin_{:s}_pins_locals_dict, machine_pin_{:s}_pins_locals_dict_table);".format( label, label ), file=out_source, @@ -428,7 +430,7 @@ def print_adc(self, adc_num, out_source): self.adc_table_size[adc_num] = table_size print("", file=out_source) print( - "const pin_obj_t * const pin_adc{:d}[{:d}] = {{".format(adc_num, table_size), + "const machine_pin_obj_t * const pin_adc{:d}[{:d}] = {{".format(adc_num, table_size), file=out_source, ) for channel in range(table_size): @@ -447,7 +449,7 @@ def print_header(self, out_header, obj_decls): pin.print_header(out_header) for adc_num, table_size in self.adc_table_size.items(): print( - "extern const pin_obj_t * const pin_adc{:d}[{:d}];".format( + "extern const machine_pin_obj_t * const pin_adc{:d}[{:d}];".format( adc_num, table_size ), file=out_header, diff --git a/ports/stm32/can.c b/ports/stm32/can.c index bcc6983594967..9248e216c9782 100644 --- a/ports/stm32/can.c +++ b/ports/stm32/can.c @@ -65,7 +65,7 @@ bool can_init(pyb_can_obj_t *can_obj, uint32_t mode, uint32_t prescaler, uint32_ CAN_TypeDef *CANx = NULL; uint32_t sce_irq = 0; - const pin_obj_t *pins[2]; + const machine_pin_obj_t *pins[2]; switch (can_obj->can_id) { #if defined(MICROPY_HW_CAN1_TX) diff --git a/ports/stm32/dac.c b/ports/stm32/dac.c index 142b7ea387993..252af369c0087 100644 --- a/ports/stm32/dac.c +++ b/ports/stm32/dac.c @@ -324,7 +324,7 @@ STATIC mp_obj_t pyb_dac_make_new(const mp_obj_type_t *type, size_t n_args, size_ if (mp_obj_is_int(args[0])) { dac_id = mp_obj_get_int(args[0]); } else { - const pin_obj_t *pin = pin_find(args[0]); + const machine_pin_obj_t *pin = pin_find(args[0]); if (pin == pin_A4) { dac_id = 1; } else if (pin == pin_A5) { diff --git a/ports/stm32/extint.c b/ports/stm32/extint.c index 7698569149561..f6db1e632880a 100644 --- a/ports/stm32/extint.c +++ b/ports/stm32/extint.c @@ -244,7 +244,7 @@ STATIC const uint8_t nvic_irq_channel[EXTI_NUM_VECTORS] = { // Set override_callback_obj to true if you want to unconditionally set the // callback function. uint extint_register(mp_obj_t pin_obj, uint32_t mode, uint32_t pull, mp_obj_t callback_obj, bool override_callback_obj) { - const pin_obj_t *pin = NULL; + const machine_pin_obj_t *pin = NULL; uint v_line; if (mp_obj_is_int(pin_obj)) { @@ -318,7 +318,7 @@ uint extint_register(mp_obj_t pin_obj, uint32_t mode, uint32_t pull, mp_obj_t ca } // This function is intended to be used by the Pin.irq() method -void extint_register_pin(const pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj) { +void extint_register_pin(const machine_pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj) { uint32_t line = pin->pin; // Check if the ExtInt line is already in use by another Pin/ExtInt @@ -327,7 +327,7 @@ void extint_register_pin(const pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_ if (mp_obj_is_small_int(pyb_extint_callback_arg[line])) { mp_raise_msg_varg(&mp_type_OSError, MP_ERROR_TEXT("ExtInt vector %d is already in use"), line); } else { - const pin_obj_t *other_pin = MP_OBJ_TO_PTR(pyb_extint_callback_arg[line]); + const machine_pin_obj_t *other_pin = MP_OBJ_TO_PTR(pyb_extint_callback_arg[line]); mp_raise_msg_varg(&mp_type_OSError, MP_ERROR_TEXT("IRQ resource already taken by Pin('%q')"), other_pin->name); } @@ -370,7 +370,7 @@ void extint_register_pin(const pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_ } } -void extint_set(const pin_obj_t *pin, uint32_t mode) { +void extint_set(const machine_pin_obj_t *pin, uint32_t mode) { uint32_t line = pin->pin; mp_obj_t *cb = &MP_STATE_PORT(pyb_extint_callback)[line]; diff --git a/ports/stm32/extint.h b/ports/stm32/extint.h index 919e4bb2e8483..d5abb04d654e4 100644 --- a/ports/stm32/extint.h +++ b/ports/stm32/extint.h @@ -70,8 +70,8 @@ void extint_init0(void); uint extint_register(mp_obj_t pin_obj, uint32_t mode, uint32_t pull, mp_obj_t callback_obj, bool override_callback_obj); -void extint_register_pin(const pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj); -void extint_set(const pin_obj_t *pin, uint32_t mode); +void extint_register_pin(const machine_pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj); +void extint_set(const machine_pin_obj_t *pin, uint32_t mode); void extint_enable(uint line); void extint_disable(uint line); diff --git a/ports/stm32/fdcan.c b/ports/stm32/fdcan.c index bcf3e8d6a31d9..640244a3b9d8b 100644 --- a/ports/stm32/fdcan.c +++ b/ports/stm32/fdcan.c @@ -137,7 +137,7 @@ bool can_init(pyb_can_obj_t *can_obj, uint32_t mode, uint32_t prescaler, uint32_ #endif FDCAN_GlobalTypeDef *CANx = NULL; - const pin_obj_t *pins[2]; + const machine_pin_obj_t *pins[2]; switch (can_obj->can_id) { #if defined(MICROPY_HW_CAN1_TX) diff --git a/ports/stm32/lcd.c b/ports/stm32/lcd.c index e5d7f30efbd02..a78718872baed 100644 --- a/ports/stm32/lcd.c +++ b/ports/stm32/lcd.c @@ -89,10 +89,10 @@ typedef struct _pyb_lcd_obj_t { // hardware control for the LCD const spi_t *spi; - const pin_obj_t *pin_cs1; - const pin_obj_t *pin_rst; - const pin_obj_t *pin_a0; - const pin_obj_t *pin_bl; + const machine_pin_obj_t *pin_cs1; + const machine_pin_obj_t *pin_rst; + const machine_pin_obj_t *pin_a0; + const machine_pin_obj_t *pin_bl; // character buffer for stdout-like output char char_buffer[LCD_CHAR_BUF_W * LCD_CHAR_BUF_H]; diff --git a/ports/stm32/led.c b/ports/stm32/led.c index e70c22532c5b3..39b1f7e388814 100644 --- a/ports/stm32/led.c +++ b/ports/stm32/led.c @@ -47,7 +47,7 @@ typedef struct _pyb_led_obj_t { mp_obj_base_t base; mp_uint_t led_id; - const pin_obj_t *led_pin; + const machine_pin_obj_t *led_pin; } pyb_led_obj_t; STATIC const pyb_led_obj_t pyb_led_obj[] = { @@ -73,7 +73,7 @@ STATIC const pyb_led_obj_t pyb_led_obj[] = { void led_init(void) { /* Turn off LEDs and initialize */ for (int led = 0; led < NUM_LEDS; led++) { - const pin_obj_t *led_pin = pyb_led_obj[led].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led].led_pin; mp_hal_gpio_clock_enable(led_pin->gpio); MICROPY_HW_LED_OFF(led_pin); mp_hal_pin_output(led_pin); @@ -143,7 +143,7 @@ static inline bool led_pwm_is_enabled(int led) { // this function has a large stack so it should not be inlined STATIC void led_pwm_init(int led) __attribute__((noinline)); STATIC void led_pwm_init(int led) { - const pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; const led_pwm_config_t *pwm_cfg = &led_pwm_config[led - 1]; // GPIO configuration @@ -192,7 +192,7 @@ STATIC void led_pwm_init(int led) { STATIC void led_pwm_deinit(int led) { // make the LED's pin a standard GPIO output pin - const pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; GPIO_TypeDef *g = led_pin->gpio; uint32_t pin = led_pin->pin; static const int mode = 1; // output @@ -211,7 +211,7 @@ void led_state(pyb_led_t led, int state) { return; } - const pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; if (state == 0) { // turn LED off MICROPY_HW_LED_OFF(led_pin); @@ -241,7 +241,7 @@ void led_toggle(pyb_led_t led) { #endif // toggle the output data register to toggle the LED state - const pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; led_pin->gpio->ODR ^= led_pin->pin_mask; } @@ -261,7 +261,7 @@ int led_get_intensity(pyb_led_t led) { } #endif - const pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; + const machine_pin_obj_t *led_pin = pyb_led_obj[led - 1].led_pin; GPIO_TypeDef *gpio = led_pin->gpio; if (gpio->ODR & led_pin->pin_mask) { diff --git a/ports/stm32/machine_adc.c b/ports/stm32/machine_adc.c index 4b644e6c97113..91094427b86cc 100644 --- a/ports/stm32/machine_adc.c +++ b/ports/stm32/machine_adc.c @@ -571,7 +571,7 @@ STATIC mp_obj_t mp_machine_adc_make_new(const mp_obj_type_t *type, size_t n_args sample_time = ADC_SAMPLETIME_DEFAULT_INT; } } else { - const pin_obj_t *pin = pin_find(source); + const machine_pin_obj_t *pin = pin_find(source); if (pin->adc_num & PIN_ADC1) { #if defined(STM32WL) adc = ADC; diff --git a/ports/stm32/mphalport.h b/ports/stm32/mphalport.h index 2757d39841306..410aa5a8deeb9 100644 --- a/ports/stm32/mphalport.h +++ b/ports/stm32/mphalport.h @@ -90,7 +90,7 @@ static inline mp_uint_t mp_hal_ticks_cpu(void) { #define MP_HAL_PIN_SPEED_HIGH (GPIO_SPEED_FREQ_HIGH) #define MP_HAL_PIN_SPEED_VERY_HIGH (GPIO_SPEED_FREQ_VERY_HIGH) -#define mp_hal_pin_obj_t const pin_obj_t * +#define mp_hal_pin_obj_t const machine_pin_obj_t * #define mp_hal_get_pin_obj(o) pin_find(o) #define mp_hal_pin_name(p) ((p)->name) #define mp_hal_pin_input(p) mp_hal_pin_config((p), MP_HAL_PIN_MODE_INPUT, MP_HAL_PIN_PULL_NONE, 0) @@ -114,7 +114,7 @@ void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio); void mp_hal_pin_config(mp_hal_pin_obj_t pin, uint32_t mode, uint32_t pull, uint32_t alt); bool mp_hal_pin_config_alt(mp_hal_pin_obj_t pin, uint32_t mode, uint32_t pull, uint8_t fn, uint8_t unit); void mp_hal_pin_config_speed(mp_hal_pin_obj_t pin_obj, uint32_t speed); -void extint_register_pin(const pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj); +void extint_register_pin(const machine_pin_obj_t *pin, uint32_t mode, bool hard_irq, mp_obj_t callback_obj); mp_obj_base_t *mp_hal_get_spi_obj(mp_obj_t spi_in); diff --git a/ports/stm32/pin.c b/ports/stm32/pin.c index f2db0e20e84f9..599d61de41682 100644 --- a/ports/stm32/pin.c +++ b/ports/stm32/pin.c @@ -97,10 +97,10 @@ void pin_init0(void) { } // C API used to convert a user-supplied pin name into an ordinal pin number. -const pin_obj_t *pin_find(mp_obj_t user_obj) { +const machine_pin_obj_t *pin_find(mp_obj_t user_obj) { const mp_print_t *print = &mp_plat_print; - const pin_obj_t *pin_obj; + const machine_pin_obj_t *pin_obj; // If a pin was provided, then use it if (mp_obj_is_type(user_obj, &pin_type)) { @@ -149,7 +149,7 @@ const pin_obj_t *pin_find(mp_obj_t user_obj) { } // See if the pin name matches a board pin - pin_obj = pin_find_named_pin(&pin_board_pins_locals_dict, user_obj); + pin_obj = pin_find_named_pin(&machine_pin_board_pins_locals_dict, user_obj); if (pin_obj) { if (pin_class_debug) { mp_printf(print, "Pin.board maps "); @@ -162,7 +162,7 @@ const pin_obj_t *pin_find(mp_obj_t user_obj) { } // See if the pin name matches a cpu pin - pin_obj = pin_find_named_pin(&pin_cpu_pins_locals_dict, user_obj); + pin_obj = pin_find_named_pin(&machine_pin_cpu_pins_locals_dict, user_obj); if (pin_obj) { if (pin_class_debug) { mp_printf(print, "Pin.cpu maps "); @@ -180,7 +180,7 @@ const pin_obj_t *pin_find(mp_obj_t user_obj) { /// \method __str__() /// Return a string describing the pin object. STATIC void pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); // pin name mp_printf(print, "Pin(Pin.cpu.%q, mode=Pin.", self->name); @@ -238,7 +238,7 @@ STATIC void pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t } } -STATIC mp_obj_t pin_obj_init_helper(const pin_obj_t *pin, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args); +STATIC mp_obj_t pin_obj_init_helper(const machine_pin_obj_t *pin, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args); /// \classmethod \constructor(id, ...) /// Create a new Pin object associated with the id. If additional arguments are given, @@ -247,7 +247,7 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true); // Run an argument through the mapper and return the result. - const pin_obj_t *pin = pin_find(args[0]); + const machine_pin_obj_t *pin = pin_find(args[0]); if (n_args > 1 || n_kw > 0) { // pin mode given, so configure this GPIO @@ -265,7 +265,7 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, // fast method for getting/setting pin value STATIC mp_obj_t pin_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); if (n_args == 0) { // get pin return MP_OBJ_NEW_SMALL_INT(mp_hal_pin_read(self)); @@ -303,7 +303,7 @@ STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ(pin_map_dict_obj, MP_ROM_PTR(&pin_map_dic /// \classmethod af_list() /// Returns an array of alternate functions available for this pin. STATIC mp_obj_t pin_af_list(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); mp_obj_t result = mp_obj_new_list(0, NULL); const pin_af_obj_t *af = self->af; @@ -327,7 +327,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_debug_fun_obj, 1, 2, pin_debug); STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ(pin_debug_obj, MP_ROM_PTR(&pin_debug_fun_obj)); // init(mode, pull=None, alt=-1, *, value, alt) -STATIC mp_obj_t pin_obj_init_helper(const pin_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { +STATIC mp_obj_t pin_obj_init_helper(const machine_pin_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { static const mp_arg_t allowed_args[] = { { MP_QSTR_mode, MP_ARG_REQUIRED | MP_ARG_INT }, { MP_QSTR_pull, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE}}, @@ -402,14 +402,14 @@ STATIC mp_obj_t pin_value(size_t n_args, const mp_obj_t *args) { STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_value_obj, 1, 2, pin_value); STATIC mp_obj_t pin_off(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); mp_hal_pin_low(self); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_off_obj, pin_off); STATIC mp_obj_t pin_on(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); mp_hal_pin_high(self); return mp_const_none; } @@ -423,7 +423,7 @@ STATIC mp_obj_t pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar { MP_QSTR_trigger, MP_ARG_INT, {.u_int = GPIO_MODE_IT_RISING | GPIO_MODE_IT_FALLING} }, { MP_QSTR_hard, MP_ARG_BOOL, {.u_bool = false} }, }; - pin_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -441,7 +441,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pin_irq_obj, 1, pin_irq); /// \method name() /// Get the pin name. STATIC mp_obj_t pin_name(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_NEW_QSTR(self->name); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_name_obj, pin_name); @@ -449,11 +449,11 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_name_obj, pin_name); /// \method names() /// Returns the cpu and board names for this pin. STATIC mp_obj_t pin_names(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); mp_obj_t result = mp_obj_new_list(0, NULL); mp_obj_list_append(result, MP_OBJ_NEW_QSTR(self->name)); - const mp_map_t *map = &pin_board_pins_locals_dict.map; + const mp_map_t *map = &machine_pin_board_pins_locals_dict.map; mp_map_elem_t *elem = map->table; for (mp_uint_t i = 0; i < map->used; i++, elem++) { @@ -468,7 +468,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_names_obj, pin_names); /// \method port() /// Get the pin port. STATIC mp_obj_t pin_port(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_NEW_SMALL_INT(self->port); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_port_obj, pin_port); @@ -476,7 +476,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_port_obj, pin_port); /// \method pin() /// Get the pin number. STATIC mp_obj_t pin_pin(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_NEW_SMALL_INT(self->pin); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_pin_obj, pin_pin); @@ -484,7 +484,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_pin_obj, pin_pin); /// \method gpio() /// Returns the base address of the GPIO block associated with this pin. STATIC mp_obj_t pin_gpio(mp_obj_t self_in) { - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_NEW_SMALL_INT((intptr_t)self->gpio); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_gpio_obj, pin_gpio); @@ -572,7 +572,7 @@ STATIC MP_DEFINE_CONST_DICT(pin_locals_dict, pin_locals_dict_table); STATIC mp_uint_t pin_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) { (void)errcode; - pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); switch (request) { case MP_PIN_READ: { diff --git a/ports/stm32/pin.h b/ports/stm32/pin.h index 2397a9d48ee95..d16c176380262 100644 --- a/ports/stm32/pin.h +++ b/ports/stm32/pin.h @@ -53,7 +53,7 @@ typedef struct { uint32_t pin_mask; pin_gpio_t *gpio; const pin_af_obj_t *af; -} pin_obj_t; +} machine_pin_obj_t; extern const mp_obj_type_t pin_type; extern const mp_obj_type_t pin_af_type; @@ -61,38 +61,22 @@ extern const mp_obj_type_t pin_af_type; // Include all of the individual pin objects #include "genhdr/pins.h" -typedef struct { - const char *name; - const pin_obj_t *pin; -} pin_named_pin_t; - -extern const pin_named_pin_t pin_board_pins[]; -extern const pin_named_pin_t pin_cpu_pins[]; - -// extern pin_map_obj_t pin_map_obj; - -typedef struct { - mp_obj_base_t base; - qstr name; - const pin_named_pin_t *named_pins; -} pin_named_pins_obj_t; - extern const mp_obj_type_t pin_board_pins_obj_type; extern const mp_obj_type_t pin_cpu_pins_obj_type; -extern const mp_obj_dict_t pin_cpu_pins_locals_dict; -extern const mp_obj_dict_t pin_board_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_board_pins_locals_dict; MP_DECLARE_CONST_FUN_OBJ_KW(pin_init_obj); void pin_init0(void); -uint32_t pin_get_mode(const pin_obj_t *pin); -uint32_t pin_get_pull(const pin_obj_t *pin); -uint32_t pin_get_af(const pin_obj_t *pin); -const pin_obj_t *pin_find(mp_obj_t user_obj); -const pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name); -const pin_af_obj_t *pin_find_af(const pin_obj_t *pin, uint8_t fn, uint8_t unit); -const pin_af_obj_t *pin_find_af_by_index(const pin_obj_t *pin, mp_uint_t af_idx); -const pin_af_obj_t *pin_find_af_by_name(const pin_obj_t *pin, const char *name); +uint32_t pin_get_mode(const machine_pin_obj_t *pin); +uint32_t pin_get_pull(const machine_pin_obj_t *pin); +uint32_t pin_get_af(const machine_pin_obj_t *pin); +const machine_pin_obj_t *pin_find(mp_obj_t user_obj); +const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name); +const pin_af_obj_t *pin_find_af(const machine_pin_obj_t *pin, uint8_t fn, uint8_t unit); +const pin_af_obj_t *pin_find_af_by_index(const machine_pin_obj_t *pin, mp_uint_t af_idx); +const pin_af_obj_t *pin_find_af_by_name(const machine_pin_obj_t *pin, const char *name); #endif // MICROPY_INCLUDED_STM32_PIN_H diff --git a/ports/stm32/pin_defs_stm32.c b/ports/stm32/pin_defs_stm32.c index 070005d217d36..8a946fdd3cf9d 100644 --- a/ports/stm32/pin_defs_stm32.c +++ b/ports/stm32/pin_defs_stm32.c @@ -5,7 +5,7 @@ // GPIO_MODE_INPUT, GPIO_MODE_OUTPUT_PP, GPIO_MODE_OUTPUT_OD, // GPIO_MODE_AF_PP, GPIO_MODE_AF_OD, or GPIO_MODE_ANALOG. -uint32_t pin_get_mode(const pin_obj_t *pin) { +uint32_t pin_get_mode(const machine_pin_obj_t *pin) { GPIO_TypeDef *gpio = pin->gpio; uint32_t mode = (gpio->MODER >> (pin->pin * 2)) & 3; if (mode == GPIO_MODE_OUTPUT_PP || mode == GPIO_MODE_AF_PP) { @@ -19,12 +19,12 @@ uint32_t pin_get_mode(const pin_obj_t *pin) { // Returns the pin pullup/pulldown. The value returned by this macro should // be one of GPIO_NOPULL, GPIO_PULLUP, or GPIO_PULLDOWN. -uint32_t pin_get_pull(const pin_obj_t *pin) { +uint32_t pin_get_pull(const machine_pin_obj_t *pin) { return (pin->gpio->PUPDR >> (pin->pin * 2)) & 3; } // Returns the af (alternate function) index currently set for a pin. -uint32_t pin_get_af(const pin_obj_t *pin) { +uint32_t pin_get_af(const machine_pin_obj_t *pin) { return (pin->gpio->AFR[pin->pin >> 3] >> ((pin->pin & 7) * 4)) & 0xf; } diff --git a/ports/stm32/pin_defs_stm32.h b/ports/stm32/pin_defs_stm32.h index 1f950c1179833..6c67b6492422b 100644 --- a/ports/stm32/pin_defs_stm32.h +++ b/ports/stm32/pin_defs_stm32.h @@ -133,6 +133,8 @@ enum { PIN_ADC1 = (1 << 0), PIN_ADC2 = (1 << 1), PIN_ADC3 = (1 << 2), + PIN_ADC4 = (1 << 3), + PIN_ADC5 = (1 << 4), }; typedef GPIO_TypeDef pin_gpio_t; diff --git a/ports/stm32/pin_named_pins.c b/ports/stm32/pin_named_pins.c index 8eeb4ed32b118..7a27158a6dcfa 100644 --- a/ports/stm32/pin_named_pins.c +++ b/ports/stm32/pin_named_pins.c @@ -35,17 +35,17 @@ MP_DEFINE_CONST_OBJ_TYPE( pin_cpu_pins_obj_type, MP_QSTR_cpu, MP_TYPE_FLAG_NONE, - locals_dict, &pin_cpu_pins_locals_dict + locals_dict, &machine_pin_cpu_pins_locals_dict ); MP_DEFINE_CONST_OBJ_TYPE( pin_board_pins_obj_type, MP_QSTR_board, MP_TYPE_FLAG_NONE, - locals_dict, &pin_board_pins_locals_dict + locals_dict, &machine_pin_board_pins_locals_dict ); -const pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name) { +const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name) { const mp_map_t *named_map = &named_pins->map; mp_map_elem_t *named_elem = mp_map_lookup((mp_map_t *)named_map, name, MP_MAP_LOOKUP); if (named_elem != NULL && named_elem->value != MP_OBJ_NULL) { @@ -54,7 +54,7 @@ const pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t na return NULL; } -const pin_af_obj_t *pin_find_af(const pin_obj_t *pin, uint8_t fn, uint8_t unit) { +const pin_af_obj_t *pin_find_af(const machine_pin_obj_t *pin, uint8_t fn, uint8_t unit) { const pin_af_obj_t *af = pin->af; for (mp_uint_t i = 0; i < pin->num_af; i++, af++) { if (af->fn == fn && af->unit == unit) { @@ -64,7 +64,7 @@ const pin_af_obj_t *pin_find_af(const pin_obj_t *pin, uint8_t fn, uint8_t unit) return NULL; } -const pin_af_obj_t *pin_find_af_by_index(const pin_obj_t *pin, mp_uint_t af_idx) { +const pin_af_obj_t *pin_find_af_by_index(const machine_pin_obj_t *pin, mp_uint_t af_idx) { const pin_af_obj_t *af = pin->af; for (mp_uint_t i = 0; i < pin->num_af; i++, af++) { if (af->idx == af_idx) { @@ -75,7 +75,7 @@ const pin_af_obj_t *pin_find_af_by_index(const pin_obj_t *pin, mp_uint_t af_idx) } /* unused -const pin_af_obj_t *pin_find_af_by_name(const pin_obj_t *pin, const char *name) { +const pin_af_obj_t *pin_find_af_by_name(const machine_pin_obj_t *pin, const char *name) { const pin_af_obj_t *af = pin->af; for (mp_uint_t i = 0; i < pin->num_af; i++, af++) { if (strcmp(name, qstr_str(af->name)) == 0) { diff --git a/ports/stm32/pyb_i2c.c b/ports/stm32/pyb_i2c.c index 915eabe0b2f8c..fa38ef372dabe 100644 --- a/ports/stm32/pyb_i2c.c +++ b/ports/stm32/pyb_i2c.c @@ -290,8 +290,8 @@ void i2c_init0(void) { int pyb_i2c_init(I2C_HandleTypeDef *i2c) { int i2c_unit; - const pin_obj_t *scl_pin; - const pin_obj_t *sda_pin; + const machine_pin_obj_t *scl_pin; + const machine_pin_obj_t *sda_pin; if (0) { #if defined(MICROPY_HW_I2C1_SCL) diff --git a/ports/stm32/servo.c b/ports/stm32/servo.c index e0aa2d6b69f83..07cc4eab88536 100644 --- a/ports/stm32/servo.c +++ b/ports/stm32/servo.c @@ -48,7 +48,7 @@ typedef struct _pyb_servo_obj_t { mp_obj_base_t base; - const pin_obj_t *pin; + const machine_pin_obj_t *pin; uint8_t pulse_min; // units of 10us uint8_t pulse_max; // units of 10us uint8_t pulse_centre; // units of 10us diff --git a/ports/stm32/spi.c b/ports/stm32/spi.c index 7b89b48b53e9e..47714a28725ba 100644 --- a/ports/stm32/spi.c +++ b/ports/stm32/spi.c @@ -341,7 +341,7 @@ void spi_set_params(const spi_t *spi_obj, uint32_t prescale, int32_t baudrate, int spi_init(const spi_t *self, bool enable_nss_pin) { SPI_HandleTypeDef *spi = self->spi; uint32_t irqn = 0; - const pin_obj_t *pins[4] = { NULL, NULL, NULL, NULL }; + const machine_pin_obj_t *pins[4] = { NULL, NULL, NULL, NULL }; if (0) { #if defined(MICROPY_HW_SPI1_SCK) diff --git a/ports/stm32/timer.c b/ports/stm32/timer.c index c15b84fe54f95..41e5c6157d5ac 100644 --- a/ports/stm32/timer.c +++ b/ports/stm32/timer.c @@ -1199,7 +1199,7 @@ STATIC mp_obj_t pyb_timer_channel(size_t n_args, const mp_obj_t *pos_args, mp_ma if (!mp_obj_is_type(pin_obj, &pin_type)) { mp_raise_ValueError(MP_ERROR_TEXT("pin argument needs to be be a Pin type")); } - const pin_obj_t *pin = MP_OBJ_TO_PTR(pin_obj); + const machine_pin_obj_t *pin = MP_OBJ_TO_PTR(pin_obj); const pin_af_obj_t *af = pin_find_af(pin, AF_FN_TIM, self->tim_id); if (af == NULL) { mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("Pin(%q) doesn't have an alt for Timer(%d)"), pin->name, self->tim_id); diff --git a/ports/stm32/uart.c b/ports/stm32/uart.c index 0d648a6fc1aeb..83e9e0fdd8597 100644 --- a/ports/stm32/uart.c +++ b/ports/stm32/uart.c @@ -250,7 +250,7 @@ bool uart_init(machine_uart_obj_t *uart_obj, uint8_t uart_fn = AF_FN_UART; int uart_unit; - const pin_obj_t *pins[4] = {0}; + const machine_pin_obj_t *pins[4] = {0}; switch (uart_obj->uart_id) { #if defined(MICROPY_HW_UART1_TX) && defined(MICROPY_HW_UART1_RX) From 724ebb9916d2e29595fc2098e6ae1e7c4f1e3f52 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Wed, 9 Aug 2023 02:14:13 +1000 Subject: [PATCH 15/20] stm32/boards/make-pins.py: Update to use tools/boardgen.py. Requires additions to tools/boardgen.py for stm32 pin generation. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/stm32/boards/make-pins.py | 802 ++++++++++++-------------------- tools/boardgen.py | 78 +++- 2 files changed, 370 insertions(+), 510 deletions(-) diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index 303f2df2645e5..10472a093f661 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -1,59 +1,17 @@ #!/usr/bin/env python -""" -Generates pin source files based on an MCU alternate-function definition (eg -stm32f405_af.csv) and a board-specific pin definition file, pins.csv. -The pins.csv file can contain empty lines, comments (a line beginning with "#") -or pin definition lines. Pin definition lines must be of the form: - - board,cpu - -Where "board" is the user-facing name of the pin as specified by the particular -board layout and markings, and "cpu" is the corresponding name of the CPU/MCU -pin. - -The "board" entry may be absent if the CPU pin has no additional name, and both -entries may start with "-" to hide them from the corresponding Python dict of -pins, and hence hide them from the user (but they are still accessible in C). - -For example, take the following pins.csv file: - - X1,PA0 - -X2,PA1 - X3,-PA2 - -X4,-PA3 - ,PA4 - ,-PA5 - -The first row here configures: -- The CPU pin PA0 is labelled X1. -- The Python user can access both by the names Pin("X1") and Pin("A0"). -- The Python user can access both by the members Pin.board.X1 and Pin.cpu.A0. -- In C code they are available as pyb_pin_X1 and pin_A0. - -Prefixing the names with "-" hides them from the user. The following table -summarises the various possibilities: - - pins.csv entry | board name | cpu name | C board name | C cpu name - ---------------+------------+----------+--------------+----------- - X1,PA0 "X1" "A0" pyb_pin_X1 pin_A0 - -X2,PA1 - "A1" pyb_pin_X2 pin_A1 - X3,-PA2 "X3" - pyb_pin_X3 pin_A2 - -X4,-PA3 - - pyb_pin_X4 pin_A3 - ,PA4 - "A4" - pin_A4 - ,-PA5 - - - pin_A5 - -""" +from collections import defaultdict, namedtuple +import os +import re +import sys -from __future__ import print_function +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen -import argparse -import sys -import csv # Must have matching entries in AF_FN_* enum in ../pin_defs_stm32.h -SUPPORTED_FN = { +SUPPORTED_AF = { "TIM": ["CH1", "CH2", "CH3", "CH4", "CH1N", "CH2N", "CH3N", "CH1_ETR", "ETR", "BKIN"], "I2C": ["SDA", "SCL"], "I2S": ["CK", "MCK", "SD", "WS", "EXTSD"], @@ -65,6 +23,8 @@ "CAN": ["TX", "RX"], } +# Only make these AFs available if we actually enable those peripherals (by +# assigning default pins in mpconfigboard.h). CONDITIONAL_VAR = { "I2C": "MICROPY_HW_I2C{num}_SCL", "I2S": "MICROPY_HW_I2S{num}", @@ -76,487 +36,337 @@ "CAN": "MICROPY_HW_CAN{num}_TX", } +# Contains the result of parsing an cell from af.csv. +PinAf = namedtuple( + "PinAf", + [ + "af_idx", # int, 0-15 + "af_fn", # e.g. "I2C" + "af_unit", # int, e.g. 1 (for I2C1) or None (for OTG_HS_ULPI_CK) + "af_pin", # e.g. "SDA" + "af_supported", # bool, see table above + "af_name", # e.g. "I2C1_SDA" + ], +) + + +class Stm32Pin(boardgen.Pin): + def __init__(self, cpu_pin_name): + super().__init__(cpu_pin_name) + + # P (already verified by validate_cpu_pin_name). + self._port = cpu_pin_name[1] + self._pin = int(cpu_pin_name[2:]) + + # List of PinAf instances. + self._afs = [] + + # The channel that this pin uses on each of the listed units. + self._adc_channel = 0 + # e.g. ADC123 -> [1,2,3] + self._adc_units = [] + + # Called for each AF defined in the csv file for this pin. e.g. "SPI2_NSS/I2S2_WS" + def add_af(self, af_idx, af_name, af): + if af_idx > 16: + # The AF csv files should not have more than 16 AFs + 1 ADC list. + return -def parse_port_pin(name_str): - """Parses a string and returns a (port-num, pin-num) tuple.""" - if len(name_str) < 3: - raise ValueError("Expecting pin name to be at least 3 characters.") - if name_str[0] != "P": - raise ValueError("Expecting pin name to start with P") - if name_str[1] < "A" or name_str[1] > "K": - raise ValueError("Expecting pin port to be between A and K") - port = ord(name_str[1]) - ord("A") - pin_str = name_str[2:] - if not pin_str.isdigit(): - raise ValueError("Expecting numeric pin number.") - return (port, int(pin_str)) - - -def split_name_num(name_num): - num = None - for num_idx in range(len(name_num) - 1, -1, -1): - if not name_num[num_idx].isdigit(): - name = name_num[0 : num_idx + 1] - num_str = name_num[num_idx + 1 :] - if len(num_str) > 0: - num = int(num_str) - break - return name, num - - -def conditional_var(name_num): - # Try the specific instance first. For example, if name_num is UART4_RX - # then try UART4 first, and then try UART second. - name, num = split_name_num(name_num) - var = [] - if name in CONDITIONAL_VAR: - var.append(CONDITIONAL_VAR[name].format(num=num)) - if name_num in CONDITIONAL_VAR: - var.append(CONDITIONAL_VAR[name_num]) - return var - - -def print_conditional_if(cond_var, file): - if cond_var: - cond_str = [] - for var in cond_var: - if var.find("ENABLE") >= 0: - cond_str.append("(defined({0}) && {0})".format(var)) - else: - cond_str.append("defined({0})".format(var)) - print("#if " + " || ".join(cond_str), file=file) - - -def print_conditional_endif(cond_var, file): - if cond_var: - print("#endif", file=file) - - -class AlternateFunction(object): - """Holds the information associated with a pins alternate function.""" - - def __init__(self, idx, af_str): - self.idx = idx - # Special case. We change I2S2ext_SD into I2S2_EXTSD so that it parses - # the same way the other peripherals do. - af_str = af_str.replace("ext_", "_EXT") - - self.af_str = af_str - - self.func = "" - self.fn_num = None - self.pin_type = "" - self.supported = False - - af_words = af_str.split("_", 1) - self.func, self.fn_num = split_name_num(af_words[0]) - if len(af_words) > 1: - self.pin_type = af_words[1] - if self.func in SUPPORTED_FN: - pin_types = SUPPORTED_FN[self.func] - if self.pin_type in pin_types: - self.supported = True - - def is_supported(self): - return self.supported - - def ptr(self): - """Returns the numbered function (i.e. USART6) for this AF.""" - if self.fn_num is None: - return self.func - return "{:s}{:d}".format(self.func, self.fn_num) - - def mux_name(self): - return "AF{:d}_{:s}".format(self.idx, self.ptr()) - - def print(self, out_source): - """Prints the C representation of this AF.""" - cond_var = None - if self.supported: - cond_var = conditional_var("{}{}".format(self.func, self.fn_num)) - print_conditional_if(cond_var, file=out_source) - print(" AF", end="", file=out_source) - else: - print(" //", end="", file=out_source) - fn_num = self.fn_num - if fn_num is None: - fn_num = 0 - print( - "({:2d}, {:8s}, {:2d}, {:10s}, {:8s}), // {:s}".format( - self.idx, self.func, fn_num, self.pin_type, self.ptr(), self.af_str - ), - file=out_source, - ) - print_conditional_endif(cond_var, file=out_source) - - -class Pin(object): - """Holds the information associated with a pin.""" + # AF 16 is the ADC, which is special cased below. + if af_idx == 16: + if af_name != "ADC": + raise boardgen.PinGeneratorError( + "Invalid AF column name '{:s}' for ADC column with index {:d}.".format( + af_name, af_idx + ) + ) + return self.add_adc(af) - def __init__(self, port, pin): - self.port = port - self.pin = pin - self.alt_fn = [] - self.alt_fn_count = 0 - self.adc_num = 0 - self.adc_channel = 0 - self.board_pin = False + if af_name != "AF{:d}".format(af_idx): + raise boardgen.PinGeneratorError( + "Invalid AF column name '{:s}' for AF index {:d}.".format(af_name, af_idx) + ) - def port_letter(self): - return chr(self.port + ord("A")) + # If there is a slash, then the slash separates multiple aliases for + # the same alternate function. + for af_name in af.split("/"): + if not af_name.strip(): + continue + # This matches _, with consideration for: + # - fn may contain a digit (e.g. I2C) + # - there may be an "ext" after the unit + m = re.match("([A-Z0-9]+[A-Z])(([0-9]+)(ext)?)?(_(.*))?", af_name) + if not m: + raise boardgen.PinGeneratorError( + "Invalid af '{:s}' for pin '{:s}'".format(af_name, self.name()) + ) + else: + af_fn = m.group(1) + af_unit = int(m.group(3)) if m.group(3) is not None else None + af_ext = m.group(4) == "ext" + af_pin = m.group(6) - def cpu_pin_name(self): - return "{:s}{:d}".format(self.port_letter(), self.pin) + # Special case. We change I2S2ext_SD into I2S2_EXTSD so that it parses + # the same way the other peripherals do. + if af_ext: + af_pin = "EXT" + af_pin - def is_board_pin(self): - return self.board_pin + af_supported = af_fn in SUPPORTED_AF and af_pin in SUPPORTED_AF[af_fn] - def set_is_board_pin(self): - self.board_pin = True + self._afs.append(PinAf(af_idx, af_fn, af_unit, af_pin, af_supported, af_name)) - def parse_adc(self, adc_str): - if adc_str[:3] != "ADC": + # ADCs are slash separated "ADC_", where unit=1,2,3,4,5 and mode=IN,INN,INP + def add_adc(self, adc): + if not adc.strip(): return - adc, channel = None, None - if adc_str.find("_INP") != -1: - # STM32H7xx, entries have the form: ADCxx_IN[PN]yy/... - sep = "_INP" - else: - # all other MCUs, entries have the form: ADCxx_INyy - sep = "_IN" - - # Pick the entry with the most ADC peripherals - for ss in adc_str.split("/"): - if ss.find(sep) != -1: - a, c = ss.split("_") - if adc is None or len(a) > len(adc): - adc, channel = a, c - if adc is None: - return - channel = channel[len(sep) - 1 :] + # TODO: This needs to be improved to support the case where a pin can + # be the P for one channel, and the N for a different channel. + # e.g. "ADC123_INP12/ADC123_INN11". + for adc_name in adc.split("/"): + m = re.match("ADC([1-5]+)_(IN[NP]?)([0-9]+)$", adc_name) + if not m: + raise boardgen.PinGeneratorError( + "Invalid adc '{:s}' for pin '{:s}'".format(adc_name, self.name()) + ) + adc_units = [int(x) for x in m.group(1)] + _adc_mode = m.group(2) + adc_channel = int(m.group(3)) + + # Pick the entry with the most ADC units, e.g. "ADC1_INP16/ADC12_INN1/ADC12_INP0" --> "ADC12_INN1". + if len(adc_units) > len(self._adc_units): + self._adc_units = adc_units + self._adc_channel = adc_channel + + # STM32-specific behavior, strip the "P" from the start of the name when emitting this pin. + # e.g. the #define is pin_A11 not pin_PA11. Fortunately we don't have to special case this + # as there are no places where emit the full "PA11" name. + def name(self): + return self._cpu_pin_name[1:] + + # Use the PIN() macro defined in stm32f4xx_prefix.c for defining the pin + # objects. + def definition(self): + # Generate bitfield of supported ADC units where lsb is unit 1 (e.g. [1,3] --> 0b101). + adc_units_bitfield = ( + " | ".join("PIN_ADC{}".format(unit) for unit in self._adc_units) or "0" + ) - for idx in range(3, len(adc)): - adc_num = int(adc[idx]) # 1, 2, or 3 - self.adc_num |= 1 << (adc_num - 1) - self.adc_channel = int(channel) + # PIN(p_port, p_pin, p_af, p_adc_num, p_adc_channel) + return "PIN({:s}, {:d}, pin_{:s}_af, {:s}, {:d})".format( + self._port, self._pin, self.name(), adc_units_bitfield, self._adc_channel + ) - def parse_af(self, af_idx, af_strs_in): - if len(af_strs_in) == 0: - return - # If there is a slash, then the slash separates 2 aliases for the - # same alternate function. - af_strs = af_strs_in.split("/") - for af_str in af_strs: - alt_fn = AlternateFunction(af_idx, af_str) - self.alt_fn.append(alt_fn) - if alt_fn.is_supported(): - self.alt_fn_count += 1 - - def alt_fn_name(self, null_if_0=False): - if null_if_0 and self.alt_fn_count == 0: - return "NULL" - return "pin_{:s}_af".format(self.cpu_pin_name()) - - def adc_num_str(self): - str = "" - for adc_num in range(1, 4): - if self.adc_num & (1 << (adc_num - 1)): - if len(str) > 0: - str += " | " - str += "PIN_ADC" - str += chr(ord("0") + adc_num) - if len(str) == 0: - str = "0" - return str - - def print(self, out_source): - if self.alt_fn_count == 0: - print("// ", end="", file=out_source) - print("const pin_af_obj_t {:s}[] = {{".format(self.alt_fn_name()), file=out_source) - for alt_fn in self.alt_fn: - alt_fn.print(out_source) - if self.alt_fn_count == 0: - print("// ", end="", file=out_source) + # This will be called at the start of the output (after the prefix). Use + # it to emit the af objects (via the AF() macro). + def print_source(self, out_source): + print(file=out_source) + print("const pin_af_obj_t pin_{:s}_af[] = {{".format(self.name()), file=out_source) + for af in self._afs: + if af.af_fn in CONDITIONAL_VAR: + print( + " #if defined({:s})".format( + CONDITIONAL_VAR[af.af_fn].format(num=af.af_unit) + ), + file=out_source, + ) + if af.af_supported: + print(" ", end="", file=out_source) + else: + print(" // ", end="", file=out_source) + # AF(af_idx, af_fn, af_unit, af_type, af_ptr) + print( + "AF({:d}, {:s}, {:d}, {:s}, {:s}{:s}), // {:s}".format( + af.af_idx, + af.af_fn, + af.af_unit or 0, + af.af_pin or "NONE", + af.af_fn, + "" if af.af_unit is None else str(af.af_unit), + af.af_name, + ), + file=out_source, + ) + if af.af_fn in CONDITIONAL_VAR: + print(" #endif", file=out_source) print("};", file=out_source) - print("", file=out_source) - print( - "const machine_pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s}, {:s}, {:d});".format( - self.cpu_pin_name(), - self.port_letter(), - self.pin, - self.alt_fn_name(null_if_0=True), - self.adc_num_str(), - self.adc_channel, - ), - file=out_source, - ) - print("", file=out_source) - def print_header(self, out_header): - n = self.cpu_pin_name() - print("extern const machine_pin_obj_t pin_{:s}_obj;".format(n), file=out_header) - print("#define pin_{:s} (&pin_{:s}_obj)".format(n, n), file=out_header) - if self.alt_fn_count > 0: - print("extern const pin_af_obj_t pin_{:s}_af[];".format(n), file=out_header) - - -class NamedPin(object): - def __init__(self, name, pin): - if name.startswith("-"): - self._is_hidden = True - self._name = name[1:] - else: - self._is_hidden = False - self._name = name - self._pin = pin + # STM32 cpu names must be "P". + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) - def set_hidden(self, value): - self._is_hidden = value + if not re.match("P[A-K][0-9]+$", cpu_pin_name): + raise boardgen.PinGeneratorError("Invalid cpu pin name '{}'".format(cpu_pin_name)) - def is_hidden(self): - return self._is_hidden - def pin(self): - return self._pin +class Stm32PinGenerator(boardgen.PinGenerator): + def __init__(self): + # Use custom pin type above, and also enable the --af-csv argument so + # that add_af gets called on each pin. + super().__init__( + pin_type=Stm32Pin, + enable_af=True, + ) - def name(self): - return self._name + # STM32-specific behavior, we use pin_A0 for the cpu names, but + # pyb_pin_X11 for the board names. + def board_name_define_prefix(self): + return "pyb_" + + # Override the default implementation just to change the default arguments + # (extra header row, skip first column). + def parse_af_csv(self, filename): + return super().parse_af_csv(filename, header_rows=2, pin_col=1, af_col=2) + + # Find which ADCs are used on this chip and on how many pins and the + # maximum channel number for each. + def count_adc_pins(self): + adc_units = defaultdict(lambda: (0, 0)) + for pin in self._pins: # All pins + for unit in pin._adc_units: + num, max_channel = adc_units[unit] + if pin._available: + adc_units[unit] = num + 1, max(max_channel, pin._adc_channel) + return adc_units.items() + + # Print table of pins for each ADC (indexed by channel). + def print_adcs(self, out_source): + for adc_unit, (num_pins, max_channel) in self.count_adc_pins(): + print(file=out_source) + print( + "const machine_pin_obj_t * const pin_adc{:d}[{:d}] = {{".format( + adc_unit, max_channel + 1 + ), + file=out_source, + ) + # Don't include pins that weren't in pins.csv. + for pin in self.available_pins(): + if adc_unit in pin._adc_units: + print( + " [{:d}] = {:s},".format(pin._adc_channel, self._cpu_pin_pointer(pin)), + file=out_source, + ) + print("};", file=out_source) + # Print externs for the adc pin tables. + def print_adc_externs(self, out_source): + print(file=out_source) + for adc_unit, (num_pins, max_channel) in self.count_adc_pins(): + print( + "extern const machine_pin_obj_t * const pin_adc{:d}[{:d}];".format( + adc_unit, max_channel + 1 + ), + file=out_source, + ) -class Pins(object): - def __init__(self): - self.cpu_pins = [] # list of NamedPin objects - self.board_pins = [] # list of NamedPin objects - self.adc_table_size = {} # maps ADC number X to size of pin_adcX table - - 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 named_pin - - def parse_af_file(self, filename, pinname_col, af_col): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - try: - (port_num, pin_num) = parse_port_pin(row[pinname_col]) - except: - continue - pin = Pin(port_num, pin_num) - for af_idx in range(af_col, len(row)): - if af_idx < af_col + 16: - pin.parse_af(af_idx - af_col, row[af_idx]) - elif af_idx == af_col + 16: - pin.parse_adc(row[af_idx]) - 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: - if len(row) == 0 or row[0].startswith("#"): - # Skip empty lines, and lines starting with "#" - continue - if len(row) != 2: - raise ValueError("Expecting two entries in a row") - - cpu_pin_name = row[1] - cpu_pin_hidden = False - if cpu_pin_name.startswith("-"): - cpu_pin_name = cpu_pin_name[1:] - cpu_pin_hidden = True - try: - (port_num, pin_num) = parse_port_pin(cpu_pin_name) - except: - continue - named_pin = self.find_pin(port_num, pin_num) - if named_pin: - named_pin.set_hidden(cpu_pin_hidden) - pin = named_pin.pin() - pin.set_is_board_pin() - if row[0]: # Only add board pins that have a name - self.board_pins.append(NamedPin(row[0], pin)) - - def print_named(self, label, named_pins, out_source): - print( - "STATIC const mp_rom_map_elem_t machine_pin_{:s}_pins_locals_dict_table[] = {{".format( - label - ), - file=out_source, - ) - for named_pin in named_pins: - pin = named_pin.pin() - if pin.is_board_pin() and not named_pin.is_hidden(): - print( - " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}_obj) }},".format( - named_pin.name(), pin.cpu_pin_name() - ), - file=out_source, - ) - print("};", file=out_source) - print( - "MP_DEFINE_CONST_DICT(machine_pin_{:s}_pins_locals_dict, machine_pin_{:s}_pins_locals_dict_table);".format( - label, label - ), - file=out_source, - ) + # Append ADC definitions to the end of the source output. + def print_source(self, out_source): + super().print_source(out_source) + self.print_adcs(out_source) - def print(self, out_source): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin.print(out_source) - self.print_named("cpu", self.cpu_pins, out_source) - print("", file=out_source) - self.print_named("board", self.board_pins, out_source) - - def print_adc(self, adc_num, out_source): - adc_pins = {} - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if ( - pin.is_board_pin() - and not named_pin.is_hidden() - and (pin.adc_num & (1 << (adc_num - 1))) - ): - adc_pins[pin.adc_channel] = pin - if adc_pins: - table_size = max(adc_pins) + 1 + # Append ADC externs to the end of the header output, and don't include + # externs in mboot mode. + def print_header(self, out_header): + if self.args.mboot_mode: + self.print_defines(out_header, cpu=False) else: - # If ADCx pins are hidden, print an empty table to prevent linker errors. - table_size = 0 - self.adc_table_size[adc_num] = table_size - print("", file=out_source) - print( - "const machine_pin_obj_t * const pin_adc{:d}[{:d}] = {{".format(adc_num, table_size), - file=out_source, - ) - for channel in range(table_size): - if channel in adc_pins: - obj = "&pin_{:s}_obj".format(adc_pins[channel].cpu_pin_name()) - else: - obj = "NULL" - print(" [{:d}] = {},".format(channel, obj), file=out_source) - print("};", file=out_source) + super().print_header(out_header) + self.print_adc_externs(out_header) + + # This is a set of map entries `MP_QSTR_AF_` -> `GPIO_AF_` + # that become part of the locals dict of machine.Pin. + def print_af_const(self, out_af_const): + # Extract all unique "AF_" values. + names = set() + for pin in self.available_pins(): + for af in pin._afs: + if not af.af_supported: + continue + key = ( + "AF{:d}_{:s}{:d}".format(af.af_idx, af.af_fn, af.af_unit), + af.af_fn, + af.af_unit, + ) + names.add(key) - def print_header(self, out_header, obj_decls): - if obj_decls: - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin.print_header(out_header) - for adc_num, table_size in self.adc_table_size.items(): + # Generate the table. + for key in sorted(names): + name, af_fn, af_unit = key + if af_fn in CONDITIONAL_VAR: print( - "extern const machine_pin_obj_t * const pin_adc{:d}[{:d}];".format( - adc_num, table_size - ), - file=out_header, + " #if defined({:s})".format(CONDITIONAL_VAR[af_fn].format(num=af_unit)), + file=out_af_const, ) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: print( - "#define pyb_pin_{:s} pin_{:s}".format( - named_pin.name(), named_pin.pin().cpu_pin_name() + " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_INT(GPIO_{:s}) }},".format(name, name), + file=out_af_const, + ) + if af_fn in CONDITIONAL_VAR: + print(" #endif", file=out_af_const) + + # Output macros to compile-time match a pin object to its AF. See + # mp_hal_pin_config_alt_static and mp_hal_pin_config_alt_static_speed in + # pin_static_af.h. + def print_af_defs(self, out_af_defs): + # Get the set of unique "_" (e.g. I2C1_SDA) and which + # pins can be used for each. + af_defs = defaultdict(list) + for pin in self._pins: + for af in pin._afs: + key = af.af_fn, af.af_unit, af.af_pin + af_defs[key].append((pin, af.af_idx)) + + # Emit a macro for each that will match a pin object to the + # corresponding af index for that pin doing that function. + for key, pins in af_defs.items(): + af_fn, af_unit, af_pin = key + print(file=out_af_defs) + print( + "#define STATIC_AF_{:s}{:s}_{:s}(pin_obj) ( \\".format( + af_fn, "" if af_unit is None else str(af_unit), af_pin or "NULL" ), - file=out_header, + file=out_af_defs, ) - - def print_af_hdr(self, out_af_const): - af_hdr_set = set([]) - mux_name_width = 0 - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - for af in pin.alt_fn: - if af.is_supported(): - mux_name = af.mux_name() - af_hdr_set |= set([mux_name]) - if len(mux_name) > mux_name_width: - mux_name_width = len(mux_name) - for mux_name in sorted(af_hdr_set): - af_words = mux_name.split("_") # ex mux_name: AF9_I2C2 - cond_var = conditional_var(af_words[1]) - print_conditional_if(cond_var, file=out_af_const) - key = "MP_ROM_QSTR(MP_QSTR_{}),".format(mux_name) - val = "MP_ROM_INT(GPIO_{})".format(mux_name) - print(" { %-*s %s }," % (mux_name_width + 26, key, val), file=out_af_const) - print_conditional_endif(cond_var, file=out_af_const) - - def print_af_defs(self, out_af_defs, cmp_strings): - STATIC_AF_TOKENS = {} - for named_pin in self.cpu_pins: - for af in named_pin.pin().alt_fn: - func = "%s%d" % (af.func, af.fn_num) if af.fn_num else af.func - pin_type = (af.pin_type or "NULL").split("(")[0] - tok = "#define STATIC_AF_%s_%s(pin_obj) ( \\" % (func, pin_type) - if tok not in STATIC_AF_TOKENS: - STATIC_AF_TOKENS[tok] = [] - if cmp_strings: - pin_name = named_pin.pin().cpu_pin_name() - cmp_str = ( - ' ((strcmp( #pin_obj , "(&pin_%s_obj)") ' - ' & strcmp( #pin_obj , "((&pin_%s_obj))")) == 0) ? (%d) : \\' - % (pin_name, pin_name, af.idx) + for pin, af_idx in pins: + if self.args.mboot_mode: + print( + " ((pin_obj) == (pin_{:s})) ? ({:d}) : \\".format(pin.name(), af_idx), + file=out_af_defs, ) else: - cmp_str = " ((pin_obj) == (pin_%s)) ? (%d) : \\" % ( - named_pin.pin().cpu_pin_name(), - af.idx, + # Match either "(pin_A11_obj)" (if using pin_A11 or + # pyb_pin_X11) or "((pin_A11_obj))" (if going via another + # macro e.g. MICROPY_HW_QSPIFLASH_CS). + # TODO: Why do we need do do string matching? (i.e. why can't the mboot behavior be used always?). + print( + ' ((strcmp( #pin_obj , "(&pin_{:s}_obj)") & strcmp( #pin_obj , "((&pin_{:s}_obj))")) == 0) ? ({:d}) : \\'.format( + pin.name(), pin.name(), af_idx + ), + file=out_af_defs, ) - STATIC_AF_TOKENS[tok].append(cmp_str) - - for tok, pins in STATIC_AF_TOKENS.items(): - print(tok, file=out_af_defs) - print("\n".join(sorted(pins)), file=out_af_defs) - print(" (0xffffffffffffffffULL))\n", file=out_af_defs) - - -def main(): - parser = argparse.ArgumentParser(description="Generate board specific pin file") - parser.add_argument("--board-csv") - parser.add_argument("--af-csv") - parser.add_argument("--prefix") - parser.add_argument("--output-source") - parser.add_argument("--output-header") - parser.add_argument("--output-af-const") - parser.add_argument("--output-af-defs") - parser.add_argument("--mboot-mode", action="store_true") - args = parser.parse_args() - - pins = Pins() - - with open(args.output_source, "w") as out_source: - print("// This file was automatically generated by make-pins.py", file=out_source) - print("//", file=out_source) - if args.af_csv: - print("// --af {:s}".format(args.af_csv), file=out_source) - pins.parse_af_file(args.af_csv, 1, 2) - - if args.board_csv: - print("// --board {:s}".format(args.board_csv), file=out_source) - pins.parse_board_file(args.board_csv) - - if args.prefix: - print("// --prefix {:s}".format(args.prefix), file=out_source) - print("", file=out_source) - with open(args.prefix, "r") as prefix_file: - print(prefix_file.read(), file=out_source) + print(" (0xffffffffffffffffULL))", file=out_af_defs) - pins.print(out_source) - for i in range(1, 4): - pins.print_adc(i, out_source) + # Additional stm32-specific outputs that will be written in + # generate_extra_files(). + def extra_args(self, parser): + parser.add_argument("--output-af-const") + parser.add_argument("--output-af-defs") - with open(args.output_header, "w") as out_header: - pins.print_header(out_header, not args.mboot_mode) + # In mboot mode the af-defs use object rather than string comparison, + # and we don't include externs in the header file. + parser.add_argument("--mboot-mode", action="store_true") - with open(args.output_af_const, "w") as out_af_const: - pins.print_af_hdr(out_af_const) + # Called in main() after everything else is done to write additional files. + def generate_extra_files(self): + if self.args.output_af_const: + with open(self.args.output_af_const, "w") as out_af_const: + self.print_af_const(out_af_const) - with open(args.output_af_defs, "w") as out_af_defs: - pins.print_af_defs(out_af_defs, not args.mboot_mode) + if self.args.output_af_defs: + with open(self.args.output_af_defs, "w") as out_af_defs: + self.print_af_defs(out_af_defs) if __name__ == "__main__": - main() + Stm32PinGenerator().main() diff --git a/tools/boardgen.py b/tools/boardgen.py index bef8e74727097..caa9fe851c768 100644 --- a/tools/boardgen.py +++ b/tools/boardgen.py @@ -344,8 +344,13 @@ def print_cpu_locals_dict(self, out_source): def _cpu_pin_pointer(self, pin): return "&pin_{:s}_obj".format(pin.name()) + # Allow a port to prefix the board pin macro names with something. + # e.g. STM32 does pyb_pin_NAME whereas other ports using pin_NAME. + def board_name_define_prefix(self): + return "" + # Print the pin_CPUNAME and pin_BOARDNAME macros. - def print_defines(self, out_header): + def print_defines(self, out_header, cpu=True, board=True): # Provide #defines for each cpu pin. for pin in self.available_pins(): print(file=out_header) @@ -354,29 +359,70 @@ def print_defines(self, out_header): print("#if {}".format(m), file=out_header) # #define pin_CPUNAME (...) - print( - "#define pin_{:s} ({:s})".format(pin.name(), self._cpu_pin_pointer(pin)), - file=out_header, - ) - - # #define pin_BOARDNAME (pin_CPUNAME) - for board_pin_name, _board_hidden in pin._board_pin_names: - # Note: Hidden board pins are still available to C via the macro. + if cpu: print( - "#define pin_{:s} (pin_{:s})".format( - board_pin_name, - pin.name(), - ), + "#define pin_{:s} ({:s})".format(pin.name(), self._cpu_pin_pointer(pin)), file=out_header, ) + # #define pin_BOARDNAME (pin_CPUNAME) + if board: + for board_pin_name, _board_hidden in pin._board_pin_names: + # Note: Hidden board pins are still available to C via the macro. + # Note: The RHS isn't wrapped in (), which is necessary to make the + # STATIC_AF_ macro work on STM32. + print( + "#define {:s}pin_{:s} pin_{:s}".format( + self.board_name_define_prefix(), + board_pin_name, + pin.name(), + ), + file=out_header, + ) + + if m: + print("#endif", file=out_header) + + def print_pin_objects(self, out_source): + print(file=out_source) + for pin in self.available_pins(): + m = pin.enable_macro() + if m: + print("#if {}".format(m), file=out_source) + print( + "{:s}machine_pin_obj_t pin_{:s}_obj = {:s};".format( + "const " if pin.is_const() else "", + pin.name(), + pin.definition(), + ), + file=out_source, + ) + if m: + print("#endif", file=out_source) + + def print_pin_object_externs(self, out_header): + print(file=out_header) + for pin in self.available_pins(): + m = pin.enable_macro() + if m: + print("#if {}".format(m), file=out_header) + print( + "extern {:s}machine_pin_obj_t pin_{:s}_obj;".format( + "const " if pin.is_const() else "", + pin.name(), + ), + file=out_header, + ) if m: print("#endif", file=out_header) def print_source(self, out_source): - raise NotImplementedError + self.print_pin_objects(out_source) + self.print_cpu_locals_dict(out_source) + self.print_board_locals_dict(out_source) def print_header(self, out_header): + self.print_pin_object_externs(out_header) self.print_defines(out_header) # A port can override this if it has extra input files (e.g. af.csv) to load. @@ -498,6 +544,10 @@ def print_source(self, out_source): self.print_cpu_table(out_source) self.print_board_locals_dict(out_source) + # Replace PinGenerator's implementation to only print the defines. + def print_header(self, out_header): + self.print_defines(out_header) + def _cpu_pin_pointer(self, pin): n = pin.index_name() if n is not None: From ff6c2adfd74b6b2382414bfd6a931ffce4da92bd Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 2 Nov 2023 15:16:28 +1100 Subject: [PATCH 16/20] stm32/boards/make-pins.py: Add initial support for H7 dual-pad pins. This fixes the H7 af.csv files to include the dual-pad information, by listing the ADCs supported on the _C pad with a C_ADC prefix. Minimal change to make-pins.py to ignore these entries. This will be implemented later to emit constants (similar to ADC.CORE_TEMP) to access these channels. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/stm32/boards/make-pins.py | 5 +++++ ports/stm32/boards/stm32h723_af.csv | 4 ++-- ports/stm32/boards/stm32h743_af.csv | 8 ++++---- ports/stm32/boards/stm32h7b3_af.csv | 24 ++++++++++++------------ 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py index 10472a093f661..31e7bdb0e2f29 100755 --- a/ports/stm32/boards/make-pins.py +++ b/ports/stm32/boards/make-pins.py @@ -124,6 +124,11 @@ def add_adc(self, adc): # be the P for one channel, and the N for a different channel. # e.g. "ADC123_INP12/ADC123_INN11". for adc_name in adc.split("/"): + if adc_name.startswith("C_"): + # Currently unsupported, H7 dual-pad. The C_ADC entries should + # only be available directly from machine.ADC (not via the pin + # object). + continue m = re.match("ADC([1-5]+)_(IN[NP]?)([0-9]+)$", adc_name) if not m: raise boardgen.PinGeneratorError( diff --git a/ports/stm32/boards/stm32h723_af.csv b/ports/stm32/boards/stm32h723_af.csv index aa873797863cd..71873e670b3d0 100644 --- a/ports/stm32/boards/stm32h723_af.csv +++ b/ports/stm32/boards/stm32h723_af.csv @@ -34,8 +34,8 @@ PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SDO ,DFSDM1_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , ,FMC_D11/FMC_AD11 , ,LCD_G7 ,EVENTOUT, PortC,PC0 , ,FMC_D12/FMC_AD12 , ,DFSDM1_CKIN0 , , ,DFSDM1_DATIN4 , ,SAI4_FS_B ,FMC_A25 ,OTG_HS_ULPI_STP ,LCD_G2 ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_INP10 PortC,PC1 ,TRACED0 ,SAI4_D1 ,SAI1_D1 ,DFSDM1_DATIN0 ,DFSDM1_CKIN4 ,SPI2_MOSI/I2S2_SDO ,SAI1_SD_A , ,SAI4_SD_A ,SDMMC2_CK ,OCTOSPIM_P1_IO4 ,ETH_MDC ,MDIOS_MDC , ,LCD_G5 ,EVENTOUT,ADC123_INP11/ADC123_INN10 -PortC,PC2 ,PWR_DEEPSLEEP, , ,DFSDM1_CKIN1 ,OCTOSPIM_P1_IO5 ,SPI2_MISO/I2S2_SDI ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INP12/ADC123_INN11 -PortC,PC3 ,PWR_SLEEP , , ,DFSDM1_DATIN1 ,OCTOSPIM_P1_IO6 ,SPI2_MOSI/I2S2_SDO , , , ,OCTOSPIM_P1_IO0 ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC123_INP13/ADC123_INN12 +PortC,PC2 ,PWR_DEEPSLEEP, , ,DFSDM1_CKIN1 ,OCTOSPIM_P1_IO5 ,SPI2_MISO/I2S2_SDI ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INP12/ADC123_INN11/C_ADC3_INN1/C_ADC3_INP0 +PortC,PC3 ,PWR_SLEEP , , ,DFSDM1_DATIN1 ,OCTOSPIM_P1_IO6 ,SPI2_MOSI/I2S2_SDO , , , ,OCTOSPIM_P1_IO0 ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INP13/ADC12_INN12/C_ADC3_INP1 PortC,PC4 ,PWR_DEEPSLEEP,FMC_A22 , ,DFSDM1_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX1_IN3 ,SDMMC2_CKIN ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , ,LCD_R7 ,EVENTOUT,ADC12_INP4 PortC,PC5 ,PWR_SLEEP ,SAI4_D3 ,SAI1_D3 ,DFSDM1_DATIN2 ,PSSI_D15 , , , , ,SPDIFRX1_IN4 ,OCTOSPIM_P1_DQS ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 ,COMP1_OUT ,LCD_DE ,EVENTOUT,ADC12_INP8/ADC12_INN4 PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,DFSDM1_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0/PSSI_D0 ,LCD_HSYNC ,EVENTOUT, diff --git a/ports/stm32/boards/stm32h743_af.csv b/ports/stm32/boards/stm32h743_af.csv index 2287209c49001..4a291265c48fb 100644 --- a/ports/stm32/boards/stm32h743_af.csv +++ b/ports/stm32/boards/stm32h743_af.csv @@ -1,7 +1,7 @@ Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC , ,SYS ,TIM1/2/16/17/LPTIM1/HRTIM1,SAI1/TIM3/4/5/12/HRTIM1,LPUART/TIM8/LPTIM2/3/4/5/HRTIM1/DFSDM,I2C1/2/3/4/USART1/TIM15/LPTIM2/DFSDM/CEC,SPI1/2/3/4/5/6/CEC,SPI2/3/SAI1/3/I2C4/UART4/DFSDM,SPI2/3/6/USART1/2/3/6/UART7/SDMMC1,SPI6/SAI2/4/UART4/5/8/LPUART/SDMMC1/SPDIFRX,SAI4/FDCAN1/2/TIM13/14/QUADSPI/FMC/SDMMC2/LCD/SPDIFRX,SAI2/4/TIM8/QUADSPI/SDMMC2/OTG1_HS/OTG2_FS/LCD,I2C4/UART7/SWPMI1/TIM1/8/DFSDM/SDMMC2/MDIOS/ETH,TIM1/8/FMC/SDMMC1/MDIOS/OTG1_FS/LCD,TIM1/DCMI/LCD/COMP,UART5/LCD,SYS ,ADC -PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN , , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B ,ETH_MII_CRS , , , ,EVENTOUT,ADC1_INP16/ADC12_INN1/ADC12_INP0 -PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK , , ,LCD_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17/ADC12_INP1 +PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN , , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B ,ETH_MII_CRS , , , ,EVENTOUT,ADC1_INP16/C_ADC12_INN1/C_ADC12_INP0 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_RTS ,UART4_RX ,QUADSPI_BK1_IO3 ,SAI2_MCK_B ,ETH_MII_RX_CLK/ETH_RMII_REF_CLK , , ,LCD_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17/C_ADC12_INP1 PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 ,LPTIM4_OUT ,TIM15_CH1 , , ,USART2_TX ,SAI2_SCK_B , , ,ETH_MDIO ,MDIOS_MDIO , ,LCD_R1 ,EVENTOUT,ADC12_INP14 PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,LPTIM5_OUT ,TIM15_CH2 , , ,USART2_RX , ,LCD_B2 ,OTG_HS_ULPI_D0 ,ETH_MII_COL , , ,LCD_B5 ,EVENTOUT,ADC12_INP15 PortA,PA4 , , ,TIM5_ETR , , ,SPI1_NSS/I2S1_WS ,SPI3_NSS/I2S3_WS ,USART2_CK ,SPI6_NSS , , , ,OTG_HS_SOF ,DCMI_HSYNC ,LCD_VSYNC,EVENTOUT,ADC12_INP18 @@ -34,8 +34,8 @@ PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8 PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,SPI2_MOSI/I2S2_SDO,DFSDM_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , ,OTG_HS_DP , , ,EVENTOUT, PortC,PC0 , , , ,DFSDM_CKIN0 , , ,DFSDM_DATIN4 , ,SAI2_FS_B , ,OTG_HS_ULPI_STP , ,FMC_SDNWE , ,LCD_R5 ,EVENTOUT,ADC123_INP10 PortC,PC1 ,TRACED0 , ,SAI1_D1 ,DFSDM_DATIN0 ,DFSDM_CKIN4 ,SPI2_MOSI/I2S2_SDO,SAI1_SD_A , ,SAI4_SD_A ,SDMMC2_CK ,SAI4_D1 ,ETH_MDC ,MDIOS_MDC , , ,EVENTOUT,ADC123_INN10/ADC123_INP11 -PortC,PC2 , , , ,DFSDM_CKIN1 , ,SPI2_MISO/I2S2_SDI,DFSDM_CKOUT , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INN11/ADC123_INP12/ADC3_INN1/ADC3_INP0 -PortC,PC3 , , , ,DFSDM_DATIN1 , ,SPI2_MOSI/I2S2_SDO, , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INN12/ADC12_INP13/ADC3_INP1 +PortC,PC2 , , , ,DFSDM_CKIN1 , ,SPI2_MISO/I2S2_SDI,DFSDM_CKOUT , , , ,OTG_HS_ULPI_DIR ,ETH_MII_TXD2 ,FMC_SDNE0 , , ,EVENTOUT,ADC123_INN11/ADC123_INP12/C_ADC3_INN1/C_ADC3_INP0 +PortC,PC3 , , , ,DFSDM_DATIN1 , ,SPI2_MOSI/I2S2_SDO, , , , ,OTG_HS_ULPI_NXT ,ETH_MII_TX_CLK ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INN12/ADC12_INP13/C_ADC3_INP1 PortC,PC4 , , , ,DFSDM_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX_IN2 , ,ETH_MII_RXD0/ETH_RMII_RXD0 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_INP4 PortC,PC5 , , ,SAI1_D3 ,DFSDM_DATIN2 , , , , , ,SPDIFRX_IN3 ,SAI4_D3 ,ETH_MII_RXD1/ETH_RMII_RXD1 ,FMC_SDCKE0 ,COMP_1_OUT , ,EVENTOUT,ADC12_INN4/ADC12_INP8 PortC,PC6 , ,HRTIM_CHA1 ,TIM3_CH1 ,TIM8_CH1 ,DFSDM_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0 ,LCD_HSYNC,EVENTOUT, diff --git a/ports/stm32/boards/stm32h7b3_af.csv b/ports/stm32/boards/stm32h7b3_af.csv index 0846689a0769d..1acef21f37e56 100644 --- a/ports/stm32/boards/stm32h7b3_af.csv +++ b/ports/stm32/boards/stm32h7b3_af.csv @@ -1,13 +1,13 @@ Port ,Pin ,AF0 ,AF1 ,AF2 ,AF3 ,AF4 ,AF5 ,AF6 ,AF7 ,AF8 ,AF9 ,AF10 ,AF11 ,AF12 ,AF13 ,AF14 ,AF15 ,ADC , ,SYS ,LPTIM1/TIM1/2/16/17,PDM_SAI1/TIM3/4/5/12/15,DFSDM1/LPTIM2/3/LPUART1/OCTOSPIM_P1/2/TIM8,CEC/DCMI/PSSI/DFSDM1/2/I2C1/2/3/4/LPTIM2/TIM15/USART1,CEC/SPI1/I2S1/SPI2/I2S2/SPI3/I2S3/SPI4/5/SPI6/I2S6,DFSDM1/2/I2C4/OCTOSPIM_P1/SAI1/SPI3/I2S3/UART4,SDMMC1/SPI2/I2S2/SPI3/I2S3/SPI6/I2S6/UART7/USART1/2/3/6,LPUART1/SAI2/SDMMC1/SPDIFRX1/SPI6/I2S6/UART4/5/8,FDCAN1/2/FMC/LCD/OCTOSPIM_P1/2/SDMMC2/SPDIFRX1/TIM13/14,CRS/FMC/LCD/OCTOSPIM_P1/OTG1_FS/OTG1_HS/SAI2/SDMMC2/TIM8,DFSDM1/2/I2C4/LCD/MDIOS/OCTOSPIM_P1/SDMMC2/SWPMI1/TIM1/8/UART7/9/USART10,FMC/LCD/MDIOS/SDMMC1/TIM1/8 ,COMP/DCMI/PSSI/LCD/TIM1 ,LCD/UART5 ,SYS ,ADC -PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN ,I2S6_WS/SPI6_NSS , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B , , , , ,EVENTOUT,ADC1_INP16 -PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_DE/USART2_RTS ,UART4_RX ,OCTOSPIM_P1_IO3 ,SAI2_MCLK_B ,OCTOSPIM_P1_DQS , , ,LTDC_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17 +PortA,PA0 , ,TIM2_CH1/TIM2_ETR ,TIM5_CH1 ,TIM8_ETR ,TIM15_BKIN ,I2S6_WS/SPI6_NSS , ,USART2_CTS/USART2_NSS ,UART4_TX ,SDMMC2_CMD ,SAI2_SD_B , , , , ,EVENTOUT,ADC1_INP16/C_ADC1_INP0/C_ADC1_INN1 +PortA,PA1 , ,TIM2_CH2 ,TIM5_CH2 ,LPTIM3_OUT ,TIM15_CH1N , , ,USART2_DE/USART2_RTS ,UART4_RX ,OCTOSPIM_P1_IO3 ,SAI2_MCLK_B ,OCTOSPIM_P1_DQS , , ,LTDC_R2 ,EVENTOUT,ADC1_INN16/ADC1_INP17/C_ADC1_INP1 PortA,PA2 , ,TIM2_CH3 ,TIM5_CH3 , ,TIM15_CH1 , ,DFSDM2_CKIN1 ,USART2_TX ,SAI2_SCK_B , , , ,MDIOS_MDIO , ,LTDC_R1 ,EVENTOUT,ADC1_INP14 PortA,PA3 , ,TIM2_CH4 ,TIM5_CH4 ,OCTOSPIM_P1_CLK ,TIM15_CH2 ,I2S6_MCK , ,USART2_RX , ,LTDC_B2 ,USB_OTG_HS_ULPI_D0 , , , ,LTDC_B5 ,EVENTOUT,ADC1_INP15 PortA,PA4 , , ,TIM5_ETR , , ,I2S1_WS/SPI1_NSS ,I2S3_WS/SPI3_NSS ,USART2_CK ,I2S6_WS/SPI6_NSS , , , , ,DCMI_HSYNC/PSSI_DE ,LTDC_VSYNC,EVENTOUT,ADC1_INP18 PortA,PA5 ,PWR_NDSTOP2 ,TIM2_CH1/TIM2_ETR , ,TIM8_CH1N , ,I2S1_CK/SPI1_SCK , , ,I2S6_CK/SPI6_SCK , ,USB_OTG_HS_ULPI_CK , , ,PSSI_D14 ,LTDC_R4 ,EVENTOUT,ADC1_INN18/ADC1_INP19 -PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,I2S1_SDI/SPI1_MISO ,OCTOSPIM_P1_IO3 , ,I2S6_SDI/SPI6_MISO ,TIM13_CH1 ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,MDIOS_MDC ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2 ,DCMI_PIXCLK/PSSI_PDCK ,LTDC_G2 ,EVENTOUT,ADC1_INP3/ADC2_INP3 -PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N ,DFSDM2_DATIN1 ,I2S1_SDO/SPI1_MOSI , , ,I2S6_SDO/SPI6_MOSI ,TIM14_CH1 ,OCTOSPIM_P1_IO2 , ,FMC_SDNWE , ,LTDC_VSYNC,EVENTOUT,ADC1_INN3/ADC1_INP7/ADC2_INN3/ADC2_INP7 +PortA,PA6 , ,TIM1_BKIN ,TIM3_CH1 ,TIM8_BKIN , ,I2S1_SDI/SPI1_MISO ,OCTOSPIM_P1_IO3 , ,I2S6_SDI/SPI6_MISO ,TIM13_CH1 ,TIM8_BKIN_COMP1/TIM8_BKIN_COMP2 ,MDIOS_MDC ,TIM1_BKIN_COMP1/TIM1_BKIN_COMP2 ,DCMI_PIXCLK/PSSI_PDCK ,LTDC_G2 ,EVENTOUT,ADC12_INP3 +PortA,PA7 , ,TIM1_CH1N ,TIM3_CH2 ,TIM8_CH1N ,DFSDM2_DATIN1 ,I2S1_SDO/SPI1_MOSI , , ,I2S6_SDO/SPI6_MOSI ,TIM14_CH1 ,OCTOSPIM_P1_IO2 , ,FMC_SDNWE , ,LTDC_VSYNC,EVENTOUT,ADC12_INN3/ADC12_INP7 PortA,PA8 ,RCC_MCO_1 ,TIM1_CH1 , ,TIM8_BKIN2 ,I2C3_SCL , , ,USART1_CK , , ,USB_OTG_HS_SOF ,UART7_RX ,TIM8_BKIN2_COMP1/TIM8_BKIN2_COMP2,LTDC_B3 ,LTDC_R6 ,EVENTOUT, PortA,PA9 , ,TIM1_CH2 , ,LPUART1_TX ,I2C3_SMBA ,I2S2_CK/SPI2_SCK , ,USART1_TX , , , , , ,DCMI_D0/PSSI_D0 ,LTDC_R5 ,EVENTOUT, PortA,PA10, ,TIM1_CH3 , ,LPUART1_RX , , , ,USART1_RX , , ,USB_OTG_HS_ID ,MDIOS_MDIO ,LTDC_B4 ,DCMI_D1/PSSI_D1 ,LTDC_B1 ,EVENTOUT, @@ -16,8 +16,8 @@ PortA,PA12, ,TIM1_ETR , ,LPUART1_ PortA,PA13,DEBUG_JTMS/SWDIO, , , , , , , , , , , , , , ,EVENTOUT, PortA,PA14,DEBUG_JTCK/SWCLK, , , , , , , , , , , , , , ,EVENTOUT, PortA,PA15,DEBUG_JTDI ,TIM2_CH1/TIM2_ETR , , ,CEC ,I2S1_WS/SPI1_NSS ,I2S3_WS/SPI3_NSS ,I2S6_WS/SPI6_NSS ,UART4_DE/UART4_RTS ,LTDC_R3 , ,UART7_TX , , ,LTDC_B6 ,EVENTOUT, -PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N ,DFSDM2_CKOUT , ,DFSDM1_CKOUT , ,UART4_CTS ,LTDC_R3 ,USB_OTG_HS_ULPI_D1 ,OCTOSPIM_P1_IO1 , , ,LTDC_G1 ,EVENTOUT,ADC1_INN5/ADC1_INP9/ADC2_INN5/ADC2_INP9 -PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM1_DATIN1 , , ,LTDC_R6 ,USB_OTG_HS_ULPI_D2 ,OCTOSPIM_P1_IO0 , , ,LTDC_G0 ,EVENTOUT,ADC1_INP5/ADC2_INP5 +PortB,PB0 , ,TIM1_CH2N ,TIM3_CH3 ,TIM8_CH2N ,DFSDM2_CKOUT , ,DFSDM1_CKOUT , ,UART4_CTS ,LTDC_R3 ,USB_OTG_HS_ULPI_D1 ,OCTOSPIM_P1_IO1 , , ,LTDC_G1 ,EVENTOUT,ADC12_INN5/ADC12_INP9 +PortB,PB1 , ,TIM1_CH3N ,TIM3_CH4 ,TIM8_CH3N , , ,DFSDM1_DATIN1 , , ,LTDC_R6 ,USB_OTG_HS_ULPI_D2 ,OCTOSPIM_P1_IO0 , , ,LTDC_G0 ,EVENTOUT,ADC12_INP5 PortB,PB2 ,RTC_OUT_ALARM , ,SAI1_D1 , ,DFSDM1_CKIN1 , ,SAI1_SD_A ,I2S3_SDO/SPI3_MOSI , ,OCTOSPIM_P1_CLK ,OCTOSPIM_P1_DQS , , , , ,EVENTOUT, PortB,PB3 ,DEBUG_JTDO/SWO ,TIM2_CH2 , , , ,I2S1_CK/SPI1_SCK ,I2S3_CK/SPI3_SCK , ,I2S6_CK/SPI6_SCK ,SDMMC2_D2 ,CRS_SYNC ,UART7_RX , , , ,EVENTOUT, PortB,PB4 , ,TIM16_BKIN ,TIM3_CH1 , , ,I2S1_SDI/SPI1_MISO ,I2S3_SDI/SPI3_MISO ,I2S2_WS/SPI2_NSS ,I2S6_SDI/SPI6_MISO ,SDMMC2_D3 , ,UART7_TX , , , ,EVENTOUT, @@ -32,12 +32,12 @@ PortB,PB12, ,TIM1_BKIN , ,OCTOSPIM PortB,PB13, ,TIM1_CH1N , ,LPTIM2_OUT ,DFSDM2_CKIN1 ,I2S2_CK/SPI2_SCK ,DFSDM1_CKIN1 ,USART3_CTS/USART3_NSS , ,FDCAN2_TX ,USB_OTG_HS_ULPI_D6 , ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 ,UART5_TX ,EVENTOUT, PortB,PB14, ,TIM1_CH2N ,TIM12_CH1 ,TIM8_CH2N ,USART1_TX ,I2S2_SDI/SPI2_MISO ,DFSDM1_DATIN2 ,USART3_DE/USART3_RTS ,UART4_DE/UART4_RTS ,SDMMC2_D0 , , , , ,LTDC_CLK ,EVENTOUT, PortB,PB15,RTC_REFIN ,TIM1_CH3N ,TIM12_CH2 ,TIM8_CH3N ,USART1_RX ,I2S2_SDO/SPI2_MOSI ,DFSDM1_CKIN2 , ,UART4_CTS ,SDMMC2_D1 , , , , ,LTDC_G7 ,EVENTOUT, -PortC,PC0 , , , ,DFSDM1_CKIN0 , , ,DFSDM1_DATIN4 , ,SAI2_FS_B ,FMC_A25 ,USB_OTG_HS_ULPI_STP ,LTDC_G2 ,FMC_SDNWE , ,LTDC_R5 ,EVENTOUT,ADC1_INP10/ADC2_INP10 -PortC,PC1 ,DEBUG_TRACED0 , ,SAI1_D1 ,DFSDM1_DATIN0 ,DFSDM1_CKIN4 ,I2S2_SDO/SPI2_MOSI ,SAI1_SD_A , , ,SDMMC2_CK ,OCTOSPIM_P1_IO4 , ,MDIOS_MDC , ,LTDC_G5 ,EVENTOUT,ADC1_INN10/ADC1_INP11/ADC2_INN10/ADC2_INP11 -PortC,PC2 ,PWR_CSTOP , , ,DFSDM1_CKIN1 , ,I2S2_SDI/SPI2_MISO ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,USB_OTG_HS_ULPI_DIR ,OCTOSPIM_P1_IO5 ,FMC_SDNE0 , , ,EVENTOUT,ADC1_INN11/ADC1_INP12/ADC2_INN11/ADC2_INP12 -PortC,PC3 ,PWR_CSLEEP , , ,DFSDM1_DATIN1 , ,I2S2_SDO/SPI2_MOSI , , , ,OCTOSPIM_P1_IO0 ,USB_OTG_HS_ULPI_NXT ,OCTOSPIM_P1_IO6 ,FMC_SDCKE0 , , ,EVENTOUT,ADC2_INP1 -PortC,PC4 , , , ,DFSDM1_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX_IN3 , , ,FMC_SDNE0 , ,LTDC_R7 ,EVENTOUT,ADC1_INP4/ADC2_INP4 -PortC,PC5 , , ,SAI1_D3 ,DFSDM1_DATIN2 ,PSSI_D15 , , , , ,SPDIFRX_IN4 ,OCTOSPIM_P1_DQS , ,FMC_SDCKE0 ,COMP1_OUT ,LTDC_DE ,EVENTOUT,ADC1_INN4/ADC1_INP8/ADC2_INN4/ADC2_INP8 +PortC,PC0 , , , ,DFSDM1_CKIN0 , , ,DFSDM1_DATIN4 , ,SAI2_FS_B ,FMC_A25 ,USB_OTG_HS_ULPI_STP ,LTDC_G2 ,FMC_SDNWE , ,LTDC_R5 ,EVENTOUT,ADC12_INP10 +PortC,PC1 ,DEBUG_TRACED0 , ,SAI1_D1 ,DFSDM1_DATIN0 ,DFSDM1_CKIN4 ,I2S2_SDO/SPI2_MOSI ,SAI1_SD_A , , ,SDMMC2_CK ,OCTOSPIM_P1_IO4 , ,MDIOS_MDC , ,LTDC_G5 ,EVENTOUT,ADC12_INN10/ADC12_INP11 +PortC,PC2 ,PWR_CSTOP , , ,DFSDM1_CKIN1 , ,I2S2_SDI/SPI2_MISO ,DFSDM1_CKOUT , , ,OCTOSPIM_P1_IO2 ,USB_OTG_HS_ULPI_DIR ,OCTOSPIM_P1_IO5 ,FMC_SDNE0 , , ,EVENTOUT,ADC12_INN11/ADC12_INP12/C_ADC2_INP0/C_ADC2_INN1 +PortC,PC3 ,PWR_CSLEEP , , ,DFSDM1_DATIN1 , ,I2S2_SDO/SPI2_MOSI , , , ,OCTOSPIM_P1_IO0 ,USB_OTG_HS_ULPI_NXT ,OCTOSPIM_P1_IO6 ,FMC_SDCKE0 , , ,EVENTOUT,ADC12_INP13,ADC12_INN12/C_ADC2_INP1 +PortC,PC4 , , , ,DFSDM1_CKIN2 , ,I2S1_MCK , , , ,SPDIFRX_IN3 , , ,FMC_SDNE0 , ,LTDC_R7 ,EVENTOUT,ADC12_INP4 +PortC,PC5 , , ,SAI1_D3 ,DFSDM1_DATIN2 ,PSSI_D15 , , , , ,SPDIFRX_IN4 ,OCTOSPIM_P1_DQS , ,FMC_SDCKE0 ,COMP1_OUT ,LTDC_DE ,EVENTOUT,ADC12_INN4/ADC12_INP8 PortC,PC6 , , ,TIM3_CH1 ,TIM8_CH1 ,DFSDM1_CKIN3 ,I2S2_MCK , ,USART6_TX ,SDMMC1_D0DIR ,FMC_NWAIT ,SDMMC2_D6 , ,SDMMC1_D6 ,DCMI_D0/PSSI_D0 ,LTDC_HSYNC,EVENTOUT, PortC,PC7 ,DEBUG_TRGIO , ,TIM3_CH2 ,TIM8_CH2 ,DFSDM1_DATIN3 , ,I2S3_MCK ,USART6_RX ,SDMMC1_D123DIR ,FMC_NE1 ,SDMMC2_D7 ,SWPMI1_TX ,SDMMC1_D7 ,DCMI_D1/PSSI_D1 ,LTDC_G6 ,EVENTOUT, PortC,PC8 ,DEBUG_TRACED1 , ,TIM3_CH3 ,TIM8_CH3 , , , ,USART6_CK ,UART5_DE/UART5_RTS ,FMC_NCE/FMC_NE2 ,FMC_INT ,SWPMI1_RX ,SDMMC1_D0 ,DCMI_D2/PSSI_D2 , ,EVENTOUT, From 4d568a5bd73530830dab104d53292120f0e31d3d Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Mon, 14 Aug 2023 11:17:18 +1000 Subject: [PATCH 17/20] samd/boards/make-pins.py: Update to use tools/boardgen.py. This replaces the previous make-pin-table.py with an implementation based on boardgen.py. - MICROPY_PY_MACHINE_PIN_BOARD_CPU macro is removed. This isn't optional on other ports, so no need for it to be optional on SAMD. - pin_af_table is removed, and lookups just search the cpu dict instead (this saves N*wordsize bytes of firmware size to have this extra table). - pins.csv is now BOARD,CPU to match other ports. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/samd/Makefile | 23 +- .../ADAFRUIT_FEATHER_M0_EXPRESS/pins.csv | 75 +++---- .../ADAFRUIT_FEATHER_M4_EXPRESS/pins.csv | 77 ++++--- .../ADAFRUIT_ITSYBITSY_M0_EXPRESS/pins.csv | 71 +++---- .../ADAFRUIT_ITSYBITSY_M4_EXPRESS/pins.csv | 77 ++++--- .../boards/ADAFRUIT_METRO_M4_EXPRESS/pins.csv | 111 +++++----- .../samd/boards/ADAFRUIT_TRINKET_M0/pins.csv | 29 ++- ports/samd/boards/MINISAM_M4/pins.csv | 73 +++---- .../samd/boards/SAMD21_XPLAINED_PRO/pins.csv | 97 ++++----- ports/samd/boards/SEEED_WIO_TERMINAL/pins.csv | 139 ++++++------ ports/samd/boards/SEEED_XIAO_SAMD21/pins.csv | 41 ++-- .../SPARKFUN_SAMD51_THING_PLUS/pins.csv | 71 +++---- ports/samd/boards/make-pin-table.py | 201 ------------------ ports/samd/boards/make-pins.py | 95 +++++++++ ports/samd/boards/pins_prefix.c | 21 ++ ports/samd/machine_adc.c | 4 +- ports/samd/machine_dac.c | 2 +- ports/samd/machine_pin.c | 19 +- ports/samd/machine_pwm.c | 4 +- ports/samd/machine_uart.c | 6 +- ports/samd/mcu/samd21/mpconfigmcu.h | 4 - ports/samd/mcu/samd21/pin-af-table.csv | 107 +++++----- ports/samd/mcu/samd51/mpconfigmcu.h | 4 - ports/samd/mcu/samd51/pin-af-table.csv | 201 +++++++++--------- ports/samd/pin_af.c | 59 ++--- ports/samd/pin_af.h | 5 +- 26 files changed, 715 insertions(+), 901 deletions(-) delete mode 100644 ports/samd/boards/make-pin-table.py create mode 100644 ports/samd/boards/make-pins.py create mode 100644 ports/samd/boards/pins_prefix.c diff --git a/ports/samd/Makefile b/ports/samd/Makefile index 7d27367b6b11a..291a894ab7b07 100644 --- a/ports/samd/Makefile +++ b/ports/samd/Makefile @@ -56,10 +56,12 @@ INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/include INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/include/pio INC += -I$(TOP)/lib/tinyusb/src -MAKE_PIN_AF = boards/make-pin-table.py -PIN_AF_TABLE_CSV = mcu/$(MCU_SERIES_LOWER)/pin-af-table.csv +MAKE_PINS = boards/make-pins.py BOARD_PINS = $(BOARD_DIR)/pins.csv -GEN_PIN_AF = pin_af_table.c +PREFIX_FILE = boards/pins_prefix.c +AF_FILE = mcu/$(MCU_SERIES_LOWER)/pin-af-table.csv +GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c +GEN_PINS_HDR = $(HEADER_BUILD)/pins.h CFLAGS += $(INC) -Wall -Werror -std=c99 -nostdlib -mthumb $(CFLAGS_MCU) -fsingle-precision-constant -Wdouble-promotion CFLAGS += -DMCU_$(MCU_SERIES) -D__$(CMSIS_MCU)__ @@ -179,7 +181,7 @@ DRIVERS_SRC_C += \ drivers/bus/softspi.c \ # List of sources for qstr extraction -SRC_QSTR += $(SRC_C) $(SHARED_SRC_C) $(SRC_CXX) +SRC_QSTR += $(SRC_C) $(SHARED_SRC_C) $(SRC_CXX) $(GEN_PINS_SRC) OBJ += $(PY_O) OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) @@ -190,6 +192,7 @@ OBJ += $(addprefix $(BUILD)/, $(ASF4_SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(LIBM_SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(TINYUSB_SRC_C:.c=.o)) +OBJ += $(GEN_PINS_SRC:.c=.o) all: $(BUILD)/firmware.uf2 @@ -203,10 +206,14 @@ $(BUILD)/firmware.bin: $(BUILD)/firmware.elf $(BUILD)/firmware.uf2: $(BUILD)/firmware.bin $(Q)$(PYTHON) $(UF2CONV) -b $(TEXT0) -c -o $@ $< -pin_af.c: $(BUILD)/$(GEN_PIN_AF) | $(HEADER_BUILD) +# pin_af.c: $(BUILD)/$(GEN_PIN_AF) | $(HEADER_BUILD) -$(BUILD)/$(GEN_PIN_AF): $(PIN_AF_TABLE_CSV) $(BOARD_PINS) | $(HEADER_BUILD) - $(ECHO) "Create $@" - $(Q)$(PYTHON) $(MAKE_PIN_AF) --csv $(PIN_AF_TABLE_CSV) --board $(BOARD_PINS) --table $(BUILD)/$(GEN_PIN_AF) --mcu $(MCU_SERIES) +# Use a pattern rule here so that make will only call make-pins.py once to make +# both pins_$(BOARD).c and pins.h +$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) + $(ECHO) "GEN $@" + $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) \ + --mcu $(MCU_SERIES) include $(TOP)/py/mkrules.mk diff --git a/ports/samd/boards/ADAFRUIT_FEATHER_M0_EXPRESS/pins.csv b/ports/samd/boards/ADAFRUIT_FEATHER_M0_EXPRESS/pins.csv index 65362770624de..8993419a268c5 100644 --- a/ports/samd/boards/ADAFRUIT_FEATHER_M0_EXPRESS/pins.csv +++ b/ports/samd/boards/ADAFRUIT_FEATHER_M0_EXPRESS/pins.csv @@ -1,43 +1,38 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines starting with # are ignored +LED_TX,PA27 +LED_RX,PB03 -PIN_PA27,LED_TX -PIN_PB03,LED_RX +D0,PA11 +D1,PA10 +FLASH_MOSI,PA08 +FLASH_MISO,PA14 +FLASH_SCK,PA09 +D5,PA15 +D6,PA20 +D7,PA21 +D8,PA06 +D9,PA07 +D10,PA18 +D11,PA16 +D12,PA19 +D13,PA17 +A0,PA02 +A1,PB08 +A2,PB09 +A3,PA04 +A4,PA05 +A5,PB02 +TX,PB22 +RX,PB23 +SCL,PA23 +SDA,PA22 +MOSI,PB10 +MISO,PA12 +SCK,PB11 +NEOPIXEL,PA06 +FLASH_CS,PA13 -PIN_PA11,D0 -PIN_PA10,D1 -PIN_PA08,FLASH_MOSI -PIN_PA14,FLASH_MISO -PIN_PA09,FLASH_SCK -PIN_PA15,D5 -PIN_PA20,D6 -PIN_PA21,D7 -PIN_PA06,D8 -PIN_PA07,D9 -PIN_PA18,D10 -PIN_PA16,D11 -PIN_PA19,D12 -PIN_PA17,D13 -PIN_PA02,A0 -PIN_PB08,A1 -PIN_PB09,A2 -PIN_PA04,A3 -PIN_PA05,A4 -PIN_PB02,A5 -PIN_PB22,TX -PIN_PB23,RX -PIN_PA23,SCL -PIN_PA22,SDA -PIN_PB10,MOSI -PIN_PA12,MISO -PIN_PB11,SCK -PIN_PA06,NEOPIXEL -PIN_PA13,FLASH_CS +USB_DM,PA24 +USB_DP,PA25 -PIN_PA24,USB_DM -PIN_PA25,USB_DP - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/ADAFRUIT_FEATHER_M4_EXPRESS/pins.csv b/ports/samd/boards/ADAFRUIT_FEATHER_M4_EXPRESS/pins.csv index df3373f246a84..ec7a8bc1638da 100644 --- a/ports/samd/boards/ADAFRUIT_FEATHER_M4_EXPRESS/pins.csv +++ b/ports/samd/boards/ADAFRUIT_FEATHER_M4_EXPRESS/pins.csv @@ -1,44 +1,39 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +D0,PB17 +D1,PB16 +D4,PA14 +D5,PA16 +D6,PA18 +D8,PB03 +D9,PA19 +D10,PA20 +D11,PA21 +D12,PA22 +D13,PA23 +A0,PA02 +A1,PA05 +A2,PB08 +A3,PB09 +A4,PA04 +A5,PB06 +SCL,PA13 +SDA,PA12 +MOSI,PB23 +MISO,PB22 +SCK,PA17 +VDIV,PB01 +AREF,PA03 +NEOPIXEL,PB03 -PIN_PB17,D0 -PIN_PB16,D1 -PIN_PA14,D4 -PIN_PA16,D5 -PIN_PA18,D6 -PIN_PB03,D8 -PIN_PA19,D9 -PIN_PA20,D10 -PIN_PA21,D11 -PIN_PA22,D12 -PIN_PA23,D13 -PIN_PA02,A0 -PIN_PA05,A1 -PIN_PB08,A2 -PIN_PB09,A3 -PIN_PA04,A4 -PIN_PB06,A5 -PIN_PA13,SCL -PIN_PA12,SDA -PIN_PB23,MOSI -PIN_PB22,MISO -PIN_PA17,SCK -PIN_PB01,VDIV -PIN_PA03,AREF -PIN_PB03,NEOPIXEL +QSPI_CS,PB11 +QSPI_SCK,PB10 +QSPI_D0,PA08 +QSPI_D1,PA09 +QSPI_D2,PA10 +QSPI_D3,PA11 -PIN_PB11,QSPI_CS -PIN_PB10,QSPI_SCK -PIN_PA08,QSPI_D0 -PIN_PA09,QSPI_D1 -PIN_PA10,QSPI_D2 -PIN_PA11,QSPI_D3 +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/ADAFRUIT_ITSYBITSY_M0_EXPRESS/pins.csv b/ports/samd/boards/ADAFRUIT_ITSYBITSY_M0_EXPRESS/pins.csv index 04b1a717bd2cd..845cefb8a972b 100644 --- a/ports/samd/boards/ADAFRUIT_ITSYBITSY_M0_EXPRESS/pins.csv +++ b/ports/samd/boards/ADAFRUIT_ITSYBITSY_M0_EXPRESS/pins.csv @@ -1,40 +1,35 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +D0,PA11 +D1,PA10 +D2,PA14 +D3,PA09 +D4,PA08 +D5,PA15 +D7,PA21 +D9,PA07 +D10,PA18 +D11,PA16 +D12,PA19 +D13,PA17 +A0,PA02 +A1,PB08 +A2,PB09 +A3,PA04 +A4,PA05 +A5,PB02 +SDA,PA22 +SCL,PA23 +MOSI,PB10 +MISO,PA12 +SCK,PB11 +DOTSTAR_CLK,PA00 +DOTSTAR_DATA,PA01 +FLASH_MOSI,PB22 +FLASH_MISO,PB03 +FLASH_SCK,PB23 +FLASH_CS,PA27 -PIN_PA11,D0 -PIN_PA10,D1 -PIN_PA14,D2 -PIN_PA09,D3 -PIN_PA08,D4 -PIN_PA15,D5 -PIN_PA21,D7 -PIN_PA07,D9 -PIN_PA18,D10 -PIN_PA16,D11 -PIN_PA19,D12 -PIN_PA17,D13 -PIN_PA02,A0 -PIN_PB08,A1 -PIN_PB09,A2 -PIN_PA04,A3 -PIN_PA05,A4 -PIN_PB02,A5 -PIN_PA22,SDA -PIN_PA23,SCL -PIN_PB10,MOSI -PIN_PA12,MISO -PIN_PB11,SCK -PIN_PA00,DOTSTAR_CLK -PIN_PA01,DOTSTAR_DATA -PIN_PB22,FLASH_MOSI -PIN_PB03,FLASH_MISO -PIN_PB23,FLASH_SCK -PIN_PA27,FLASH_CS +USB_DM,PA24 +USB_DP,PA25 -PIN_PA24,USB_DM -PIN_PA25,USB_DP - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/ADAFRUIT_ITSYBITSY_M4_EXPRESS/pins.csv b/ports/samd/boards/ADAFRUIT_ITSYBITSY_M4_EXPRESS/pins.csv index b63a1f4b13554..c82beccfa2be3 100644 --- a/ports/samd/boards/ADAFRUIT_ITSYBITSY_M4_EXPRESS/pins.csv +++ b/ports/samd/boards/ADAFRUIT_ITSYBITSY_M4_EXPRESS/pins.csv @@ -1,44 +1,39 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +D0,PA16 +D1,PA17 +D2,PA07 +D3,PB22 +D4,PA14 +D5,PA15 +D7,PA18 +D9,PA19 +D10,PA20 +D11,PA21 +D12,PA23 +D13,PA22 +A0,PA02 +A1,PA05 +A2,PB08 +A3,PB09 +A4,PA04 +A5,PA06 +SDA,PA12 +SCL,PA13 +MOSI,PA00 +MISO,PB23 +SCK,PA01 +DOTSTAR_CLK,PB02 +DOTSTAR_DATA,PB03 -PIN_PA16,D0 -PIN_PA17,D1 -PIN_PA07,D2 -PIN_PB22,D3 -PIN_PA14,D4 -PIN_PA15,D5 -PIN_PA18,D7 -PIN_PA19,D9 -PIN_PA20,D10 -PIN_PA21,D11 -PIN_PA23,D12 -PIN_PA22,D13 -PIN_PA02,A0 -PIN_PA05,A1 -PIN_PB08,A2 -PIN_PB09,A3 -PIN_PA04,A4 -PIN_PA06,A5 -PIN_PA12,SDA -PIN_PA13,SCL -PIN_PA00,MOSI -PIN_PB23,MISO -PIN_PA01,SCK -PIN_PB02,DOTSTAR_CLK -PIN_PB03,DOTSTAR_DATA +QSPI_CS,PB11 +QSPI_SCK,PB10 +QSPI_D0,PA08 +QSPI_D1,PA09 +QSPI_D2,PA10 +QSPI_D3,PA11 -PIN_PB11,QSPI_CS -PIN_PB10,QSPI_SCK -PIN_PA08,QSPI_D0 -PIN_PA09,QSPI_D1 -PIN_PA10,QSPI_D2 -PIN_PA11,QSPI_D3 +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/ADAFRUIT_METRO_M4_EXPRESS/pins.csv b/ports/samd/boards/ADAFRUIT_METRO_M4_EXPRESS/pins.csv index 0bda767600e12..cee4bf02b7a39 100644 --- a/ports/samd/boards/ADAFRUIT_METRO_M4_EXPRESS/pins.csv +++ b/ports/samd/boards/ADAFRUIT_METRO_M4_EXPRESS/pins.csv @@ -1,66 +1,61 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored - -PIN_PA02,A0 -PIN_PA05,A1 -PIN_PA06,A2 -PIN_PB00,A3 -PIN_PB08,A4 -PIN_PB09,A5 -PIN_PA03,AREF - -PIN_PA23,D0 -PIN_PA22,D1 -PIN_PB17,D2 -PIN_PB16,D3 -PIN_PB13,D4 -PIN_PB14,D5 -PIN_PB15,D6 -PIN_PB12,D7 -PIN_PA21,D8 -PIN_PA20,D9 -PIN_PA18,D10 -PIN_PA19,D11 -PIN_PA17,D12 -PIN_PA16,D13 - -PIN_PB02,SDA -PIN_PB03,SCL - -PIN_PA13,SCK -PIN_PA12,MOSI -PIN_PA14,MISO - -PIN_PB22,NEOPIXEL -PIN_PB06,RXLED -PIN_PB07,TXLED +A0,PA02 +A1,PA05 +A2,PA06 +A3,PB00 +A4,PB08 +A5,PB09 +AREF,PA03 + +D0,PA23 +D1,PA22 +D2,PB17 +D3,PB16 +D4,PB13 +D5,PB14 +D6,PB15 +D7,PB12 +D8,PA21 +D9,PA20 +D10,PA18 +D11,PA19 +D12,PA17 +D13,PA16 + +SDA,PB02 +SCL,PB03 + +SCK,PA13 +MOSI,PA12 +MISO,PA14 + +NEOPIXEL,PB22 +RXLED,PB06 +TXLED,PB07 # Airlift -PIN_PB05,ESP_RESET -PIN_PB04,ESP_BUSY -PIN_PA15,ESP_CS -PIN_PB01,ESP_GPIO0 -PIN_PA07,ESP_RX -PIN_PA04,ESP_TX -PIN_PB23,ESP_RTS +ESP_RESET,PB05 +ESP_BUSY,PB04 +ESP_CS,PA15 +ESP_GPIO0,PB01 +ESP_RX,PA07 +ESP_TX,PA04 +ESP_RTS,PB23 # QSPI flash -PIN_PA08,FLASH_MOSI -PIN_PA09,FLASH_MISO -PIN_PA10,FLASH_WP -PIN_PA11,FLASH_HOLD -PIN_PB10,FLASH_SCK -PIN_PB11,FLASH_CS +FLASH_MOSI,PA08 +FLASH_MISO,PA09 +FLASH_WP,PA10 +FLASH_HOLD,PA11 +FLASH_SCK,PB10 +FLASH_CS,PB11 # USB -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF -PIN_PA17,USB_HOSTEN +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 +#USB_HOSTEN,PA17 # JLink -PIN_PA30,SWCLK -PIN_PA31,SWDIO -PIN_PB30,SWO +SWCLK,PA30 +SWDIO,PA31 +SWO,PB30 diff --git a/ports/samd/boards/ADAFRUIT_TRINKET_M0/pins.csv b/ports/samd/boards/ADAFRUIT_TRINKET_M0/pins.csv index b5f1c9801b154..47306f8de1ce0 100644 --- a/ports/samd/boards/ADAFRUIT_TRINKET_M0/pins.csv +++ b/ports/samd/boards/ADAFRUIT_TRINKET_M0/pins.csv @@ -1,20 +1,15 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +D0,PA08 +D1,PA02 +D2,PA09 +D3,PA07 +D4,PA06 +DOTSTAR_DATA,PA00 +DOTSTAR_CLK,PA01 -PIN_PA08,D0 -PIN_PA02,D1 -PIN_PA09,D2 -PIN_PA07,D3 -PIN_PA06,D4 -PIN_PA00,DOTSTAR_DATA -PIN_PA01,DOTSTAR_CLK +LED,PA10 -PIN_PA10,LED +USB_DM,PA24 +USB_DP,PA25 -PIN_PA24,USB_DM -PIN_PA25,USB_DP - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/MINISAM_M4/pins.csv b/ports/samd/boards/MINISAM_M4/pins.csv index 3ea5f85cbacb9..3c1ab4c6038d3 100644 --- a/ports/samd/boards/MINISAM_M4/pins.csv +++ b/ports/samd/boards/MINISAM_M4/pins.csv @@ -1,43 +1,38 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +A0,PA02 +A1,PB08 +A2,PB09 +A3,PA04 +A4,PA05 +A5,PA06 +A6,PA07 +RX,PA16 +TX,PA17 +D3,PA19 +D4,PA20 +D5,PA21 +LED,PA15 +BUTTON,PA00 +AREF,PA03 +SDA,PA12 +SCL,PA13 +MOSI,PB22 +MISO,PB23 +SCK,PA01 +DOTSTAR_DATA,PB03 +DOTSTAR_CLK,PB02 -PIN_PA02,A0 -PIN_PB08,A1 -PIN_PB09,A2 -PIN_PA04,A3 -PIN_PA05,A4 -PIN_PA06,A5 -PIN_PA07,A6 -PIN_PA16,RX -PIN_PA17,TX -PIN_PA19,D3 -PIN_PA20,D4 -PIN_PA21,D5 -PIN_PA15,LED -PIN_PA00,BUTTON -PIN_PA03,AREF -PIN_PA12,SDA -PIN_PA13,SCL -PIN_PB22,MOSI -PIN_PB23,MISO -PIN_PA01,SCK -PIN_PB03,DOTSTAR_DATA -PIN_PB02,DOTSTAR_CLK +QSPI_CS,PB11 +QSPI_SCK,PB10 +QSPI_D0,PA08 +QSPI_D1,PA09 +QSPI_D2,PA10 +QSPI_D3,PA11 -PIN_PB11,QSPI_CS -PIN_PB10,QSPI_SCK -PIN_PA08,QSPI_D0 -PIN_PA09,QSPI_D1 -PIN_PA10,QSPI_D2 -PIN_PA11,QSPI_D3 +LED,PA15 -PIN_PA15,LED +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/SAMD21_XPLAINED_PRO/pins.csv b/ports/samd/boards/SAMD21_XPLAINED_PRO/pins.csv index 5990c373bf934..69d0c136d08ef 100644 --- a/ports/samd/boards/SAMD21_XPLAINED_PRO/pins.csv +++ b/ports/samd/boards/SAMD21_XPLAINED_PRO/pins.csv @@ -1,60 +1,55 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored - # EXT1 -PIN_PB00,EXT1_PIN3 -PIN_PB01,EXT1_PIN4 -PIN_PB06,EXT1_PIN5 -PIN_PB07,EXT1_PIN6 -PIN_PB02,EXT1_PIN7 -PIN_PB03,EXT1_PIN8 -PIN_PB04,EXT1_PIN9 -PIN_PB05,EXT1_PIN10 -PIN_PA08,EXT1_PIN11 -PIN_PA09,EXT1_PIN12 -PIN_PB09,EXT1_PIN13 -PIN_PB08,EXT1_PIN14 -PIN_PA05,EXT1_PIN15 -PIN_PA06,EXT1_PIN16 -PIN_PA04,EXT1_PIN17 -PIN_PA07,EXT1_PIN18 +EXT1_PIN3,PB00 +EXT1_PIN4,PB01 +EXT1_PIN5,PB06 +EXT1_PIN6,PB07 +EXT1_PIN7,PB02 +EXT1_PIN8,PB03 +EXT1_PIN9,PB04 +EXT1_PIN10,PB05 +EXT1_PIN11,PA08 +EXT1_PIN12,PA09 +EXT1_PIN13,PB09 +EXT1_PIN14,PB08 +EXT1_PIN15,PA05 +EXT1_PIN16,PA06 +EXT1_PIN17,PA04 +EXT1_PIN18,PA07 # EXT2 -PIN_PA10,EXT2_PIN3 -PIN_PA11,EXT2_PIN4 -PIN_PA20,EXT2_PIN5 -PIN_PA21,EXT2_PIN6 -PIN_PB12,EXT2_PIN7 -PIN_PB13,EXT2_PIN8 -PIN_PB14,EXT2_PIN9 -PIN_PB15,EXT2_PIN10 -PIN_PB11,EXT2_PIN13 -PIN_PB10,EXT2_PIN14 -PIN_PA17,EXT2_PIN15 -PIN_PA18,EXT2_PIN16 -PIN_PA16,EXT2_PIN17 -PIN_PA19,EXT2_PIN18 +EXT2_PIN3,PA10 +EXT2_PIN4,PA11 +EXT2_PIN5,PA20 +EXT2_PIN6,PA21 +EXT2_PIN7,PB12 +EXT2_PIN8,PB13 +EXT2_PIN9,PB14 +EXT2_PIN10,PB15 +EXT2_PIN13,PB11 +EXT2_PIN14,PB10 +EXT2_PIN15,PA17 +EXT2_PIN16,PA18 +EXT2_PIN17,PA16 +EXT2_PIN18,PA19 # EXT3 -PIN_PA02,EXT3_PIN3 -PIN_PA03,EXT3_PIN4 -PIN_PA15,EXT3_PIN6 -PIN_PA12,EXT3_PIN7 -PIN_PA13,EXT3_PIN8 -PIN_PA28,EXT3_PIN9 -PIN_PA27,EXT3_PIN10 -PIN_PB17,EXT3_PIN15 -PIN_PB22,EXT3_PIN16 -PIN_PB16,EXT3_PIN17 -PIN_PB23,EXT3_PIN18 +EXT3_PIN3,PA02 +EXT3_PIN4,PA03 +EXT3_PIN6,PA15 +EXT3_PIN7,PA12 +EXT3_PIN8,PA13 +EXT3_PIN9,PA28 +EXT3_PIN10,PA27 +EXT3_PIN15,PB17 +EXT3_PIN16,PB22 +EXT3_PIN17,PB16 +EXT3_PIN18,PB23 -PIN_PB30,LED +LED,PB30 -PIN_PA24,USB_DM -PIN_PA25,USB_DP +USB_DM,PA24 +USB_DP,PA25 -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/SEEED_WIO_TERMINAL/pins.csv b/ports/samd/boards/SEEED_WIO_TERMINAL/pins.csv index c32108b9f72a0..f263253cbaae4 100644 --- a/ports/samd/boards/SEEED_WIO_TERMINAL/pins.csv +++ b/ports/samd/boards/SEEED_WIO_TERMINAL/pins.csv @@ -1,76 +1,71 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +A0_D0,PB08 +A1_D1,PB09 +A2_D2,PA07 +A3_D3,PB04 +A4_D4,PB05 +A5_D5,PB06 +A6_D6,PA04 +A7_D7,PB07 +A8_D8,PA06 +SWITCH_X,PD08 +SWITCH_Y,PD09 +SWITCH_Z,PD10 +SWITCH_B,PD12 +SWITCH_U,PD20 +BUTTON_1,PC26 +BUTTON_2,PC27 +BUTTON_3,PC28 +ENABLE_5V,PC14 +ENABLE_3V3,PC15 +TX,PB26 +RX,PB27 +SDA0,PA13 +SCL0,PA12 +SDA1,PA17 +SCL1,PA16 +MOSI,PB02 +MISO,PB00 +SCK,PB03 +CS,PB01 +GPCLK0,PB15 +GPCLK1,PB12 +GPCLK2,PB13 +SD_MOSI,PC16 +SD_MISO,PC18 +SD_SCK,PC17 +SD_CS,PC19 +SD_DET,PD21 +I2S_LRCLK,PA20 +I2S_SDIN,PA21 +I2S_SDOUT,PA22 +I2C_BCLK,PB16 +LCD_MISO,PB18 +LCD_MOSI,PB19 +LCD_SCK,PB20 +LCD_CS,PB21 +LCD_BACKLIGHT,PC05 +LCD_D_C,PC06 +LCD_RESET,PC07 +LCD_XL,PC10 +LCD_YU,PC11 +LCD_XR,PC12 +LCD_YD,PC13 +MIC,PC30 +BUZZER,PD11 -PIN_PB08,A0_D0 -PIN_PB09,A1_D1 -PIN_PA07,A2_D2 -PIN_PB04,A3_D3 -PIN_PB05,A4_D4 -PIN_PB06,A5_D5 -PIN_PA04,A6_D6 -PIN_PB07,A7_D7 -PIN_PA06,A8_D8 -PIN_PD08,SWITCH_X -PIN_PD09,SWITCH_Y -PIN_PD10,SWITCH_Z -PIN_PD12,SWITCH_B -PIN_PD20,SWITCH_U -PIN_PC26,BUTTON_1 -PIN_PC27,BUTTON_2 -PIN_PC28,BUTTON_3 -PIN_PC14,ENABLE_5V -PIN_PC15,ENABLE_3V3 -PIN_PB26,TX -PIN_PB27,RX -PIN_PA13,SDA0 -PIN_PA12,SCL0 -PIN_PA17,SDA1 -PIN_PA16,SCL1 -PIN_PB02,MOSI -PIN_PB00,MISO -PIN_PB03,SCK -PIN_PB01,CS -PIN_PB15,GPCLK0 -PIN_PB12,GPCLK1 -PIN_PB13,GPCLK2 -PIN_PC16,SD_MOSI -PIN_PC18,SD_MISO -PIN_PC17,SD_SCK -PIN_PC19,SD_CS -PIN_PD21,SD_DET -PIN_PA20,I2S_LRCLK -PIN_PA21,I2S_SDIN -PIN_PA22,I2S_SDOUT -PIN_PB16,I2C_BCLK -PIN_PB18,LCD_MISO -PIN_PB19,LCD_MOSI -PIN_PB20,LCD_SCK -PIN_PB21,LCD_CS -PIN_PC05,LCD_BACKLIGHT -PIN_PC06,LCD_D_C -PIN_PC07,LCD_RESET -PIN_PC10,LCD_XL -PIN_PC11,LCD_YU -PIN_PC12,LCD_XR -PIN_PC13,LCD_YD -PIN_PC30,MIC -PIN_PD11,BUZZER +QSPI_CS,PB11 +QSPI_SCK,PB10 +QSPI_D0,PA08 +QSPI_D1,PA09 +QSPI_D2,PA10 +QSPI_D3,PA11 -PIN_PB11,QSPI_CS -PIN_PB10,QSPI_SCK -PIN_PA08,QSPI_D0 -PIN_PA09,QSPI_D1 -PIN_PA10,QSPI_D2 -PIN_PA11,QSPI_D3 +LED_BLUE,PA15 +LED_LCD,PC05 -PIN_PA15,LED_BLUE -PIN_PC05,LED_LCD +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/SEEED_XIAO_SAMD21/pins.csv b/ports/samd/boards/SEEED_XIAO_SAMD21/pins.csv index 2f1c180e8ac6a..969c60028b41b 100644 --- a/ports/samd/boards/SEEED_XIAO_SAMD21/pins.csv +++ b/ports/samd/boards/SEEED_XIAO_SAMD21/pins.csv @@ -1,26 +1,21 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +A0_D0,PA02 +A1_D1,PA04 +A2_D2,PA10 +A3_D3,PA11 +A4_D4,PA08 +A5_D5,PA09 +A6_D6,PB08 +A7_D7,PB09 +A8_D8,PA07 +A9_D9,PA05 +A10_D10,PA06 -PIN_PA02,A0_D0 -PIN_PA04,A1_D1 -PIN_PA10,A2_D2 -PIN_PA11,A3_D3 -PIN_PA08,A4_D4 -PIN_PA09,A5_D5 -PIN_PB08,A6_D6 -PIN_PB09,A7_D7 -PIN_PA07,A8_D8 -PIN_PA05,A9_D9 -PIN_PA06,A10_D10 +USER_LED,PA17 +RX_LED,PA18 +TX_LED,PA19 -PIN_PA17,USER_LED -PIN_PA18,RX_LED -PIN_PA19,TX_LED +USB_DM,PA24 +USB_DP,PA25 -PIN_PA24,USB_DM -PIN_PA25,USB_DP - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/SPARKFUN_SAMD51_THING_PLUS/pins.csv b/ports/samd/boards/SPARKFUN_SAMD51_THING_PLUS/pins.csv index d807b505a7044..0ae269724da85 100644 --- a/ports/samd/boards/SPARKFUN_SAMD51_THING_PLUS/pins.csv +++ b/ports/samd/boards/SPARKFUN_SAMD51_THING_PLUS/pins.csv @@ -1,41 +1,36 @@ -# Pin rows contain Pin number and pin name. -# Pin rows start with PIN_ -# If the pin name is omitted, the pin number is added as name. -# Empty lines and lines not starting with PIN_ are ignored +D0,PA13 +D1,PA12 +D4,PA06 +D5,PA15 +D6,PA20 +D7,PA21 +D9,PA07 +D10,PA18 +D11,PA16 +D12,PA19 +D13,PA17 +A0,PA02 +A1,PB08 +A2,PB09 +A3,PA04 +A4,PA05 +A5,PB02 +SDA,PA22 +SCL,PA23 +MOSI,PB12 +MISO,PB11 +SCK,PB13 +FLASH_MOSI,PA08 +FLASH_SCK,PA09 +FLASH_CS,PA10 +FLASH_MISO,PA11 -PIN_PA13,D0 -PIN_PA12,D1 -PIN_PA06,D4 -PIN_PA15,D5 -PIN_PA20,D6 -PIN_PA21,D7 -PIN_PA07,D9 -PIN_PA18,D10 -PIN_PA16,D11 -PIN_PA19,D12 -PIN_PA17,D13 -PIN_PA02,A0 -PIN_PB08,A1 -PIN_PB09,A2 -PIN_PA04,A3 -PIN_PA05,A4 -PIN_PB02,A5 -PIN_PA22,SDA -PIN_PA23,SCL -PIN_PB12,MOSI -PIN_PB11,MISO -PIN_PB13,SCK -PIN_PA08,FLASH_MOSI -PIN_PA09,FLASH_SCK -PIN_PA10,FLASH_CS -PIN_PA11,FLASH_MISO +RXLED,PB03 +TXLED,PA27 -PIN_PB03,RXLED -PIN_PA27,TXLED +USB_DM,PA24 +USB_DP,PA25 +USB_SOF,PA23 -PIN_PA24,USB_DM -PIN_PA25,USB_DP -PIN_PA26,USB_SOF - -PIN_PA30,SWCLK -PIN_PA31,SWDIO +SWCLK,PA30 +SWDIO,PA31 diff --git a/ports/samd/boards/make-pin-table.py b/ports/samd/boards/make-pin-table.py deleted file mode 100644 index a187f2a711aaa..0000000000000 --- a/ports/samd/boards/make-pin-table.py +++ /dev/null @@ -1,201 +0,0 @@ -#!/usr/bin/env python -"""Generates the pin_cap table file for the SAMD port.""" - -from __future__ import print_function - -import argparse -import sys -import csv - -table_header = """// This file was automatically generated by make-pin-cap.py -// - -// The Pin objects which are available on a board - -""" - - -class Pins: - def __init__(self): - self.board_pins = [] # list of pin objects - self.pin_names = {} - - def parse_csv_file(self, filename): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - # Pin numbers must start with "PA", "PB", "PC" or "PD" - if len(row) > 0 and row[0].strip().upper()[:2] in ("PA", "PB", "PC", "PD"): - self.board_pins.append(row) - - def parse_pin_file(self, filename): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile, skipinitialspace=True) - for row in rows: - # Pin numbers must start with "PIN_" - # LED numbers must start with "LED_" - if len(row) > 0: - # for compatibility, map LED_ to PIN_ - if row[0].startswith("LED_"): - row[0] = "PIN_" + row[0][4:] - if row[0].startswith("PIN_"): - if len(row) == 1: - self.pin_names[row[0]] = (row[0][4:], "{&machine_pin_type}") - else: - self.pin_names[row[0]] = (row[1], "{&machine_pin_type}") - - def print_table(self, table_filename, mcu_name): - with open(table_filename, "wt") as table_file: - table_file.write(table_header) - - # Create the Pin objects - - if mcu_name == "SAMD21": - for row in self.board_pins: - pin = "PIN_" + row[0].upper() - table_file.write("#ifdef " + pin + "\n") - table_file.write("static const machine_pin_obj_t %s_obj = " % pin) - eic = row[1] if row[1] else "0xff" - adc = row[2] if row[2] else "0xff" - if pin in self.pin_names: - name = "MP_QSTR_%s" % self.pin_names[pin][0] - type = self.pin_names[pin][1] - else: - name = "MP_QSTR_" - type = "{&machine_pin_type}" - table_file.write("{%s, %s, %s, %s, %s" % (type, pin, name, eic, adc)) - for cell in row[3:]: - if cell: - table_file.write( - ", 0x%s" % cell if len(cell) == 2 else ", 0x0%s" % cell - ) - else: - table_file.write(", 0xff") - table_file.write("};\n") - table_file.write("#endif\n") - else: - for row in self.board_pins: - pin = "PIN_" + row[0].upper() - table_file.write("#ifdef " + pin + "\n") - table_file.write("const machine_pin_obj_t %s_obj = " % pin) - eic = row[1] if row[1] else "0xff" - adc0 = row[2] if row[2] else "0xff" - adc1 = row[3] if row[3] else "0xff" - if pin in self.pin_names: - name = "MP_QSTR_%s" % self.pin_names[pin][0] - type = self.pin_names[pin][1] - else: - name = "MP_QSTR_" - type = "{&machine_pin_type}" - table_file.write( - "{%s, %s, %s, %s, %s, %s" % (type, pin, name, eic, adc0, adc1) - ) - for cell in row[4:]: - if cell: - table_file.write( - ", 0x%s" % cell if len(cell) == 2 else ", 0x0%s" % cell - ) - else: - table_file.write(", 0xff") - table_file.write("};\n") - table_file.write("#endif\n") - - # Create the Pin table - - table_file.write("\n// The table of references to the pin objects.\n\n") - table_file.write("static const machine_pin_obj_t *pin_af_table[] = {\n") - for row in self.board_pins: - pin = "PIN_" + row[0].upper() - table_file.write(" #ifdef " + pin + "\n") - table_file.write(" &%s_obj,\n" % pin) - table_file.write(" #endif\n") - table_file.write("};\n") - - # Create the CPU pins dictionary table - - table_file.write("\n#if MICROPY_PY_MACHINE_PIN_BOARD_CPU\n") - table_file.write("\n// The cpu pins dictionary\n\n") - table_file.write( - "STATIC const mp_rom_map_elem_t pin_cpu_pins_locals_dict_table[] = {\n" - ) - for row in self.board_pins: - pin = "PIN_" + row[0].upper() - table_file.write(" #ifdef " + pin + "\n") - table_file.write( - " { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_PTR(&%s_obj) },\n" - % (row[0].upper(), pin) - ) - table_file.write(" #endif\n") - table_file.write("};\n") - table_file.write( - "MP_DEFINE_CONST_DICT(machine_pin_cpu_pins_locals_dict, pin_cpu_pins_locals_dict_table);\n" - ) - - # Create the board pins dictionary table - - table_file.write("\n// The board pins dictionary\n\n") - table_file.write( - "STATIC const mp_rom_map_elem_t pin_board_pins_locals_dict_table[] = {\n" - ) - for row in self.board_pins: - pin = "PIN_" + row[0].upper() - if pin in self.pin_names: - table_file.write(" #ifdef " + pin + "\n") - table_file.write( - " { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_PTR(&%s_obj) },\n" - % (self.pin_names[pin][0], pin) - ) - table_file.write(" #endif\n") - table_file.write("};\n") - table_file.write( - "MP_DEFINE_CONST_DICT(machine_pin_board_pins_locals_dict, pin_board_pins_locals_dict_table);\n" - ) - table_file.write("#endif\n") - - -def main(): - parser = argparse.ArgumentParser( - prog="make-pin-af.py", - usage="%(prog)s [options] [command]", - description="Generate MCU-specific pin cap table file", - ) - parser.add_argument( - "-c", - "--csv", - dest="csv_filename", - help="Specifies the pin-af-table.csv filename", - ) - parser.add_argument( - "-b", - "--board", - dest="pin_filename", - help="Specifies the pins.csv filename", - ) - parser.add_argument( - "-t", - "--table", - dest="table_filename", - help="Specifies the name of the generated pin cap table file", - ) - parser.add_argument( - "-m", - "--mcu", - dest="mcu_name", - help="Specifies type of the MCU (SAMD21 or SAMD51)", - ) - args = parser.parse_args(sys.argv[1:]) - - pins = Pins() - - if args.csv_filename: - pins.parse_csv_file(args.csv_filename) - - if args.pin_filename: - pins.parse_pin_file(args.pin_filename) - - if args.table_filename: - pins.print_table(args.table_filename, args.mcu_name) - - -if __name__ == "__main__": - main() diff --git a/ports/samd/boards/make-pins.py b/ports/samd/boards/make-pins.py new file mode 100644 index 0000000000000..302eeae624b18 --- /dev/null +++ b/ports/samd/boards/make-pins.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + + +from collections import defaultdict, namedtuple +import os +import re +import sys + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen + + +# These are the columns of the af.csv as well as the arguments to the PIN() +# macro in samd_prefix.c. +AFS = { + "SAMD21": ["eic", "adc0", "sercom1", "sercom2", "tcc1", "tcc2"], + "SAMD51": ["eic", "adc0", "adc1", "sercom1", "sercom2", "tc", "tcc1", "tcc2"], +} + + +class SamdPin(boardgen.Pin): + def __init__(self, cpu_pin_name): + super().__init__(cpu_pin_name) + + # P (already verified by validate_cpu_pin_name). + self._port = cpu_pin_name[1] + self._pin = int(cpu_pin_name[2:]) + + # List of uint8 values from the af.csv. Default to 0xff if not + # present. + self._afs = defaultdict(lambda: 0xFF) + + # Called for each AF defined in the csv file for this pin. + def add_af(self, af_idx, af_name, af): + # samd-specific: Any pin in the af.csv is implicitly part of the board + # pins.csv and will therefore be in the Pin.cpu dict. This is + # equivalent to adding `,Pxy` to the board.csv for every pin in the + # af.csv. + self._available = True + + name = AFS[self._generator.args.mcu][af_idx] + assert name == af_name.lower() + if name == "eic" or name.startswith("adc"): + # eic and adc columns are decimal. + v = int(af) + else: + # hex, high nibble is device number, low nibble is pad number. + v = int(af, 16) + self._afs[AFS[self._generator.args.mcu][af_idx]] = v + + # Use the PIN() macro defined in samd_prefix.c for defining the pin + # objects. + def definition(self): + # SAMD21: PIN(p_name, p_eic, p_adc0, p_sercom1, p_sercom2, p_tcc1, p_tcc2) + # SAMD51: PIN(p_name, p_eic, p_adc0, p_adc1, p_sercom1, p_sercom2, p_tc, p_tcc1, p_tcc2) + return "PIN({:s}, {})".format( + self.name(), + ", ".join("0x{:02x}".format(self._afs[x]) for x in AFS[self._generator.args.mcu]), + ) + + # Wrap all definitions to ensure that the ASF defines this pin for this + # particular MCU. + def enable_macro(self): + return "defined(PIN_{})".format(self.name()) + + # SAMD cpu names must be "P", with zero-prefixed two-digit . + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) + + if not re.match("P[A-D][0-9][0-9]$", cpu_pin_name): + raise boardgen.PinGeneratorError("Invalid cpu pin name '{}'".format(cpu_pin_name)) + + +class SamdPinGenerator(boardgen.PinGenerator): + def __init__(self): + # Use custom pin type above, and also enable the --af-csv argument so + # that add_af gets called on each pin. + super().__init__( + pin_type=SamdPin, + enable_af=True, + ) + + # Override the default implementation just to change the default arguments + # (extra header row, skip first column). + def parse_af_csv(self, filename): + return super().parse_af_csv(filename, header_rows=1, pin_col=0, af_col=1) + + # We need to know the mcu to emit the correct AF list. + def extra_args(self, parser): + parser.add_argument("--mcu") + + +if __name__ == "__main__": + SamdPinGenerator().main() diff --git a/ports/samd/boards/pins_prefix.c b/ports/samd/boards/pins_prefix.c new file mode 100644 index 0000000000000..4f0095d332130 --- /dev/null +++ b/ports/samd/boards/pins_prefix.c @@ -0,0 +1,21 @@ +// pins_prefix.c becomes the initial portion of the generated pins file. + +#include + +#include "py/obj.h" +#include "py/mphal.h" +#include "extmod/modmachine.h" +#include "pin_af.h" +#include "genhdr/pins.h" + +#if defined(MCU_SAMD21) + +#define PIN(p_name, p_eic, p_adc0, p_sercom1, p_sercom2, p_tcc1, p_tcc2) \ + {{&machine_pin_type}, PIN_##p_name, MP_QSTR_##p_name, p_eic, p_adc0, p_sercom1, p_sercom2, p_tcc1, p_tcc2 } + +#elif defined(MCU_SAMD51) + +#define PIN(p_name, p_eic, p_adc0, p_adc1, p_sercom1, p_sercom2, p_tc, p_tcc1, p_tcc2) \ + {{&machine_pin_type}, PIN_##p_name, MP_QSTR_##p_name, p_eic, p_adc0, p_adc1, p_sercom1, p_sercom2, p_tc, p_tcc1, p_tcc2 } + +#endif diff --git a/ports/samd/machine_adc.c b/ports/samd/machine_adc.c index 981318d33f2ff..2e4d4ed842326 100644 --- a/ports/samd/machine_adc.c +++ b/ports/samd/machine_adc.c @@ -89,8 +89,8 @@ STATIC void mp_machine_adc_print(const mp_print_t *print, mp_obj_t self_in, mp_p (void)kind; machine_adc_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "ADC(%s, device=%u, channel=%u, bits=%u, average=%u, vref=%d)", - pin_name(self->id), self->adc_config.device, + mp_printf(print, "ADC(%q, device=%u, channel=%u, bits=%u, average=%u, vref=%d)", + pin_find_by_id(self->id)->name, self->adc_config.device, self->adc_config.channel, self->bits, 1 << self->avg, self->vref); } diff --git a/ports/samd/machine_dac.c b/ports/samd/machine_dac.c index 195c06e4f4a83..5c9d77624dce4 100644 --- a/ports/samd/machine_dac.c +++ b/ports/samd/machine_dac.c @@ -152,7 +152,7 @@ STATIC mp_obj_t dac_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_ STATIC void dac_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { dac_obj_t *self = self_in; - mp_printf(print, "DAC(%u, Pin=%s, vref=%d)", self->id, pin_name(self->gpio_id), self->vref); + mp_printf(print, "DAC(%u, Pin=%q, vref=%d)", self->id, pin_find_by_id(self->gpio_id)->name, self->vref); } STATIC mp_obj_t dac_write(mp_obj_t self_in, mp_obj_t value_in) { diff --git a/ports/samd/machine_pin.c b/ports/samd/machine_pin.c index f8e1b962804c0..30b254722b842 100644 --- a/ports/samd/machine_pin.c +++ b/ports/samd/machine_pin.c @@ -54,8 +54,7 @@ typedef struct _machine_pin_irq_obj_t { uint8_t pin_id; } machine_pin_irq_obj_t; -#if MICROPY_PY_MACHINE_PIN_BOARD_CPU -// Pin mapping dictionaries +// Pin mapping dictionaries generated by make-pins.py. MP_DEFINE_CONST_OBJ_TYPE( machine_pin_cpu_pins_obj_type, MP_QSTR_cpu, @@ -69,7 +68,6 @@ MP_DEFINE_CONST_OBJ_TYPE( MP_TYPE_FLAG_NONE, locals_dict, &machine_pin_board_pins_locals_dict ); -#endif // MICROPY_PY_MACHINE_PIN_BOARD_CPU STATIC const mp_irq_methods_t machine_pin_irq_methods; @@ -90,11 +88,10 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin mode_str = (mp_hal_get_pin_direction(self->pin_id) == GPIO_DIRECTION_OUT) ? "OUT" : "IN"; } - mp_printf(print, "Pin(\"%s\", mode=%s, pull=%s, GPIO=P%c%02u)", - pin_name(self->pin_id), + mp_printf(print, "Pin(Pin.cpu.%q, mode=%s, pull=%s)", + self->name, mode_str, - pull_str[mp_hal_get_pull_mode(self->pin_id)], - "ABCD"[self->pin_id / 32], self->pin_id % 32); + pull_str[mp_hal_get_pull_mode(self->pin_id)]); } STATIC void pin_validate_drive(bool strength) { @@ -292,7 +289,7 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_ mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); // Get the IRQ object. - uint8_t eic_id = get_pin_obj_ptr(self->pin_id)->eic; + uint8_t eic_id = self->eic; machine_pin_irq_obj_t *irq = MP_STATE_PORT(machine_pin_irq_objects[eic_id]); if (irq != NULL && irq->pin_id != self->pin_id) { mp_raise_ValueError(MP_ERROR_TEXT("IRQ already used")); @@ -428,11 +425,9 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_drive), MP_ROM_PTR(&machine_pin_drive_obj) }, { MP_ROM_QSTR(MP_QSTR_irq), MP_ROM_PTR(&machine_pin_irq_obj) }, - #if MICROPY_PY_MACHINE_PIN_BOARD_CPU // class attributes - { MP_ROM_QSTR(MP_QSTR_board), MP_ROM_PTR(&machine_pin_board_pins_obj_type) }, - { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&machine_pin_cpu_pins_obj_type) }, - #endif // MICROPY_PY_MACHINE_PIN_BOARD_CPU + { MP_ROM_QSTR(MP_QSTR_board), MP_ROM_PTR(&machine_pin_board_pins_obj_type) }, + { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&machine_pin_cpu_pins_obj_type) }, // class constants { MP_ROM_QSTR(MP_QSTR_IN), MP_ROM_INT(GPIO_MODE_IN) }, diff --git a/ports/samd/machine_pwm.c b/ports/samd/machine_pwm.c index 196a9b14355d5..6fc8145372bce 100644 --- a/ports/samd/machine_pwm.c +++ b/ports/samd/machine_pwm.c @@ -114,8 +114,8 @@ STATIC void mp_machine_pwm_stop(machine_pwm_obj_t *self); STATIC void mp_machine_pwm_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { machine_pwm_obj_t *self = MP_OBJ_TO_PTR(self_in); - mp_printf(print, "PWM(%s, device=%u, channel=%u, output=%u)", - pin_name(self->pin_id), self->device, self->channel, self->output); + mp_printf(print, "PWM(%q, device=%u, channel=%u, output=%u)", + pin_find_by_id(self->pin_id)->name, self->device, self->channel, self->output); } // called by the constructor and init() diff --git a/ports/samd/machine_uart.c b/ports/samd/machine_uart.c index c081b8814b9ae..ada193020b94b 100644 --- a/ports/samd/machine_uart.c +++ b/ports/samd/machine_uart.c @@ -120,7 +120,7 @@ STATIC void mp_machine_uart_print(const mp_print_t *print, mp_obj_t self_in, mp_ ", txbuf=%d" #endif #if MICROPY_HW_UART_RTSCTS - ", rts=%s, cts=%s" + ", rts=%q, cts=%q" #endif ")", self->id, self->baudrate, self->bits, _parity_name[self->parity], @@ -129,8 +129,8 @@ STATIC void mp_machine_uart_print(const mp_print_t *print, mp_obj_t self_in, mp_ , self->write_buffer.size - 1 #endif #if MICROPY_HW_UART_RTSCTS - , self->rts != 0xff ? pin_name(self->rts) : "None" - , self->cts != 0xff ? pin_name(self->cts) : "None" + , self->rts != 0xff ? pin_find_by_id(self->rts)->name : MP_QSTR_None + , self->cts != 0xff ? pin_find_by_id(self->cts)->name : MP_QSTR_None #endif ); } diff --git a/ports/samd/mcu/samd21/mpconfigmcu.h b/ports/samd/mcu/samd21/mpconfigmcu.h index f70981acd53c1..1a3d9587291fe 100644 --- a/ports/samd/mcu/samd21/mpconfigmcu.h +++ b/ports/samd/mcu/samd21/mpconfigmcu.h @@ -37,10 +37,6 @@ unsigned long trng_random_u32(int delay); #define MICROPY_PY_OS_URANDOM (1) -#ifndef MICROPY_PY_MACHINE_PIN_BOARD_CPU -#define MICROPY_PY_MACHINE_PIN_BOARD_CPU (1) -#endif - #define CPU_FREQ (48000000) #define DFLL48M_FREQ (48000000) #define MAX_CPU_FREQ (54000000) diff --git a/ports/samd/mcu/samd21/pin-af-table.csv b/ports/samd/mcu/samd21/pin-af-table.csv index b74db0c8efcaf..37bb592597edc 100644 --- a/ports/samd/mcu/samd21/pin-af-table.csv +++ b/ports/samd/mcu/samd21/pin-af-table.csv @@ -9,57 +9,56 @@ # The first column is the pin id, not the number of the board pin. # Rows not starting with pa, pb, pc or pd are ignored. # When editing the table with a spread sheet, take care to import the data as text. -# -# Pin,EIC,ADC,SERCOM1,SERCOM2,TC,TCC -pa00,0,,,10,20, -pa01,1,,,11,21, -pa02,2,0,,,, -pa03,3,1,,,, -pb04,4,12,,,, -pb05,5,13,,,, -pb06,6,14,,,, -pb07,7,15,,,, -pb08,8,2,,40,40, -pb09,9,3,,41,41, -pa04,4,4,,00,00, -pa05,5,5,,01,01, -pa06,6,6,,02,10, -pa07,7,7,,03,11, -pa08,,16,00,20,00,12 -pa09,9,17,01,21,01,13 -pa10,10,18,02,22,10,02 -pa11,11,19,03,23,11,03 -pb10,10,,,42,50,04 -pb11,11,,,43,51,05 -pb12,12,,40,,40,06 -pb13,13,,41,,41,07 -pb14,14,,42,,50, -pb15,15,,43,,51, -pa12,12,,20,40,20,06 -pa13,13,,21,41,20,07 -pa14,14,,22,42,30,04 -pa15,15,,23,43,31,05 -pa16,0,,10,30,20,06 -pa17,1,,11,31,21,07 -pa18,2,,12,32,30,02 -pa19,3,,13,33,31,03 -pb16,9,,50,,60,04 -pb17,1,,51,,61,05 -pa20,4,,52,32,70,04 -pa21,5,,53,33,71,07 -pa22,6,,30,50,40,04 -pa23,7,,31,51,41,05 -pa24,12,,32,52,50,12 -pa25,13,,33,53,51,13 -pb22,6,,,52,70, -pb23,7,,,53,71, -pa27,15,,,,, -pa28,8,,,,, -pa30,10,,,12,10, -pa31,11,,,13,11, -pb30,14,,,50,00,12 -pb31,15,,,51,01,13 -pb00,0,8,,52,70, -pb01,1,9,,53,71, -pb02,2,10,,50,60, -pb03,3,11,,51,61, +Pin,EIC,ADC0,SERCOM1,SERCOM2,TCC1,TCC2 +PA00,0,,,10,20, +PA01,1,,,11,21, +PA02,2,0,,,, +PA03,3,1,,,, +PB04,4,12,,,, +PB05,5,13,,,, +PB06,6,14,,,, +PB07,7,15,,,, +PB08,8,2,,40,40, +PB09,9,3,,41,41, +PA04,4,4,,00,00, +PA05,5,5,,01,01, +PA06,6,6,,02,10, +PA07,7,7,,03,11, +PA08,,16,00,20,00,12 +PA09,9,17,01,21,01,13 +PA10,10,18,02,22,10,02 +PA11,11,19,03,23,11,03 +PB10,10,,,42,50,04 +PB11,11,,,43,51,05 +PB12,12,,40,,40,06 +PB13,13,,41,,41,07 +PB14,14,,42,,50, +PB15,15,,43,,51, +PA12,12,,20,40,20,06 +PA13,13,,21,41,20,07 +PA14,14,,22,42,30,04 +PA15,15,,23,43,31,05 +PA16,0,,10,30,20,06 +PA17,1,,11,31,21,07 +PA18,2,,12,32,30,02 +PA19,3,,13,33,31,03 +PB16,9,,50,,60,04 +PB17,1,,51,,61,05 +PA20,4,,52,32,70,04 +PA21,5,,53,33,71,07 +PA22,6,,30,50,40,04 +PA23,7,,31,51,41,05 +PA24,12,,32,52,50,12 +PA25,13,,33,53,51,13 +PB22,6,,,52,70, +PB23,7,,,53,71, +PA27,15,,,,, +PA28,8,,,,, +PA30,10,,,12,10, +PA31,11,,,13,11, +PB30,14,,,50,00,12 +PB31,15,,,51,01,13 +PB00,0,8,,52,70, +PB01,1,9,,53,71, +PB02,2,10,,50,60, +PB03,3,11,,51,61, diff --git a/ports/samd/mcu/samd51/mpconfigmcu.h b/ports/samd/mcu/samd51/mpconfigmcu.h index 399b48c040d69..7c95c341b9aef 100644 --- a/ports/samd/mcu/samd51/mpconfigmcu.h +++ b/ports/samd/mcu/samd51/mpconfigmcu.h @@ -30,10 +30,6 @@ #define MICROPY_PY_RANDOM_SEED_INIT_FUNC (trng_random_u32()) unsigned long trng_random_u32(void); -#ifndef MICROPY_PY_MACHINE_PIN_BOARD_CPU -#define MICROPY_PY_MACHINE_PIN_BOARD_CPU (1) -#endif - // fatfs configuration used in ffconf.h #define MICROPY_FATFS_ENABLE_LFN (1) #define MICROPY_FATFS_RPATH (2) diff --git a/ports/samd/mcu/samd51/pin-af-table.csv b/ports/samd/mcu/samd51/pin-af-table.csv index 249ce6865c678..69f51a33ca170 100644 --- a/ports/samd/mcu/samd51/pin-af-table.csv +++ b/ports/samd/mcu/samd51/pin-af-table.csv @@ -10,104 +10,103 @@ # The first column is the pin id, not the number of the board pin. # Rows not starting with pa, pb, pc or pd are ignored. # When editing the table with a spread sheet, take care to import the data as text. -# -# Pin,EIC,ADC0,ADC1,SERCOM1,SERCOM2,TC,TCC1,TCC2 -pb03,9,15,,,51,61,, -pa00,0,,,,10,20,, -pa01,1,,,,11,21,, -pc00,0,,10,,,,, -pc01,1,,11,,,,, -pc02,2,,4,,,,, -pc03,3,,5,,,,, -pa02,2,0,,,,,, -pa03,3,10,,,,,, -pb04,4,,6,,,,, -pb05,5,,7,,,,, -pd00,0,,14,,,,, -pd01,1,,15,,,,, -pb06,6,,8,,,,, -pb07,7,,9,,,,, -pb08,8,2,0,,40,40,, -pb09,9,3,1,,41,41,, -pa04,4,4,,,00,00,, -pa05,5,5,,,01,01,, -pa06,6,6,,,02,10,, -pa07,7,7,,,03,11,, -pc04,4,,,60,,,00, -pc05,5,,,61,,,, -pc06,6,,,62,,,, -pc07,9,,,63,,,, -pa08,,8,2,00,21,00,00,14 -pa09,9,9,3,01,20,01,01,15 -pa10,10,10,,02,22,10,02,16 -pa11,11,11,,03,23,11,03,17 -pb10,10,,,,42,50,04,10 -pb11,12,,,,43,51,05,11 -pb12,12,,,40,,40,30,00 -pb13,13,,,41,,41,31,01 -pb14,14,,,42,,50,40,02 -pb15,15,,,43,,51,41,03 -pd08,3,,,70,61,,01, -pd09,4,,,71,60,,02, -pd10,5,,,72,62,,03, -pd11,6,,,73,63,,04, -pd12,7,,,,,,05, -pc10,10,,,62,72,,00,14 -pc11,11,,,63,73,,01,15 -pc12,12,,,70,61,,02,16 -pc13,13,,,71,60,,03,17 -pc14,14,,,72,62,,04,10 -pc15,15,,,73,63,,05,11 -pa12,12,,,20,41,20,06,12 -pa13,13,,,21,40,21,07,13 -pa14,14,,,22,42,30,20,12 -pa15,15,,,23,43,31,21,13 -pa16,0,,,10,31,20,10,04 -pa17,1,,,11,30,21,11,05 -pa18,2,,,12,32,30,12,06 -pa19,3,,,13,33,31,13,07 -pc16,0,,,60,01,,00, -pc17,1,,,61,00,,01, -pc18,2,,,62,02,,02, -pc19,3,,,63,03,,03, -pc20,4,,,,,,04, -pc21,5,,,,,,05, -pc22,6,,,10,31,,05, -pc23,7,,,11,30,,07, -pd20,10,,,12,32,,10, -pd21,11,,,13,33,,11, -pb16,0,,,50,,60,30,04 -pb17,1,,,51,,61,31,05 -pb18,2,,,52,72,,10, -pb19,3,,,53,73,,11, -pb20,4,,,30,71,,12, -pb21,5,,,31,70,,13, -pa20,4,,,52,32,70,14,00 -pa21,5,,,53,33,71,15,01 -pa22,6,,,30,51,40,16,02 -pa23,7,,,31,50,41,17,03 -pa24,8,,,32,52,50,22, -pa25,9,,,33,53,51,, -pb22,22,,,12,52,70,, -pb23,7,,,13,53,71,, -pb24,8,,,00,21,,, -pb25,9,,,01,20,,, -pb26,12,,,20,41,,12, -pb27,13,,,21,40,,13, -pb28,14,,,22,42,,14, -pb29,15,,,23,43,,15, -pc24,8,,,02,22,,, -pc25,9,,,03,23,,, -pc26,10,,,,,,, -pc27,11,,,10,,,, -pc28,12,,,11,,,, -pa27,11,,,,,,, -pa30,14,,,72,12,60,20, -pa31,15,,,73,13,61,21, -pb30,14,,,70,51,00,40,06 -pb31,15,,,71,50,01,41,07 -pc30,14,,12,,,,, -pc31,15,,13,,,,, -pb00,9,12,,,52,70,, -pb01,1,13,,,53,71,, -pb02,2,14,,,50,60,22, +Pin,EIC,ADC0,ADC1,SERCOM1,SERCOM2,TC,TCC1,TCC2 +PB03,9,15,,,51,61,, +PA00,0,,,,10,20,, +PA01,1,,,,11,21,, +PC00,0,,10,,,,, +PC01,1,,11,,,,, +PC02,2,,4,,,,, +PC03,3,,5,,,,, +PA02,2,0,,,,,, +PA03,3,10,,,,,, +PB04,4,,6,,,,, +PB05,5,,7,,,,, +PD00,0,,14,,,,, +PD01,1,,15,,,,, +PB06,6,,8,,,,, +PB07,7,,9,,,,, +PB08,8,2,0,,40,40,, +PB09,9,3,1,,41,41,, +PA04,4,4,,,00,00,, +PA05,5,5,,,01,01,, +PA06,6,6,,,02,10,, +PA07,7,7,,,03,11,, +PC04,4,,,60,,,00, +PC05,5,,,61,,,, +PC06,6,,,62,,,, +PC07,9,,,63,,,, +PA08,,8,2,00,21,00,00,14 +PA09,9,9,3,01,20,01,01,15 +PA10,10,10,,02,22,10,02,16 +PA11,11,11,,03,23,11,03,17 +PB10,10,,,,42,50,04,10 +PB11,12,,,,43,51,05,11 +PB12,12,,,40,,40,30,00 +PB13,13,,,41,,41,31,01 +PB14,14,,,42,,50,40,02 +PB15,15,,,43,,51,41,03 +PD08,3,,,70,61,,01, +PD09,4,,,71,60,,02, +PD10,5,,,72,62,,03, +PD11,6,,,73,63,,04, +PD12,7,,,,,,05, +PC10,10,,,62,72,,00,14 +PC11,11,,,63,73,,01,15 +PC12,12,,,70,61,,02,16 +PC13,13,,,71,60,,03,17 +PC14,14,,,72,62,,04,10 +PC15,15,,,73,63,,05,11 +PA12,12,,,20,41,20,06,12 +PA13,13,,,21,40,21,07,13 +PA14,14,,,22,42,30,20,12 +PA15,15,,,23,43,31,21,13 +PA16,0,,,10,31,20,10,04 +PA17,1,,,11,30,21,11,05 +PA18,2,,,12,32,30,12,06 +PA19,3,,,13,33,31,13,07 +PC16,0,,,60,01,,00, +PC17,1,,,61,00,,01, +PC18,2,,,62,02,,02, +PC19,3,,,63,03,,03, +PC20,4,,,,,,04, +PC21,5,,,,,,05, +PC22,6,,,10,31,,05, +PC23,7,,,11,30,,07, +PD20,10,,,12,32,,10, +PD21,11,,,13,33,,11, +PB16,0,,,50,,60,30,04 +PB17,1,,,51,,61,31,05 +PB18,2,,,52,72,,10, +PB19,3,,,53,73,,11, +PB20,4,,,30,71,,12, +PB21,5,,,31,70,,13, +PA20,4,,,52,32,70,14,00 +PA21,5,,,53,33,71,15,01 +PA22,6,,,30,51,40,16,02 +PA23,7,,,31,50,41,17,03 +PA24,8,,,32,52,50,22, +PA25,9,,,33,53,51,, +PB22,22,,,12,52,70,, +PB23,7,,,13,53,71,, +PB24,8,,,00,21,,, +PB25,9,,,01,20,,, +PB26,12,,,20,41,,12, +PB27,13,,,21,40,,13, +PB28,14,,,22,42,,14, +PB29,15,,,23,43,,15, +PC24,8,,,02,22,,, +PC25,9,,,03,23,,, +PC26,10,,,,,,, +PC27,11,,,10,,,, +PC28,12,,,11,,,, +PA27,11,,,,,,, +PA30,14,,,72,12,60,20, +PA31,15,,,73,13,61,21, +PB30,14,,,70,51,00,40,06 +PB31,15,,,71,50,01,41,07 +PC30,14,,12,,,,, +PC31,15,,13,,,,, +PB00,9,12,,,52,70,, +PB01,1,13,,,53,71,, +PB02,2,14,,,50,60,22, diff --git a/ports/samd/pin_af.c b/ports/samd/pin_af.c index 6de9a74778729..ca11e3b7a8f3b 100644 --- a/ports/samd/pin_af.c +++ b/ports/samd/pin_af.c @@ -40,30 +40,26 @@ extern const uint8_t tcc_channel_count[]; -#include "pin_af_table.c" - // Just look for an table entry for a given pin and raise an error // in case of no match (which should not happen). - -const machine_pin_obj_t *get_pin_obj_ptr(int pin_id) { - for (int i = 0; i < MP_ARRAY_SIZE(pin_af_table); i++) { - if (pin_af_table[i]->pin_id == pin_id) { // Pin match - return pin_af_table[i]; +const machine_pin_obj_t *pin_find_by_id(int pin_id) { + const mp_map_t *cpu_map = &machine_pin_cpu_pins_locals_dict.map; + for (uint i = 0; i < cpu_map->alloc; i++) { + machine_pin_obj_t *pin = MP_OBJ_TO_PTR(cpu_map->table[i].value); + if (pin->pin_id == pin_id) { + return pin; } } mp_raise_ValueError(MP_ERROR_TEXT("not a Pin")); } -#if MICROPY_PY_MACHINE_PIN_BOARD_CPU STATIC const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name) { - mp_map_t *named_map = mp_obj_dict_get_map((mp_obj_t)named_pins); - mp_map_elem_t *named_elem = mp_map_lookup(named_map, name, MP_MAP_LOOKUP); - if (named_elem != NULL && named_elem->value != NULL) { + mp_map_elem_t *named_elem = mp_map_lookup((mp_map_t *)&named_pins->map, name, MP_MAP_LOOKUP); + if (named_elem != NULL) { return named_elem->value; } return NULL; } -#endif const machine_pin_obj_t *pin_find(mp_obj_t pin) { // Is already a object of the proper type @@ -72,10 +68,9 @@ const machine_pin_obj_t *pin_find(mp_obj_t pin) { } if (mp_obj_is_small_int(pin)) { // Pin defined by pin number for PAnn, PBnn, etc. - return get_pin_obj_ptr(mp_obj_get_int(pin)); + return pin_find_by_id(mp_obj_get_int(pin)); } - #if MICROPY_PY_MACHINE_PIN_BOARD_CPU const machine_pin_obj_t *self = NULL; // See if the pin name matches a board pin self = pin_find_named_pin(&machine_pin_board_pins_locals_dict, pin); @@ -87,47 +82,17 @@ const machine_pin_obj_t *pin_find(mp_obj_t pin) { if (self != NULL) { return self; } - #else - if (mp_obj_is_str(pin)) { - // Search by name - size_t slen; - const char *s = mp_obj_str_get_data(pin, &slen); - // Check for a string like PA02 or PD12 - if (slen == 4 && s[0] == 'P' && strchr("ABCD", s[1]) != NULL && - strchr("0123456789", s[2]) != NULL && strchr("0123456789", s[2]) != NULL) { - int num = (s[1] - 'A') * 32 + (s[2] - '0') * 10 + (s[3] - '0'); - return get_pin_obj_ptr(num); - } else { - for (int i = 0; i < MP_ARRAY_SIZE(pin_af_table); i++) { - size_t len; - const char *name = (char *)qstr_data(pin_af_table[i]->name, &len); - if (slen == len && strncmp(s, name, slen) == 0) { - return pin_af_table[i]; - } - } - } - } - #endif // MICROPY_PY_MACHINE_PIN_BOARD_CPU mp_raise_ValueError(MP_ERROR_TEXT("not a Pin")); } -const char *pin_name(int id) { - for (int i = 0; i < sizeof(pin_af_table); i++) { - if (pin_af_table[i]->pin_id == id) { - return qstr_str(pin_af_table[i]->name); - } - } - return "-"; -} - #if MICROPY_PY_MACHINE_I2C || MICROPY_PY_MACHINE_SPI || MICROPY_PY_MACHINE_UART // Test, whether the given pin is defined and has signals for sercom. // If that applies return the alt_fct and pad_nr. // If not, an error will be raised. sercom_pad_config_t get_sercom_config(int pin_id, uint8_t sercom_nr) { - const machine_pin_obj_t *pct_ptr = get_pin_obj_ptr(pin_id); + const machine_pin_obj_t *pct_ptr = pin_find_by_id(pin_id); if ((pct_ptr->sercom1 >> 4) == sercom_nr) { return (sercom_pad_config_t) {ALT_FCT_SERCOM1, pct_ptr->sercom1 & 0x0f}; } else if ((pct_ptr->sercom2 >> 4) == sercom_nr) { @@ -144,7 +109,7 @@ sercom_pad_config_t get_sercom_config(int pin_id, uint8_t sercom_nr) { // If not, an error will be raised. adc_config_t get_adc_config(int pin_id, int32_t flag) { - const machine_pin_obj_t *pct_ptr = get_pin_obj_ptr(pin_id); + const machine_pin_obj_t *pct_ptr = pin_find_by_id(pin_id); if (pct_ptr->adc0 != 0xff && (flag & (1 << pct_ptr->adc0)) == 0) { return (adc_config_t) {0, pct_ptr->adc0}; #if defined(MUC_SAMD51) @@ -166,7 +131,7 @@ adc_config_t get_adc_config(int pin_id, int32_t flag) { // tries to provide an unused device, if available. pwm_config_t get_pwm_config(int pin_id, int wanted_dev, uint8_t device_status[]) { - const machine_pin_obj_t *pct_ptr = get_pin_obj_ptr(pin_id); + const machine_pin_obj_t *pct_ptr = pin_find_by_id(pin_id); uint8_t tcc1 = pct_ptr->tcc1; uint8_t tcc2 = pct_ptr->tcc2; diff --git a/ports/samd/pin_af.h b/ports/samd/pin_af.h index 3a15ae7f356a9..83839a0503255 100644 --- a/ports/samd/pin_af.h +++ b/ports/samd/pin_af.h @@ -92,14 +92,11 @@ typedef struct _pwm_config_t { #define ALT_FCT_SERCOM1 2 #define ALT_FCT_SERCOM2 3 -#if MICROPY_PY_MACHINE_PIN_BOARD_CPU extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict; extern const mp_obj_dict_t machine_pin_board_pins_locals_dict; -#endif sercom_pad_config_t get_sercom_config(int pin_id, uint8_t sercom); adc_config_t get_adc_config(int pin_id, int32_t flag); pwm_config_t get_pwm_config(int pin_id, int wanted_dev, uint8_t used_dev[]); -const machine_pin_obj_t *get_pin_obj_ptr(int pin_id); -const char *pin_name(int id); +const machine_pin_obj_t *pin_find_by_id(int pin_id); const machine_pin_obj_t *pin_find(mp_obj_t pin); From c0b64a3f23639bcc52d1488728771560bc9a1d0a Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Wed, 16 Aug 2023 16:45:09 +1000 Subject: [PATCH 18/20] mimxrt/boards/make-pins.py: Update to use tools/boardgen.py. Minor change to remove support for using numeric IDs for machine.Pin. This was previously based on the index of the pin in the board csv, but this is different (and incompatible) with other ports. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/mimxrt/Makefile | 1 - .../boards/MIMXRT1020_EVK/mpconfigboard.h | 4 - ports/mimxrt/boards/MIMXRT1020_EVK/pins.csv | 9 + .../boards/MIMXRT1050_EVK/mpconfigboard.h | 4 - ports/mimxrt/boards/MIMXRT1050_EVK/pins.csv | 10 + .../boards/MIMXRT1060_EVK/mpconfigboard.h | 4 - ports/mimxrt/boards/MIMXRT1060_EVK/pins.csv | 10 + .../boards/MIMXRT1064_EVK/mpconfigboard.h | 4 - ports/mimxrt/boards/MIMXRT1064_EVK/pins.csv | 10 + .../boards/MIMXRT1170_EVK/mpconfigboard.h | 4 - ports/mimxrt/boards/MIMXRT1170_EVK/pins.csv | 10 + .../boards/SEEED_ARCH_MIX/mpconfigboard.h | 5 - ports/mimxrt/boards/SEEED_ARCH_MIX/pins.csv | 12 +- ports/mimxrt/boards/TEENSY41/mpconfigboard.h | 4 - ports/mimxrt/boards/TEENSY41/pins.csv | 9 + ports/mimxrt/boards/make-pins.py | 520 ++++++------------ ports/mimxrt/boards/mimxrt_prefix.c | 6 +- ports/mimxrt/eth.c | 20 +- ports/mimxrt/led.c | 8 +- ports/mimxrt/machine_pwm.c | 5 +- ports/mimxrt/pin.c | 8 - ports/mimxrt/pin.h | 3 - 22 files changed, 260 insertions(+), 410 deletions(-) diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile index 879ee05f4a448..bdf66926b60fb 100644 --- a/ports/mimxrt/Makefile +++ b/ports/mimxrt/Makefile @@ -61,7 +61,6 @@ AF_FILE = boards/$(MCU_SERIES)_af.csv BOARD_PINS = $(BOARD_DIR)/pins.csv PREFIX_FILE = boards/mimxrt_prefix.c GEN_FLEXRAM_CONFIG_SRC = $(BUILD)/flexram_config.s -GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_SRC = $(BUILD)/pins_gen.c diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h index 8b7316c8dabfc..b4f777cf93b00 100644 --- a/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h +++ b/ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.h @@ -170,10 +170,6 @@ #define ENET_PHY_ADDRESS (2) #define ENET_PHY_OPS phyksz8081_ops -// Etherner PIN definitions -#define ENET_RESET_PIN &pin_GPIO_AD_B0_04 -#define ENET_INT_PIN &pin_GPIO_AD_B1_06 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_AD_B0_08_ENET_REF_CLK1, 1, 0xB0E9u }, \ { IOMUXC_GPIO_AD_B0_09_ENET_RDATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/MIMXRT1020_EVK/pins.csv b/ports/mimxrt/boards/MIMXRT1020_EVK/pins.csv index e1f2669b08ece..e524958dc803b 100644 --- a/ports/mimxrt/boards/MIMXRT1020_EVK/pins.csv +++ b/ports/mimxrt/boards/MIMXRT1020_EVK/pins.csv @@ -38,3 +38,12 @@ SD_RX,GPIO_AD_B1_05 SCK_TX,GPIO_AD_B1_01 WS_TX,GPIO_AD_B1_02 SD_TX,GPIO_AD_B1_03 +-ENET_RESET,-GPIO_AD_B0_04 +-ENET_INT,-GPIO_AD_B1_06 +-SD_CMD,-GPIO_SD_B0_02 +-SD_CLK,-GPIO_SD_B0_03 +-SD_CD,-GPIO_SD_B0_06 +-SD_DATA0,-GPIO_SD_B0_04 +-SD_DATA1,-GPIO_SD_B0_05 +-SD_DATA2,-GPIO_SD_B0_00 +-SD_DATA3,-GPIO_SD_B0_01 diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h index 74666562a81d5..59a5c4fa69f84 100644 --- a/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h +++ b/ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.h @@ -160,10 +160,6 @@ #define ENET_PHY_ADDRESS (2) #define ENET_PHY_OPS phyksz8081_ops -// Etherner PIN definitions -#define ENET_RESET_PIN &pin_GPIO_AD_B0_09 -#define ENET_INT_PIN &pin_GPIO_AD_B0_10 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_B1_04_ENET_RX_DATA00, 0, 0xB0E9u }, \ { IOMUXC_GPIO_B1_05_ENET_RX_DATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/MIMXRT1050_EVK/pins.csv b/ports/mimxrt/boards/MIMXRT1050_EVK/pins.csv index 4bdd9e4f033cf..dc624b6d28aa6 100644 --- a/ports/mimxrt/boards/MIMXRT1050_EVK/pins.csv +++ b/ports/mimxrt/boards/MIMXRT1050_EVK/pins.csv @@ -36,3 +36,13 @@ SD_RX,GPIO_AD_B1_12 SCK_TX,GPIO_AD_B1_14 WS_TX,GPIO_AD_B1_15 SD_TX,GPIO_AD_B1_13 + +-ENET_RESET,-GPIO_AD_B0_09 +-ENET_INT,-GPIO_AD_B0_10 +-SD_CMD,-GPIO_SD_B0_00 +-SD_CLK,-GPIO_SD_B0_01 +-SD_CD_B,-GPIO_B1_12 +-SD_DATA0,-GPIO_SD_B0_02 +-SD_DATA1,-GPIO_SD_B0_03 +-SD_DATA2,-GPIO_SD_B0_04 +-SD_DATA3,-GPIO_SD_B0_05 diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h index 824f9977c2710..58ecd74e3b516 100644 --- a/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h +++ b/ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.h @@ -158,10 +158,6 @@ #define ENET_PHY_ADDRESS (2) #define ENET_PHY_OPS phyksz8081_ops -// Etherner PIN definitions -#define ENET_RESET_PIN &pin_GPIO_AD_B0_09 -#define ENET_INT_PIN &pin_GPIO_AD_B0_10 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_B1_04_ENET_RX_DATA00, 0, 0xB0E9u }, \ { IOMUXC_GPIO_B1_05_ENET_RX_DATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/MIMXRT1060_EVK/pins.csv b/ports/mimxrt/boards/MIMXRT1060_EVK/pins.csv index 4bdd9e4f033cf..dc624b6d28aa6 100644 --- a/ports/mimxrt/boards/MIMXRT1060_EVK/pins.csv +++ b/ports/mimxrt/boards/MIMXRT1060_EVK/pins.csv @@ -36,3 +36,13 @@ SD_RX,GPIO_AD_B1_12 SCK_TX,GPIO_AD_B1_14 WS_TX,GPIO_AD_B1_15 SD_TX,GPIO_AD_B1_13 + +-ENET_RESET,-GPIO_AD_B0_09 +-ENET_INT,-GPIO_AD_B0_10 +-SD_CMD,-GPIO_SD_B0_00 +-SD_CLK,-GPIO_SD_B0_01 +-SD_CD_B,-GPIO_B1_12 +-SD_DATA0,-GPIO_SD_B0_02 +-SD_DATA1,-GPIO_SD_B0_03 +-SD_DATA2,-GPIO_SD_B0_04 +-SD_DATA3,-GPIO_SD_B0_05 diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h index cb64d2b9d24f8..3170849fe7093 100644 --- a/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h +++ b/ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.h @@ -158,10 +158,6 @@ #define ENET_PHY_ADDRESS (2) #define ENET_PHY_OPS phyksz8081_ops -// Etherner PIN definitions -#define ENET_RESET_PIN &pin_GPIO_AD_B0_09 -#define ENET_INT_PIN &pin_GPIO_AD_B0_10 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_B1_04_ENET_RX_DATA00, 0, 0xB0E9u }, \ { IOMUXC_GPIO_B1_05_ENET_RX_DATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/MIMXRT1064_EVK/pins.csv b/ports/mimxrt/boards/MIMXRT1064_EVK/pins.csv index 4bdd9e4f033cf..dc624b6d28aa6 100644 --- a/ports/mimxrt/boards/MIMXRT1064_EVK/pins.csv +++ b/ports/mimxrt/boards/MIMXRT1064_EVK/pins.csv @@ -36,3 +36,13 @@ SD_RX,GPIO_AD_B1_12 SCK_TX,GPIO_AD_B1_14 WS_TX,GPIO_AD_B1_15 SD_TX,GPIO_AD_B1_13 + +-ENET_RESET,-GPIO_AD_B0_09 +-ENET_INT,-GPIO_AD_B0_10 +-SD_CMD,-GPIO_SD_B0_00 +-SD_CLK,-GPIO_SD_B0_01 +-SD_CD_B,-GPIO_B1_12 +-SD_DATA0,-GPIO_SD_B0_02 +-SD_DATA1,-GPIO_SD_B0_03 +-SD_DATA2,-GPIO_SD_B0_04 +-SD_DATA3,-GPIO_SD_B0_05 diff --git a/ports/mimxrt/boards/MIMXRT1170_EVK/mpconfigboard.h b/ports/mimxrt/boards/MIMXRT1170_EVK/mpconfigboard.h index 8ce91adbaf23e..131c5e1725477 100644 --- a/ports/mimxrt/boards/MIMXRT1170_EVK/mpconfigboard.h +++ b/ports/mimxrt/boards/MIMXRT1170_EVK/mpconfigboard.h @@ -155,10 +155,6 @@ #define ENET_PHY KSZ8081 #define ENET_PHY_OPS phyksz8081_ops -// 10/100 Ethernet PIN definitions -#define ENET_RESET_PIN &pin_GPIO_LPSR_12 -#define ENET_INT_PIN &pin_GPIO_AD_12 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_DISP_B2_06_ENET_RX_DATA00, 0, 0x06u }, \ { IOMUXC_GPIO_DISP_B2_07_ENET_RX_DATA01, 0, 0x06u }, \ diff --git a/ports/mimxrt/boards/MIMXRT1170_EVK/pins.csv b/ports/mimxrt/boards/MIMXRT1170_EVK/pins.csv index 77f87e8ba15c7..30062fe3445ff 100644 --- a/ports/mimxrt/boards/MIMXRT1170_EVK/pins.csv +++ b/ports/mimxrt/boards/MIMXRT1170_EVK/pins.csv @@ -57,3 +57,13 @@ SD_RX,GPIO_AD_20 SCK_TX,GPIO_AD_22 WS_TX,GPIO_AD_23 SD_TX,GPIO_AD_21 + +-ENET_RESET,-GPIO_LPSR_12 +-ENET_INT,-GPIO_AD_12 +-ENET_1_RESET,-GPIO_DISP_B2_13 +-SD_CMD,-GPIO_SD_B1_00 +-SD_CLK,-GPIO_SD_B1_01 +-SD_DATA0,-GPIO_SD_B1_02 +-SD_DATA1,-GPIO_SD_B1_03 +-SD_DATA2,-GPIO_SD_B1_04 +-SD_DATA3,-GPIO_SD_B1_05 diff --git a/ports/mimxrt/boards/SEEED_ARCH_MIX/mpconfigboard.h b/ports/mimxrt/boards/SEEED_ARCH_MIX/mpconfigboard.h index edda72f2660d1..627b1aa3b1311 100644 --- a/ports/mimxrt/boards/SEEED_ARCH_MIX/mpconfigboard.h +++ b/ports/mimxrt/boards/SEEED_ARCH_MIX/mpconfigboard.h @@ -127,11 +127,6 @@ #define ENET_PHY_OPS phylan8720_ops #define ENET_TX_CLK_OUTPUT false -// Etherner PIN definitions -// No reset and interrupt pin by intention -#define ENET_RESET_PIN NULL -#define ENET_INT_PIN NULL - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_B1_04_ENET_RX_DATA00, 0, 0xB0E9u }, \ { IOMUXC_GPIO_B1_05_ENET_RX_DATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/SEEED_ARCH_MIX/pins.csv b/ports/mimxrt/boards/SEEED_ARCH_MIX/pins.csv index 6b757fae4b07c..785a442dbca18 100644 --- a/ports/mimxrt/boards/SEEED_ARCH_MIX/pins.csv +++ b/ports/mimxrt/boards/SEEED_ARCH_MIX/pins.csv @@ -9,7 +9,7 @@ J3_11,GPIO_B1_07 J3_12,GPIO_B1_09 J3_13,GPIO_B1_10 J3_14,GPIO_AD_B0_14 -J3_15,GPO_AD_B0_15 +J3_15,GPIO_AD_B0_15 J3_16,GPIO_AD_B1_00 J3_17,GPIO_AD_B1_01 J3_19,GPIO_AD_B0_13 @@ -67,3 +67,13 @@ SD_RX,GPIO_AD_B1_12 SCK_TX,GPIO_AD_B1_14 WS_TX,GPIO_AD_B1_15 SD_TX,GPIO_AD_B1_13 + +# No ethernet reset and interrupt pin by intention + +-SD_CMD,-GPIO_SD_B0_00 +-SD_CLK,-GPIO_SD_B0_01 +-SD_CD_B,-GPIO_B1_12 +-SD_DATA0,-GPIO_SD_B0_02 +-SD_DATA1,-GPIO_SD_B0_03 +-SD_DATA2,-GPIO_SD_B0_04 +-SD_DATA3,-GPIO_SD_B0_05 diff --git a/ports/mimxrt/boards/TEENSY41/mpconfigboard.h b/ports/mimxrt/boards/TEENSY41/mpconfigboard.h index 09addbe52c219..bff319c6d1576 100644 --- a/ports/mimxrt/boards/TEENSY41/mpconfigboard.h +++ b/ports/mimxrt/boards/TEENSY41/mpconfigboard.h @@ -125,10 +125,6 @@ #define ENET_PHY_ADDRESS (0) #define ENET_PHY_OPS phydp83825_ops -// Ethernet PIN definitions -#define ENET_RESET_PIN &pin_GPIO_B0_14 -#define ENET_INT_PIN &pin_GPIO_B0_15 - #define IOMUX_TABLE_ENET \ { IOMUXC_GPIO_B1_04_ENET_RX_DATA00, 0, 0xB0E9u }, \ { IOMUXC_GPIO_B1_05_ENET_RX_DATA01, 0, 0xB0E9u }, \ diff --git a/ports/mimxrt/boards/TEENSY41/pins.csv b/ports/mimxrt/boards/TEENSY41/pins.csv index b28a22312c707..e09c979620a23 100755 --- a/ports/mimxrt/boards/TEENSY41/pins.csv +++ b/ports/mimxrt/boards/TEENSY41/pins.csv @@ -88,3 +88,12 @@ SD_RX,GPIO_B1_00 SCK_TX,GPIO_EMC_06 WS_TX,GPIO_EMC_05 SD_TX,GPIO_EMC_04 + +-ENET_RESET,-GPIO_B0_14 +-ENET_INT,-GPIO_B0_15 +-SD_CMD,-GPIO_SD_B0_00 +-SD_CLK,-GPIO_SD_B0_01 +-SD_DATA0,-GPIO_SD_B0_02 +-SD_DATA1,-GPIO_SD_B0_03 +-SD_DATA2,-GPIO_SD_B0_04 +-SD_DATA3,-GPIO_SD_B0_05 diff --git a/ports/mimxrt/boards/make-pins.py b/ports/mimxrt/boards/make-pins.py index d6752af1e910a..55c7f5bd02738 100644 --- a/ports/mimxrt/boards/make-pins.py +++ b/ports/mimxrt/boards/make-pins.py @@ -1,19 +1,15 @@ #!/usr/bin/env python -"""Creates the pin file for the MIMXRT10xx.""" -from __future__ import print_function - -import argparse -import sys -import csv +from collections import defaultdict +import os import re +import sys -SUPPORTED_AFS = {"GPIO", "USDHC", "FLEXPWM", "TMR"} -MAX_AF = 10 # AF0 .. AF9 -ADC_COL = 11 +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen -regexes = [ +IOMUX_REGEXS = [ r"IOMUXC_(?PGPIO_SD_B\d_\d\d)_(?P\w+) (?P\w+), (?P\w+), (?P\w+), (?P\w+), (?P\w+)", r"IOMUXC_(?PGPIO_AD_B\d_\d\d)_(?P\w+) (?P\w+), (?P\w+), (?P\w+), (?P\w+), (?P\w+)", r"IOMUXC_(?PGPIO_EMC_\d\d)_(?P\w+) (?P\w+), (?P\w+), (?P\w+), (?P\w+), (?P\w+)", @@ -30,387 +26,197 @@ r"IOMUXC_(?PGPIO_SNVS_\d\d_DIG)_(?P\w+) (?P\w+), (?P\w+), (?P\w+), (?P\w+), (?P\w+)", ] - -def parse_pad(pad_str): - """Parses a string and returns a (port, gpio_bit) tuple.""" - if len(pad_str) < 4: - raise ValueError("Expecting pad name to be at least 4 characters") - if pad_str[:4] != "GPIO": - raise ValueError("Expecting pad name to start with GPIO") - return pad_str - - -def af_supported(af_str): - for supported_af in SUPPORTED_AFS: - if af_str.startswith(supported_af): - return True - else: - return False - - -class Pin(object): - """Holds the information associated with a pin.""" - - def __init__(self, pad, gpio, pin, idx=0): - self.idx = idx - self.name = pad - self.pad = pad - self.gpio = gpio - self.pin = pin - self.alt_fn = [] - self.adc_fns = [] - self.board_pin = False - - def set_is_board_pin(self): - self.board_pin = True - - def is_board_pin(self): - return self.board_pin - - def parse_adc(self, adc_str): - adc_regex = r"ADC(?P\d*)_IN(?P\d*)" - lpadc_regex = r"ADC(?P\d*)_CH(?P\d*)" # LPADC for MIMXRT11xx chips - - matches = re.finditer(adc_regex, adc_str, re.MULTILINE) - for match in matches: - self.adc_fns.append( - AdcFunction(instance=match.group("instance"), channel=match.group("channel")) - ) - - matches = re.finditer(lpadc_regex, adc_str, re.MULTILINE) - for match in matches: - self.adc_fns.append( - AdcFunction( - peripheral="LPADC", - instance=match.group("instance"), - channel=match.group("channel"), +SUPPORTED_AF_FNS = {"GPIO", "USDHC", "FLEXPWM", "TMR"} + + +class MimxrtPin(boardgen.Pin): + def __init__(self, cpu_pin_name): + super().__init__(cpu_pin_name) + + self._afs = [] + self._adc_fns = [] + + # Called for each AF defined in the csv file for this pin. + def add_af(self, af_idx, af_name, af): + # mimxrt-specific: Any pin in the af.csv is implicitly part of the board + # pins.csv and will therefore be in the Pin.cpu dict. This is + # equivalent to adding `,CPUNAME` to the board.csv for every pin in the + # af.csv. + self._available = True + + if af_name == "ALT5": + m = re.match("GPIO([0-9]+)_IO([0-9]+)", af) + self._port = int(m.group(1)) + self._pin = int(m.group(2)) + + if af_name.startswith("ALT"): + instance = af.split("_")[0] + fn = re.match("^([A-Z][A-Z0-9]+[A-Z])[0-9]*$", instance).group(1) + if fn not in SUPPORTED_AF_FNS: + return + iomux_config = self._generator._iomux_pin_config[self.name()] + input_reg = iomux_config[af_idx]["inputRegister"].strip("U") + input_daisy = int(iomux_config[af_idx]["inputDaisy"].strip("U"), 16) + self._afs.append((af_idx, input_reg, input_daisy, instance, fn, af)) + + elif af_name == "ADC": + adc_regex = r"ADC(?P\d*)_IN(?P\d*)" + lpadc_regex = r"ADC(?P\d*)_CH(?P\d*)" # LPADC for MIMXRT11xx chips + + matches = re.finditer(adc_regex, af, re.MULTILINE) + for match in matches: + self._adc_fns.append( + (int(match.group("instance")), int(match.group("channel")), "ADC") ) - ) - def parse_af(self, af_idx, af_strs_in): - pass - - def add_af(self, af): - self.alt_fn.append(af) + matches = re.finditer(lpadc_regex, af, re.MULTILINE) + for match in matches: + self._adc_fns.append( + (int(match.group("instance")), int(match.group("channel")), "LPADC") + ) - def print_pin_af(self, out_source): - if self.alt_fn: - print( - "static const machine_pin_af_obj_t pin_{0}_af[{1}] = {{".format( - self.name, len(self.alt_fn) - ), - file=out_source, - ) - for af in self.alt_fn: - af.print(out_source) - print("};", file=out_source) + # Use the PIN() macro defined in samd_prefix.c for defining the pin + # objects. + def definition(self): + if "_LPSR_" in self.name(): + macro = "PIN_LPSR" + elif ( + "_SNVS_" in self.name() + or self.name().startswith("PMIC_") + or self.name().startswith("WAKEUP") + ): + macro = "PIN_SNVS" else: - raise ValueError("Pin '{}' has no alternative functions".format(self.name)) + macro = "PIN" + + # PIN(_name, _gpio, _pin, _af_list, _adc_list_len, _adc_list) + return "{:s}({:s}, GPIO{:d}, {:d}, pin_{:s}_af, {:d}, {:s})".format( + macro, + self.name(), + self._port, + self._pin, + self.name(), + len(self._adc_fns), + "pin_{:s}_adc".format(self.name()) if self._adc_fns else "NULL", + ) - def print_pin_adc(self, out_source): - if self.adc_fns: + # This will be called at the start of the output (after the prefix) for + # each pin. Use it to emit the af and adc objects. + def print_source(self, out_source): + print( + "static const machine_pin_af_obj_t pin_{:s}_af[] = {{".format(self.name()), + file=out_source, + ) + for af_idx, input_reg, input_daisy, instance, _fn, af in self._afs: print( - "static const machine_pin_adc_obj_t pin_{0}_adc[{1}] = {{".format( - self.name, len(self.adc_fns) + " PIN_AF({:s}, PIN_AF_MODE_ALT{:d}, {:d}, {:s}, {:s}, {:s}),".format( + af, af_idx, input_daisy, instance, input_reg, "0x10B0U" ), file=out_source, ) - for adc_fn in self.adc_fns: - adc_fn.print(out_source) - print("};", file=out_source) - - def print(self, out_source): - if self.alt_fn: - self.print_pin_af(out_source) - self.print_pin_adc(out_source) - - options = { - "GPIO_LPSR_00": "PIN_LPSR", - "GPIO_LPSR_01": "PIN_LPSR", - "GPIO_LPSR_02": "PIN_LPSR", - "GPIO_LPSR_03": "PIN_LPSR", - "GPIO_LPSR_04": "PIN_LPSR", - "GPIO_LPSR_05": "PIN_LPSR", - "GPIO_LPSR_06": "PIN_LPSR", - "GPIO_LPSR_07": "PIN_LPSR", - "GPIO_LPSR_08": "PIN_LPSR", - "GPIO_LPSR_09": "PIN_LPSR", - "GPIO_LPSR_10": "PIN_LPSR", - "GPIO_LPSR_11": "PIN_LPSR", - "GPIO_LPSR_12": "PIN_LPSR", - "GPIO_LPSR_13": "PIN_LPSR", - "GPIO_LPSR_14": "PIN_LPSR", - "GPIO_LPSR_15": "PIN_LPSR", - "GPIO_SNVS_00_DIG": "PIN_SNVS", - "GPIO_SNVS_01_DIG": "PIN_SNVS", - "GPIO_SNVS_02_DIG": "PIN_SNVS", - "GPIO_SNVS_03_DIG": "PIN_SNVS", - "GPIO_SNVS_04_DIG": "PIN_SNVS", - "GPIO_SNVS_05_DIG": "PIN_SNVS", - "GPIO_SNVS_06_DIG": "PIN_SNVS", - "GPIO_SNVS_07_DIG": "PIN_SNVS", - "GPIO_SNVS_08_DIG": "PIN_SNVS", - "GPIO_SNVS_09_DIG": "PIN_SNVS", - "WAKEUP": "PIN_SNVS", - "WAKEUP_DIG": "PIN_SNVS", - "PMIC_ON_REQ": "PIN_SNVS", - "PMIC_ON_REQ_DIG": "PIN_SNVS", - "PMIC_STBY_REQ": "PIN_SNVS", - "PMIC_STBY_REQ_DIG": "PIN_SNVS", - } + print("};", file=out_source) + print(file=out_source) + if self._adc_fns: print( - "const machine_pin_obj_t pin_{0} = {1}({0}, {2}, {3}, pin_{0}_af, {4}, {5});\n".format( - self.name, - options.get(self.name, "PIN"), - self.gpio, - int(self.pin), - len(self.adc_fns), - "pin_{}_adc".format(self.name) if self.adc_fns else "NULL", - ), + "static const machine_pin_adc_obj_t pin_{:s}_adc[] = {{".format(self.name()), file=out_source, ) - else: - raise ValueError("Pin '{}' has no alternative functions".format(self.name)) - - def print_header(self, out_header): - pass - - -class AdcFunction(object): - """Holds the information associated with a pins ADC function.""" - - def __init__(self, instance, channel, peripheral="ADC"): - self.peripheral = peripheral - self.instance = instance - self.channel = channel - - def print(self, out_source): - """Prints the C representation of this AF.""" - print(f" PIN_ADC({self.peripheral}{self.instance}, {self.channel}),", file=out_source) + for instance, channel, peripheral in self._adc_fns: + print( + " PIN_ADC({:s}{:d}, {:d}),".format(peripheral, instance, channel), + file=out_source, + ) + print("};", file=out_source) + # mimxrt cpu names must be "GPIO__", with zero-prefixed two-digit . + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) -class AlternateFunction(object): - """Holds the information associated with a pins alternate function.""" + if not re.match( + "^((GPIO_((SNVS|EMC|LPSR|DISP)_)?([AS]D_)?(B[012]_)?[0-9][0-9])|WAKEUP|PMIC_(ON|STBY)_REQ)(_DIG)?$", + cpu_pin_name, + ): + raise boardgen.PinGeneratorError("Invalid cpu pin name '{}'".format(cpu_pin_name)) - def __init__(self, idx, input_reg, input_daisy, af_str): - self.idx = idx - self.af_str = af_str - self.input_reg = input_reg - self.input_daisy = input_daisy - self.instance = self.af_str.split("_")[0] - def print(self, out_source): - """Prints the C representation of this AF.""" - print( - " PIN_AF({0}, PIN_AF_MODE_ALT{1}, {2}, {3}, {4}, {5}),".format( - self.af_str, self.idx, self.input_daisy, self.instance, self.input_reg, "0x10B0U" - ), - file=out_source, +class MimxrtPinGenerator(boardgen.PinGenerator): + def __init__(self): + # Use custom pin type above, and also enable the --af-csv argument so + # that add_af gets called on each pin. + super().__init__( + pin_type=MimxrtPin, + enable_af=True, ) + self._iomux_pin_config = {} - -class NamedPin(object): - def __init__(self, name, pad, idx): - self.name = name - self.pad = pad - self.idx = idx - - -class Pins(object): - def __init__(self): - self.cpu_pins = [] - self.board_pins = [] - - def find_pin_by_num(self, pin_num): - for pin in self.cpu_pins: - if pin.pin_num == pin_num: - return pin - - def find_pin_by_name(self, pad): - for pin in self.cpu_pins: - if pin.pad == pad: - return pin - - def parse_board_file(self, filename): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - if len(row) == 0 or row[0].startswith("#"): - # Skip empty lines, and lines starting with "#" - continue - if len(row) != 2: - raise ValueError("Expecting two entries in a row") - - pin = self.find_pin_by_name(row[1]) - if pin and row[0]: # Only add board pins that have a name - self.board_pins.append(NamedPin(row[0], pin.pad, pin.idx)) - - def parse_af_file(self, filename, iomux_filename): - iomux_pin_config = dict() + # Load the iomux configuration from fsl_iomuxc.h. + def load_iomux_header(self, iomux_filename): with open(iomux_filename, "r") as ipt: input_str = ipt.read() - for regex in regexes: + for regex in IOMUX_REGEXS: matches = re.finditer(regex, input_str, re.MULTILINE) for match in matches: - if match.group("pin") not in iomux_pin_config: - iomux_pin_config[match.group("pin")] = { + if match.group("pin") not in self._iomux_pin_config: + self._iomux_pin_config[match.group("pin")] = { int((match.groupdict()["muxMode"].strip("U")), 16): match.groupdict() } else: - iomux_pin_config[match.group("pin")][ + self._iomux_pin_config[match.group("pin")][ int((match.groupdict()["muxMode"].strip("U")), 16) ] = match.groupdict() - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - header = next(rows) - # Extract indexes from header row - pad_col = header.index("Pad") - adc_col = header.index("ADC") - # - for idx, row in enumerate(rows): - pad = row[pad_col] - gpio, pin = row[6].split("_") - pin_number = pin.lstrip("IO") - pin = Pin(pad, gpio, pin_number, idx=idx) - - # Parse alternate functions - af_idx = 0 - for af_idx, af in enumerate(row[(pad_col + 1) : adc_col]): - if af and af_supported(af): - pin.add_af( - AlternateFunction( - af_idx, - iomux_pin_config[pin.name][af_idx]["inputRegister"].strip("U"), - int( - iomux_pin_config[pin.name][af_idx]["inputDaisy"].strip("U"), 16 - ), - af, + # Also load the iomux header. + def load_inputs(self, out_source): + if self.args.iomux_header: + print("// --iomux-header {:s}".format(self.args.iomux_header), file=out_source) + self.load_iomux_header(self.args.iomux_header) + + super().load_inputs(out_source) + + # Provide a macro for each supported (pin,af) that can be used to + # initialise a struct containing a machine_pin_obj_t* and the + # corresponding af for that pin. e.g. A mimxrt_sdcard_pin_t instance can + # be initialised with GPIO_SD_B0_00_USDHC1_CMD which tells it how to get + # the CMD pin of the USDHC1 function on the GPIO_SD_B0_00 pin. + def print_module_instances(self, out_header): + print(file=out_header) + for match_fn in ("USDHC", "FLEXPWM", "TMR"): + module_instances = defaultdict(list) + for pin in self.available_pins(): + for i, (_af_idx, _input_reg, _input_daisy, instance, fn, af) in enumerate( + pin._afs + ): + if fn == match_fn: + module_instances[instance].append( + "#define {:s}_{:s} pin_{:s}, {:d}".format( + pin.name(), af, pin.name(), i ) ) + for k, v in module_instances.items(): + print("// {:s}".format(k), file=out_header) + print("#define {:s}_AVAIL (1)".format(k), file=out_header) + if match_fn == "FLEXPWM": + print("#define {:s} {:s}".format(k, k[-4:]), file=out_header) + for i in v: + print(i, file=out_header) + + # Override to also print the module instances. + def print_header(self, out_header): + super().print_header(out_header) + self.print_module_instances(out_header) - pin.parse_adc(row[adc_col]) - - self.cpu_pins.append(pin) - - @staticmethod - def print_named(label, pins, out_source): - print("", file=out_source) - print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), - file=out_source, - ) - for pin in pins: - ( - print( - " {{ MP_ROM_QSTR(MP_QSTR_{}), MP_ROM_PTR(&pin_{}) }},".format( - pin.name, pin.pad - ), - file=out_source, - ), - ) - print("};", file=out_source) - print( - "MP_DEFINE_CONST_DICT(machine_pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( - label, label - ), - file=out_source, - ) - - def print(self, out_source): - # Print Pin Object declarations - for pin in self.cpu_pins: - pin.print(out_source) - - print("", file=out_source) - print("const machine_pin_obj_t* machine_pin_board_pins [] = {", file=out_source) - for pin in self.board_pins: - print(" &pin_{},".format(pin.pad), file=out_source) - print("};", file=out_source) - print( - "const uint32_t num_board_pins = {:d};".format(len(self.board_pins)), file=out_source - ) - # Print Pin mapping dictionaries - self.print_named("cpu", self.cpu_pins, out_source) - self.print_named("board", self.board_pins, out_source) - print("", file=out_source) + # Override the default implementation just to change the default arguments + # (extra header row, skip first column). + def parse_af_csv(self, filename): + return super().parse_af_csv(filename, header_rows=1, pin_col=0, af_col=1) - def print_header(self, out_header): - for pin in self.cpu_pins: - print("extern const machine_pin_obj_t pin_{};".format(pin.name), file=out_header) - print("extern const machine_pin_obj_t* machine_pin_board_pins[];", file=out_header) - print("extern const uint32_t num_board_pins;", file=out_header) - print("extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict;", file=out_header) - print("extern const mp_obj_dict_t machine_pin_board_pins_locals_dict;", file=out_header) - print("", file=out_header) - print("// Defines", file=out_header) - module_instance_factory(self.cpu_pins, out_header, "USDHC") - module_instance_factory(self.cpu_pins, out_header, "FLEXPWM") - module_instance_factory(self.cpu_pins, out_header, "TMR") - - -def module_instance_factory(pins, out_header, name): - module_pin = filter(lambda p: any([af for af in p.alt_fn if name in af.af_str]), pins) - - module_instances = dict() - for pin in module_pin: - for idx, alt_fn in enumerate(pin.alt_fn): - if name in alt_fn.instance: - format_string = "#define {0}_{1} &pin_{0}, {2}" - if alt_fn.instance not in module_instances: - module_instances[alt_fn.instance] = [ - format_string.format(pin.name, alt_fn.af_str, idx) - ] - else: - module_instances[alt_fn.instance].append( - format_string.format(pin.name, alt_fn.af_str, idx) - ) - - for k, v in module_instances.items(): - print(f"// {k}", file=out_header) - print(f"#define {k}_AVAIL (1)", file=out_header) - if name == "FLEXPWM": - print(f"#define {k} {k[-4:]}", file=out_header) - for i in v: - print(i, file=out_header) - - -def main(): - parser = argparse.ArgumentParser(description="Generate board specific pin file") - parser.add_argument("--board-csv") - parser.add_argument("--af-csv") - parser.add_argument("--prefix") - parser.add_argument("--iomux-header") - parser.add_argument("--output-source") - parser.add_argument("--output-header") - args = parser.parse_args() - - pins = Pins() - - with open(args.output_source, "w") as out_source: - if args.af_csv: - print("// --af {:s}".format(args.af_csv), file=out_source) - pins.parse_af_file(args.af_csv, args.iomux_header) - - if args.board_csv: - print("// --board {:s}".format(args.board_csv), file=out_source) - pins.parse_board_file(args.board_csv) - - if args.output_header: - print("// --hdr {:s}".format(args.output_header), file=out_source) - - if args.prefix: - print("// --prefix {:s}".format(args.prefix), file=out_source) - with open(args.prefix, "r") as prefix_file: - print(prefix_file.read(), file=out_source) - - pins.print(out_source) - - with open(args.output_header, "w") as out_header: - pins.print_header(out_header) + # We need to know the mcu to emit the correct AF list. + def extra_args(self, parser): + parser.add_argument("--iomux-header") if __name__ == "__main__": - main() + MimxrtPinGenerator().main() diff --git a/ports/mimxrt/boards/mimxrt_prefix.c b/ports/mimxrt/boards/mimxrt_prefix.c index 3097535c524b2..49d6e67dc4083 100644 --- a/ports/mimxrt/boards/mimxrt_prefix.c +++ b/ports/mimxrt/boards/mimxrt_prefix.c @@ -30,7 +30,7 @@ .pin = (uint32_t)(_pin), \ .muxRegister = (uint32_t)&(IOMUXC->SW_MUX_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_##_name]), \ .configRegister = (uint32_t)&(IOMUXC->SW_PAD_CTL_PAD[kIOMUXC_SW_PAD_CTL_PAD_##_name]), \ - .af_list_len = (uint8_t)(sizeof((_af_list)) / sizeof(machine_pin_af_obj_t)), \ + .af_list_len = MP_ARRAY_SIZE(_af_list), \ .adc_list_len = (_adc_list_len), \ .af_list = (_af_list), \ .adc_list = (_adc_list), \ @@ -44,7 +44,7 @@ .pin = (uint32_t)(_pin), \ .muxRegister = (uint32_t)&(IOMUXC_LPSR->SW_MUX_CTL_PAD[kIOMUXC_LPSR_SW_MUX_CTL_PAD_##_name]), \ .configRegister = (uint32_t)&(IOMUXC_LPSR->SW_PAD_CTL_PAD[kIOMUXC_LPSR_SW_PAD_CTL_PAD_##_name]), \ - .af_list_len = (uint8_t)(sizeof((_af_list)) / sizeof(machine_pin_af_obj_t)), \ + .af_list_len = MP_ARRAY_SIZE(_af_list), \ .adc_list_len = (_adc_list_len), \ .af_list = (_af_list), \ .adc_list = (_adc_list), \ @@ -58,7 +58,7 @@ .pin = (uint32_t)(_pin), \ .muxRegister = (uint32_t)&(IOMUXC_SNVS->SW_MUX_CTL_PAD_##_name), \ .configRegister = (uint32_t)&(IOMUXC_SNVS->SW_PAD_CTL_PAD_##_name), \ - .af_list_len = (uint8_t)(sizeof((_af_list)) / sizeof(machine_pin_af_obj_t)), \ + .af_list_len = MP_ARRAY_SIZE(_af_list), \ .adc_list_len = (_adc_list_len), \ .af_list = (_af_list), \ .adc_list = (_adc_list), \ diff --git a/ports/mimxrt/eth.c b/ports/mimxrt/eth.c index befccca1cd660..ed9db81298094 100644 --- a/ports/mimxrt/eth.c +++ b/ports/mimxrt/eth.c @@ -365,7 +365,15 @@ void eth_init_0(eth_t *self, int eth_id, const phy_operations_t *phy_ops, int ph uint32_t source_clock = eth_clock_init(eth_id, phy_clock); - eth_gpio_init(iomux_table_enet, ARRAY_SIZE(iomux_table_enet), ENET_RESET_PIN, ENET_INT_PIN); + const machine_pin_obj_t *reset_pin = NULL; + #if defined(pin_ENET_RESET) + reset_pin = pin_ENET_RESET; + #endif + const machine_pin_obj_t *int_pin = NULL; + #if defined(pin_ENET_INT) + int_pin = pin_ENET_INT; + #endif + eth_gpio_init(iomux_table_enet, ARRAY_SIZE(iomux_table_enet), reset_pin, int_pin); mp_hal_get_mac(0, hw_addr); @@ -411,7 +419,15 @@ void eth_init_1(eth_t *self, int eth_id, const phy_operations_t *phy_ops, int ph uint32_t source_clock = eth_clock_init(eth_id, phy_clock); - eth_gpio_init(iomux_table_enet_1, ARRAY_SIZE(iomux_table_enet_1), ENET_1_RESET_PIN, ENET_1_INT_PIN); + const machine_pin_obj_t *reset_pin = NULL; + #if defined(pin_ENET_1_INT) + reset_pin = pin_ENET_1_RESET; + #endif + const machine_pin_obj_t *int_pin = NULL; + #if defined(pin_ENET_1_INT) + int_pin = pin_ENET_1_INT; + #endif + eth_gpio_init(iomux_table_enet_1, ARRAY_SIZE(iomux_table_enet_1), reset_pin, int_pin); #if defined MIMXRT117x_SERIES NVIC_SetPriority(ENET_1G_MAC0_Tx_Rx_1_IRQn, IRQ_PRI_PENDSV); diff --git a/ports/mimxrt/led.c b/ports/mimxrt/led.c index 99876a5d9005d..eb4d42cd9fdbe 100644 --- a/ports/mimxrt/led.c +++ b/ports/mimxrt/led.c @@ -34,13 +34,13 @@ #if defined(MICROPY_HW_LED1_PIN) const machine_led_obj_t machine_led_obj[] = { - { .base = {&machine_led_type}, .led_id = 1U, .led_pin = &MICROPY_HW_LED1_PIN, }, + { .base = {&machine_led_type}, .led_id = 1U, .led_pin = MICROPY_HW_LED1_PIN, }, #if defined(MICROPY_HW_LED2_PIN) - { .base = {&machine_led_type}, .led_id = 2U, .led_pin = &MICROPY_HW_LED2_PIN, }, + { .base = {&machine_led_type}, .led_id = 2U, .led_pin = MICROPY_HW_LED2_PIN, }, #if defined(MICROPY_HW_LED3_PIN) - { .base = {&machine_led_type}, .led_id = 3U, .led_pin = &MICROPY_HW_LED3_PIN, }, + { .base = {&machine_led_type}, .led_id = 3U, .led_pin = MICROPY_HW_LED3_PIN, }, #if defined(MICROPY_HW_LED4_PIN) - { .base = {&machine_led_type}, .led_id = 4U, .led_pin = &MICROPY_HW_LED4_PIN, }, + { .base = {&machine_led_type}, .led_id = 4U, .led_pin = MICROPY_HW_LED4_PIN, }, #endif #endif #endif diff --git a/ports/mimxrt/machine_pwm.c b/ports/mimxrt/machine_pwm.c index 7b95d78877cdf..98545eec95c51 100644 --- a/ports/mimxrt/machine_pwm.c +++ b/ports/mimxrt/machine_pwm.c @@ -191,8 +191,9 @@ STATIC const machine_pin_af_obj_t *af_name_decode_qtmr(const machine_pin_af_obj_ #endif STATIC bool is_board_pin(const machine_pin_obj_t *pin) { - for (int i = 0; i < num_board_pins; i++) { - if (pin == machine_pin_board_pins[i]) { + const mp_map_t *board_map = &machine_pin_board_pins_locals_dict.map; + for (uint i = 0; i < board_map->alloc; i++) { + if (pin == MP_OBJ_TO_PTR(board_map->table[i].value)) { return true; } } diff --git a/ports/mimxrt/pin.c b/ports/mimxrt/pin.c index 4403f6ac77f77..b7b33da5aeab5 100644 --- a/ports/mimxrt/pin.c +++ b/ports/mimxrt/pin.c @@ -152,14 +152,6 @@ const machine_pin_obj_t *pin_find(mp_obj_t user_obj) { return pin_obj; } - // If pin is SMALL_INT - if (mp_obj_is_small_int(user_obj)) { - uint8_t value = MP_OBJ_SMALL_INT_VALUE(user_obj); - if (value < num_board_pins) { - return machine_pin_board_pins[value]; - } - } - // See if the pin name matches a board pin pin_obj = pin_find_named_pin(&machine_pin_board_pins_locals_dict, user_obj); if (pin_obj) { diff --git a/ports/mimxrt/pin.h b/ports/mimxrt/pin.h index bf611aa9893a6..13b313c41f409 100644 --- a/ports/mimxrt/pin.h +++ b/ports/mimxrt/pin.h @@ -147,9 +147,6 @@ extern const mp_obj_type_t machine_pin_af_type; // Include board specific pins #include "genhdr/pins.h" // pins.h must included at this location -extern const machine_pin_obj_t *machine_pin_board_pins[]; -extern const uint32_t num_board_pins; - extern const mp_obj_type_t machine_pin_board_pins_obj_type; extern const mp_obj_type_t machine_pin_cpu_pins_obj_type; From 1f804e03f64b0ec7e29e27333dc6a2a7c5148aef Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Thu, 24 Aug 2023 23:22:16 +1000 Subject: [PATCH 19/20] renesas-ra/boards/make-pins.py: Update to use tools/boardgen.py. This removes previously unused functionality to generate pins_ad_const.h, as well as the unused handling of pin AF in machine_pin.c. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/renesas-ra/Makefile | 6 +- ports/renesas-ra/boards/make-pins.py | 315 ++++++------------------ ports/renesas-ra/boards/ra_pin_prefix.c | 10 +- ports/renesas-ra/machine_pin.c | 33 +-- ports/renesas-ra/pin.h | 43 +--- 5 files changed, 95 insertions(+), 312 deletions(-) diff --git a/ports/renesas-ra/Makefile b/ports/renesas-ra/Makefile index 4e31029073085..6d6eeb7dbf8c5 100644 --- a/ports/renesas-ra/Makefile +++ b/ports/renesas-ra/Makefile @@ -556,8 +556,6 @@ AF_FILE = boards/ra6m5_af.csv endif GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_HDR = $(HEADER_BUILD)/pins.h -# Currently unused. -GEN_PINS_AD_CONST = $(HEADER_BUILD)/pins_ad_const.h FILE2H = $(TOP)/tools/file2h.py @@ -578,10 +576,10 @@ $(HEADER_BUILD)/qstrdefs.generated.h: $(BOARD_DIR)/mpconfigboard.h # Use a pattern rule here so that make will only call make-pins.py once to make # both pins_$(BOARD).c and pins.h .PRECIOUS: $(GEN_PINS_SRC) -$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_ad_const.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) +$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(ECHO) "GEN $@" $(Q)$(PYTHON) $(MAKE_PINS) --board-csv $(BOARD_PINS) --af-csv $(AF_FILE) --prefix $(PREFIX_FILE) \ - --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) --output-ad-const $(GEN_PINS_AD_CONST) + --output-source $(GEN_PINS_SRC) --output-header $(GEN_PINS_HDR) CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h diff --git a/ports/renesas-ra/boards/make-pins.py b/ports/renesas-ra/boards/make-pins.py index 5eebbb49269ac..edc4cf7209b79 100644 --- a/ports/renesas-ra/boards/make-pins.py +++ b/ports/renesas-ra/boards/make-pins.py @@ -1,258 +1,89 @@ #!/usr/bin/env python -"""Creates the pin file for the RAxxx.""" -from __future__ import print_function - -import argparse +import os +import re import sys -import csv - - -class PinAD(object): - def __init__(self, name, cpu_pin_name, pin_idx, bit, channel): - self._name = name - self._cpu_pin_name = cpu_pin_name - self._pin_idx = pin_idx - self._bit = bit - self._channel = channel - - def cpu_pin_name(self): - return self._cpu_pin_name - - def name(self): - return self._name - - def bit(self): - return self._bit - - def channel(self): - return self._channel - - def print(self, out_source): - print( - "const pin_ad_obj_t pin_{:s}_ad_obj = PIN_AD({:s}, {:d}, {:d}, {:d});".format( - self._cpu_pin_name, self._name, self._pin_idx, self._bit, self._channel - ), - file=out_source, - ) - print("", file=out_source) - - def print_header(self, out_header): - n = self.cpu_pin_name() - print("extern const pin_ad_obj_t pin_{:s}_ad_obj;".format(n), file=out_header) - print("#define pin_{:s}_ad (&pin_{:s}_ad_obj)".format(n, n), file=out_header) - - -class Pin(object): - def __init__(self, name, port, bit): - self._name = name - self._pin_idx = port * 16 + bit - self._pin_ad = [] - self._board_pin = False - # print('// pin_{:s}_obj = PIN({:s}, {:d});'.format(self.name, self.name, self.pin)) - - def cpu_pin_name(self): - return self._name - - def pin_ad(self): - return self._pin_ad - - def is_board_pin(self): - return self._board_pin - - def set_is_board_pin(self): - self._board_pin = True - - def parse_ad(self, ad_str): - ad_bit = 0 - ad_channel = 0 - if (len(ad_str) == 5) and (ad_str[:3] == "AN0"): - ad_bit = 12 - ad_channel = int(ad_str[2:]) - self._pin_ad.append(PinAD(ad_str, self._name, self._pin_idx, ad_bit, ad_channel)) - elif (len(ad_str) == 5) and (ad_str[:3] == "AN1"): - ad_bit = 12 - ad_channel = int(ad_str[2:]) - self._pin_ad.append(PinAD(ad_str, self._name, self._pin_idx, ad_bit, ad_channel)) - elif ad_str[:2] == "AN": - ad_bit = 8 - ad_channel = int(ad_str[2:4]) - self._pin_ad.append(PinAD(ad_str, self._name, self._pin_idx, ad_bit, ad_channel)) - - def print(self, out_source): - pin_ad_name = "NULL" - for pin_ad in self._pin_ad: - pin_ad.print(out_source) - pin_ad_name = "pin_{:s}_ad".format(pin_ad.cpu_pin_name()) - print( - "const machine_pin_obj_t pin_{:s}_obj = PIN({:s}, {:d}, {:s});".format( - self._name, self._name, self._pin_idx, pin_ad_name - ), - file=out_source, - ) - print("", file=out_source) - - def print_header(self, out_header): - n = self.cpu_pin_name() - print("extern const machine_pin_obj_t pin_{:s}_obj;".format(n), file=out_header) - print("#define pin_{:s} (&pin_{:s}_obj)".format(n, n), file=out_header) - -class NamedPin(object): - def __init__(self, name, pin): - self._name = name - self._pin = pin - # print('// NamedPin {:s}'.format(self._name)) - - 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, cpu_pin_name): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.cpu_pin_name() == cpu_pin_name: - return pin - - # rx63n_al.csv - # cpu_pin_name, cpu_pin_port, cpu_pin_bit - def parse_af_file(self, filename): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - try: - cpu_pin_name = row[0] - cpu_pin_port = int(row[1], 16) - cpu_pin_bit = int(row[2]) - except: - continue - pin = Pin(cpu_pin_name, cpu_pin_port, cpu_pin_bit) - self.cpu_pins.append(NamedPin(cpu_pin_name, pin)) - pin.parse_ad(row[3]) - - # pins.csv - # named_pin, cpu_pin_name - def parse_board_file(self, filename): - with open(filename, "r") as csvfile: - rows = csv.reader(csvfile) - for row in rows: - try: - board_pin_name = row[0] - cpu_pin_name = row[1] - except: - continue - pin = self.find_pin(cpu_pin_name) - if pin: - pin.set_is_board_pin() - self.board_pins.append(NamedPin(board_pin_name, pin)) - - def print_named(self, label, named_pins, out_source): - print( - "STATIC const mp_rom_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{".format(label), - file=out_source, - ) - 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}_obj) }},".format( - named_pin.name(), pin.cpu_pin_name() - ), - file=out_source, - ) - print("};", file=out_source) - print( - "MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);".format( - label, label - ), - file=out_source, - ) - - def print(self, out_source): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin.print(out_source) - self.print_named("cpu", self.cpu_pins, out_source) - print("", file=out_source) - self.print_named("board", self.board_pins, out_source) - - def print_header(self, out_header): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin.print_header(out_header) - pin_ads = pin.pin_ad() - for pin_ad in pin_ads: - pin_ad.print_header(out_header) - # provide #define's mapping board to cpu name - for named_pin in self.board_pins: +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../tools")) +import boardgen + + +class RenesasRaPin(boardgen.Pin): + def __init__(self, cpu_pin_name): + super().__init__(cpu_pin_name) + + self._port = int(cpu_pin_name[1], 16) + self._bit = int(cpu_pin_name[2:]) + + self._adc_name = None + self._adc_bits = 0 + self._adc_channel = 0 + + def add_adc(self, adc): + # The previous version of make-pins.py handled len==4 to mean + # adc_bits=8, but this is not used in any of the current af.csv files, + # so this needs to be validated. + assert len(adc) == 5 and (adc.startswith("AN0") or adc.startswith("AN1")) + self._adc_name = adc + self._adc_bit = 12 + self._adc_channel = int(adc[2:]) + + # Called for each AF defined in the csv file for this pin. + def add_af(self, af_idx, af_name, af): + if af_idx == 0 and af: + assert af_name == "Analog" + self.add_adc(af) + + # Use the PIN() macro defined in ra_pin_prefix.c for defining the pin + # objects. + def definition(self): + # PIN(p_name, p_pin, p_adc) + adc = "&pin_{}_adc_obj".format(self.name()) if self._adc_name else "NULL" + return "PIN({:s}, {:d}, {:s})".format(self.name(), self._port * 16 + self._bit, adc) + + # This will be called at the start of the output (after the prefix). Use + # it to emit the ADC objects (via the PIN_ADC() macro). + def print_source(self, out_source): + # PIN_ADC(p_name, p_pin, adc_bit, adc_channel) + if self._adc_name: print( - "#define pyb_pin_{:s} pin_{:s}".format( - named_pin.name(), named_pin.pin().cpu_pin_name() + "const machine_pin_adc_obj_t pin_{}_adc_obj = PIN_ADC({:s}, {:d}, {:d}, {:d});".format( + self.name(), + self._adc_name, + self._port * 16 + self._bit, + self._adc_bits, + self._adc_channel, ), - file=out_header, + file=out_source, ) - def print_ad_hdr(self, out_ad_const): - for named_pin in self.cpu_pins: - pin = named_pin.pin() - if pin.is_board_pin(): - pin_ads = pin.pin_ad() - for pin_ad in pin_ads: - print( - " {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_INT(GPIO_{:s}) }}, \n".format( - pin_ad.name(), pin_ad.name() - ), - file=out_ad_const, - ) - + # RA cpu names must be "PXNN", where X is hexadecimal port, NN is decimal bit offset. + @staticmethod + def validate_cpu_pin_name(cpu_pin_name): + boardgen.Pin.validate_cpu_pin_name(cpu_pin_name) -def main(): - parser = argparse.ArgumentParser(description="Generate board specific pin file") - parser.add_argument("--board-csv") - parser.add_argument("--af-csv") - parser.add_argument("--prefix") - parser.add_argument("--output-source") - parser.add_argument("--output-header") - parser.add_argument("--output-ad-const") - args = parser.parse_args() + if not re.match("^P[0-9A-F][0-9][0-9]$", cpu_pin_name): + raise boardgen.PinGeneratorError("Invalid cpu pin name '{}'".format(cpu_pin_name)) - pins = Pins() - with open(args.output_source, "w") as out_source: - print("// This file was automatically generated by make-pins.py", file=out_source) - print("//", file=out_source) - if args.af_csv: - print("// --af {:s}".format(args.af_csv), file=out_source) - pins.parse_af_file(args.af_csv) - - if args.board_csv: - print("// --board {:s}".format(args.board_csv), file=out_source) - pins.parse_board_file(args.board_csv) - - if args.prefix: - print("// --prefix {:s}".format(args.prefix), file=out_source) - print("", file=out_source) - with open(args.prefix, "r") as prefix_file: - print(prefix_file.read(), file=out_source) - - pins.print(out_source) +class RenesasRaPinGenerator(boardgen.PinGenerator): + def __init__(self): + # Use custom pin type above, and also enable the --af-csv argument so + # that add_af gets called on each pin. + super().__init__( + pin_type=RenesasRaPin, + enable_af=True, + ) - with open(args.output_header, "w") as out_header: - pins.print_header(out_header) + # Override the default implementation just to change the default arguments. + def parse_af_csv(self, filename): + return super().parse_af_csv(filename, header_rows=1, pin_col=0, af_col=3) - with open(args.output_ad_const, "w") as out_ad_const: - pins.print_ad_hdr(out_ad_const) + # Renesas-specific behavior, we use pin_PNNN for the cpu names, but + # pyb_pin_FOO for the board names. + def board_name_define_prefix(self): + return "pyb_" if __name__ == "__main__": - main() + RenesasRaPinGenerator().main() diff --git a/ports/renesas-ra/boards/ra_pin_prefix.c b/ports/renesas-ra/boards/ra_pin_prefix.c index 918c84e632413..c52e9738661be 100644 --- a/ports/renesas-ra/boards/ra_pin_prefix.c +++ b/ports/renesas-ra/boards/ra_pin_prefix.c @@ -7,19 +7,19 @@ #include "extmod/modmachine.h" #include "pin.h" -#define PIN_AD(p_name, p_pin, ad_bit, ad_channel) \ +#define PIN_ADC(p_name, p_pin, adc_bits, adc_channel) \ { \ { &machine_pin_type }, \ .name = MP_QSTR_##p_name, \ .pin = p_pin, \ - .bit = ad_bit, \ - .channel = ad_channel \ + .bit = adc_bits, \ + .channel = adc_channel \ } -#define PIN(p_name, p_pin, p_ad) \ +#define PIN(p_name, p_pin, p_adc) \ { \ { &machine_pin_type }, \ .name = MP_QSTR_##p_name, \ .pin = p_pin, \ - .ad = p_ad, \ + .ad = p_adc, \ } diff --git a/ports/renesas-ra/machine_pin.c b/ports/renesas-ra/machine_pin.c index 70f98cd03a1ae..e11188118c4bd 100644 --- a/ports/renesas-ra/machine_pin.c +++ b/ports/renesas-ra/machine_pin.c @@ -56,13 +56,13 @@ const machine_pin_obj_t *machine_pin_find(mp_obj_t user_obj) { } // See if the pin name matches a board pin - pin_obj = pin_find_named_pin(&pin_board_pins_locals_dict, user_obj); + pin_obj = pin_find_named_pin(&machine_pin_board_pins_locals_dict, user_obj); if (pin_obj) { return pin_obj; } // See if the pin name matches a cpu pin - pin_obj = pin_find_named_pin(&pin_cpu_pins_locals_dict, user_obj); + pin_obj = pin_find_named_pin(&machine_pin_cpu_pins_locals_dict, user_obj); if (pin_obj) { return pin_obj; } @@ -134,12 +134,7 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin // AF mode if (af) { mp_uint_t af_idx = pin_get_af(self); - const pin_af_obj_t *af_obj = pin_find_af_by_index(self, af_idx); - if (af_obj == NULL) { - mp_printf(print, ", alt=%d)", af_idx); - } else { - mp_printf(print, ", alt=Pin.%q)", af_obj->name); - } + mp_printf(print, ", alt=%d)", af_idx); } else { mp_print_str(print, ")"); } @@ -306,8 +301,8 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_high), MP_ROM_PTR(&machine_pin_high_obj) }, // class attributes - { MP_ROM_QSTR(MP_QSTR_board), MP_ROM_PTR(&pin_board_pins_obj_type) }, - { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&pin_cpu_pins_obj_type) }, + { MP_ROM_QSTR(MP_QSTR_board), MP_ROM_PTR(&machine_pin_board_pins_obj_type) }, + { MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&machine_pin_cpu_pins_obj_type) }, // class constants { MP_ROM_QSTR(MP_QSTR_IN), MP_ROM_INT(MP_HAL_PIN_MODE_INPUT) }, @@ -391,17 +386,17 @@ uint32_t pin_get_af(const machine_pin_obj_t *pin) { } MP_DEFINE_CONST_OBJ_TYPE( - pin_cpu_pins_obj_type, + machine_pin_cpu_pins_obj_type, MP_QSTR_cpu, MP_TYPE_FLAG_NONE, - locals_dict, &pin_cpu_pins_locals_dict + locals_dict, &machine_pin_cpu_pins_locals_dict ); MP_DEFINE_CONST_OBJ_TYPE( - pin_board_pins_obj_type, + machine_pin_board_pins_obj_type, MP_QSTR_board, MP_TYPE_FLAG_NONE, - locals_dict, &pin_board_pins_locals_dict + locals_dict, &machine_pin_board_pins_locals_dict ); const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name) { @@ -412,13 +407,3 @@ const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_ } return NULL; } - -const pin_af_obj_t *pin_find_af_by_index(const machine_pin_obj_t *pin, mp_uint_t af_idx) { - const pin_af_obj_t *af = pin->af; - for (mp_uint_t i = 0; i < pin->num_af; i++, af++) { - if (af->idx == af_idx) { - return af; - } - } - return NULL; -} diff --git a/ports/renesas-ra/pin.h b/ports/renesas-ra/pin.h index ac84b7f66b9e0..76d6c0b1e430d 100644 --- a/ports/renesas-ra/pin.h +++ b/ports/renesas-ra/pin.h @@ -31,57 +31,29 @@ #include "shared/runtime/mpirq.h" #include "py/obj.h" -typedef struct { - mp_obj_base_t base; - qstr name; - uint8_t idx; - uint8_t fn; - uint8_t unit; - uint8_t type; - void *reg; // The peripheral associated with this AF -} pin_af_obj_t; - typedef struct { mp_obj_base_t base; qstr name; uint8_t pin; uint8_t bit; uint8_t channel; -} pin_ad_obj_t; +} machine_pin_adc_obj_t; typedef struct { mp_obj_base_t base; qstr name; uint8_t pin; - uint8_t num_af; - const pin_af_obj_t *af; - const pin_ad_obj_t *ad; + const machine_pin_adc_obj_t *ad; } machine_pin_obj_t; -extern const mp_obj_type_t pin_af_type; - // Include all of the individual pin objects #include "genhdr/pins.h" -typedef struct { - const char *name; - const machine_pin_obj_t *pin; -} pin_named_pin_t; - -extern const pin_named_pin_t pin_board_pins[]; -extern const pin_named_pin_t pin_cpu_pins[]; - -typedef struct { - mp_obj_base_t base; - qstr name; - const pin_named_pin_t *named_pins; -} pin_named_pins_obj_t; - -extern const mp_obj_type_t pin_board_pins_obj_type; -extern const mp_obj_type_t pin_cpu_pins_obj_type; +extern const mp_obj_type_t machine_pin_board_pins_obj_type; +extern const mp_obj_type_t machine_pin_cpu_pins_obj_type; -extern const mp_obj_dict_t pin_cpu_pins_locals_dict; -extern const mp_obj_dict_t pin_board_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_cpu_pins_locals_dict; +extern const mp_obj_dict_t machine_pin_board_pins_locals_dict; void machine_pin_init(void); uint32_t pin_get_mode(const machine_pin_obj_t *pin); @@ -90,8 +62,5 @@ uint32_t pin_get_drive(const machine_pin_obj_t *pin); uint32_t pin_get_af(const machine_pin_obj_t *pin); const machine_pin_obj_t *machine_pin_find(mp_obj_t user_obj); const machine_pin_obj_t *pin_find_named_pin(const mp_obj_dict_t *named_pins, mp_obj_t name); -const pin_af_obj_t *pin_find_af(const machine_pin_obj_t *pin, uint8_t fn, uint8_t unit); -const pin_af_obj_t *pin_find_af_by_index(const machine_pin_obj_t *pin, mp_uint_t af_idx); -const pin_af_obj_t *pin_find_af_by_name(const machine_pin_obj_t *pin, const char *name); #endif // MICROPY_INCLUDED_RA_PIN_H From 6ef9b29f88ed20a43140211732754f8f7d8e6133 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Fri, 25 Aug 2023 16:15:46 +1000 Subject: [PATCH 20/20] {cc3200,nrf}/boards/make-pins.py: Add a note about tools/boardgen.py. It's not worth the effort to update these ports to use boardgen.py, but put a note just in case anyone uses this as a reference for a new port. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared --- ports/cc3200/boards/make-pins.py | 3 +++ ports/nrf/boards/make-pins.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ports/cc3200/boards/make-pins.py b/ports/cc3200/boards/make-pins.py index da04d8e36cee9..f1bdf15a301a0 100644 --- a/ports/cc3200/boards/make-pins.py +++ b/ports/cc3200/boards/make-pins.py @@ -1,6 +1,9 @@ #!/usr/bin/env python """Generates the pins file for the CC3200.""" +# Do not use this as a reference for new ports. See tools/boardgen.py and e.g. +# ports/stm32/boards/make-pins.py. + from __future__ import print_function import argparse diff --git a/ports/nrf/boards/make-pins.py b/ports/nrf/boards/make-pins.py index 6932a18d648ac..57e815a43d949 100644 --- a/ports/nrf/boards/make-pins.py +++ b/ports/nrf/boards/make-pins.py @@ -1,6 +1,9 @@ #!/usr/bin/env python """Creates the pin file for the nRF5.""" +# Do not use this as a reference for new ports. See tools/boardgen.py and e.g. +# ports/stm32/boards/make-pins.py. + from __future__ import print_function import argparse pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy