diff --git a/conf/airframes/ENAC/nucleo144_test.xml b/conf/airframes/ENAC/nucleo144_test.xml
new file mode 100644
index 0000000000..c50fe4bce0
--- /dev/null
+++ b/conf/airframes/ENAC/nucleo144_test.xml
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/boards/nucleo144_f767zi.makefile b/conf/boards/nucleo144_f767zi.makefile
new file mode 100644
index 0000000000..97488596b7
--- /dev/null
+++ b/conf/boards/nucleo144_f767zi.makefile
@@ -0,0 +1,99 @@
+# Hey Emacs, this is a -*- makefile -*-
+#
+# nucleo144_f767zi_1.0.makefile
+#
+# based on tawaki (STM32F7)
+# only compatible with ChibiOS
+#
+
+BOARD=nucleo
+BOARD_VERSION=144_f767zi
+BOARD_DIR=$(BOARD)/$(BOARD_VERSION)
+BOARD_CFG=\"boards/$(BOARD_DIR)/$(BOARD)$(BOARD_VERSION).h\"
+
+ARCH=chibios
+$(TARGET).ARCHDIR = $(ARCH)
+
+RTOS=chibios
+MCU=cortex-m7
+
+## FPU on F7
+USE_FPU=softfp
+USE_FPU_OPT= -mfpu=fpv5-d16
+
+USE_LTO=yes
+
+$(TARGET).CFLAGS += -DSTM32F7 -DPPRZLINK_ENABLE_FD -DUSE_HARD_FAULT_RECOVERY
+
+##############################################################################
+# Architecture or project specific options
+#
+# Define project name here (target)
+PROJECT = $(TARGET)
+
+# Project specific files and paths (see Makefile.chibios for details)
+CHIBIOS_BOARD_PLATFORM = STM32F7xx/platform.mk
+CHIBIOS_BOARD_PORT = ARMCMx/STM32F7xx/port.mk
+CHIBIOS_BOARD_LINKER = STM32F76xxI.ld
+CHIBIOS_BOARD_STARTUP = startup_stm32f7xx.mk
+
+# ITCM flash is a special flash that allow faster operations
+# At the moment it is not possible to flash the code in this mode using dfu-util
+# but it should work with the BlackMagicProbe or STLINK
+# By default, normal flash is used
+ifeq ($(USE_ITCM),1)
+$(TARGET).CFLAGS += -DUSE_ITCM=1
+DFU_ADDR = 0x00200000
+else
+$(TARGET).CFLAGS += -DUSE_ITCM=0
+DFU_ADDR = 0x08000000
+endif
+
+##############################################################################
+# Compiler settings
+#
+
+# default flash mode is via usb dfu bootloader
+# possibilities: DFU-UTIL, SWD, STLINK
+FLASH_MODE ?= STLINK
+
+HAS_LUFTBOOT = FALSE
+
+#
+# default LED configuration
+#
+RADIO_CONTROL_LED ?= 3
+BARO_LED ?= none
+AHRS_ALIGNER_LED ?= none
+GPS_LED ?= 2
+SYS_TIME_LED ?= 1
+
+#
+# default UART configuration (modem, gps, spektrum)
+#
+
+MODEM_PORT ?= UART3
+MODEM_BAUD ?= B57600
+
+GPS_PORT ?= UART7
+GPS_BAUD ?= B57600
+
+RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT ?= UART6
+RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT ?= UART8
+
+# single mode
+SBUS_PORT ?= UART8
+# dual mode
+SBUS1_PORT ?= UART8
+SBUS2_PORT ?= UART6
+
+#
+# default actuator configuration
+#
+# you can use different actuators by adding a configure option to your firmware section
+# e.g.
+#
+ACTUATORS ?= actuators_pwm
+
diff --git a/conf/flash_modes.xml b/conf/flash_modes.xml
index b1e2b10452..762ca100e5 100644
--- a/conf/flash_modes.xml
+++ b/conf/flash_modes.xml
@@ -63,6 +63,7 @@
+
@@ -79,6 +80,7 @@
+
@@ -100,6 +102,7 @@
+
diff --git a/sw/airborne/boards/nucleo/144_f767zi/Makefile b/sw/airborne/boards/nucleo/144_f767zi/Makefile
new file mode 100644
index 0000000000..5255ffaf95
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/Makefile
@@ -0,0 +1,9 @@
+# file board.h is generated from file board.cfg by a script which is hosted here :
+# https://github.com/alex31/chibios_enac_various_common/blob/master/TOOLS/boardGen.pl
+
+# documentation is here :
+# https://github.com/alex31/chibios_enac_various_common/blob/master/TOOLS/DOC/boardGen.pdf
+
+board.h: board.cfg Makefile
+ boardGen.pl --no-pp-pin --no-pp-line $< $@
+
diff --git a/sw/airborne/boards/nucleo/144_f767zi/board.c b/sw/airborne/boards/nucleo/144_f767zi/board.c
new file mode 100644
index 0000000000..90cbc4ba84
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/board.c
@@ -0,0 +1,262 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#include "hal.h"
+#include "stm32_gpio.h"
+
+/*===========================================================================*/
+/* Driver local definitions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local variables and types. */
+/*===========================================================================*/
+
+/**
+ * @brief Type of STM32 GPIO port setup.
+ */
+typedef struct {
+ uint32_t moder;
+ uint32_t otyper;
+ uint32_t ospeedr;
+ uint32_t pupdr;
+ uint32_t odr;
+ uint32_t afrl;
+ uint32_t afrh;
+} gpio_setup_t;
+
+/**
+ * @brief Type of STM32 GPIO initialization data.
+ */
+typedef struct {
+#if STM32_HAS_GPIOA || defined(__DOXYGEN__)
+ gpio_setup_t PAData;
+#endif
+#if STM32_HAS_GPIOB || defined(__DOXYGEN__)
+ gpio_setup_t PBData;
+#endif
+#if STM32_HAS_GPIOC || defined(__DOXYGEN__)
+ gpio_setup_t PCData;
+#endif
+#if STM32_HAS_GPIOD || defined(__DOXYGEN__)
+ gpio_setup_t PDData;
+#endif
+#if STM32_HAS_GPIOE || defined(__DOXYGEN__)
+ gpio_setup_t PEData;
+#endif
+#if STM32_HAS_GPIOF || defined(__DOXYGEN__)
+ gpio_setup_t PFData;
+#endif
+#if STM32_HAS_GPIOG || defined(__DOXYGEN__)
+ gpio_setup_t PGData;
+#endif
+#if STM32_HAS_GPIOH || defined(__DOXYGEN__)
+ gpio_setup_t PHData;
+#endif
+#if STM32_HAS_GPIOI || defined(__DOXYGEN__)
+ gpio_setup_t PIData;
+#endif
+#if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
+ gpio_setup_t PJData;
+#endif
+#if STM32_HAS_GPIOK || defined(__DOXYGEN__)
+ gpio_setup_t PKData;
+#endif
+} gpio_config_t;
+
+/**
+ * @brief STM32 GPIO static initialization data.
+ */
+static const gpio_config_t gpio_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
+#endif
+#if STM32_HAS_GPIOJ
+ {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
+ VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH},
+#endif
+#if STM32_HAS_GPIOK
+ {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
+ VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH}
+#endif
+};
+
+/*===========================================================================*/
+/* Driver local functions. */
+/*===========================================================================*/
+
+static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
+
+ gpiop->OTYPER = config->otyper;
+ gpiop->OSPEEDR = config->ospeedr;
+ gpiop->PUPDR = config->pupdr;
+ gpiop->ODR = config->odr;
+ gpiop->AFRL = config->afrl;
+ gpiop->AFRH = config->afrh;
+ gpiop->MODER = config->moder;
+}
+
+static void stm32_gpio_init(void) {
+
+ /* Enabling GPIO-related clocks, the mask comes from the
+ registry header file.*/
+ rccResetAHB1(STM32_GPIO_EN_MASK);
+ rccEnableAHB1(STM32_GPIO_EN_MASK, true);
+
+ /* Initializing all the defined GPIO ports.*/
+#if STM32_HAS_GPIOA
+ gpio_init(GPIOA, &gpio_default_config.PAData);
+#endif
+#if STM32_HAS_GPIOB
+ gpio_init(GPIOB, &gpio_default_config.PBData);
+#endif
+#if STM32_HAS_GPIOC
+ gpio_init(GPIOC, &gpio_default_config.PCData);
+#endif
+#if STM32_HAS_GPIOD
+ gpio_init(GPIOD, &gpio_default_config.PDData);
+#endif
+#if STM32_HAS_GPIOE
+ gpio_init(GPIOE, &gpio_default_config.PEData);
+#endif
+#if STM32_HAS_GPIOF
+ gpio_init(GPIOF, &gpio_default_config.PFData);
+#endif
+#if STM32_HAS_GPIOG
+ gpio_init(GPIOG, &gpio_default_config.PGData);
+#endif
+#if STM32_HAS_GPIOH
+ gpio_init(GPIOH, &gpio_default_config.PHData);
+#endif
+#if STM32_HAS_GPIOI
+ gpio_init(GPIOI, &gpio_default_config.PIData);
+#endif
+#if STM32_HAS_GPIOJ
+ gpio_init(GPIOJ, &gpio_default_config.PJData);
+#endif
+#if STM32_HAS_GPIOK
+ gpio_init(GPIOK, &gpio_default_config.PKData);
+#endif
+}
+
+/*===========================================================================*/
+/* Driver interrupt handlers. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported functions. */
+/*===========================================================================*/
+
+/**
+ * @brief Early initialization code.
+ * @details GPIO ports and system clocks are initialized before everything
+ * else.
+ */
+void __early_init(void) {
+
+ stm32_gpio_init();
+ stm32_clock_init();
+}
+
+#if HAL_USE_SDC || defined(__DOXYGEN__)
+/**
+ * @brief SDC card detection.
+ */
+bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+ (void)sdcp;
+ return false;
+}
+
+/**
+ * @brief SDC card write protection detection.
+ */
+bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ return false;
+}
+#endif /* HAL_USE_SDC */
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ return false;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+
+}
+
diff --git a/sw/airborne/boards/nucleo/144_f767zi/board.h b/sw/airborne/boards/nucleo/144_f767zi/board.h
new file mode 100644
index 0000000000..038c32c804
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/board.h
@@ -0,0 +1,1658 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#pragma once
+
+/*
+ * Board identifier.
+ */
+#define BOARD_NUCLEO144_F767ZI
+#define BOARD_NAME "Nucleo144_f767zi Autopilot"
+
+/*
+ * Board oscillators-related settings.
+ */
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 32768U
+#endif
+
+#define STM32_HSE_BYPASS
+#define STM32_LSEDRV (3U << 3U)
+
+/*
+ * Board voltages.
+ * Required for performance limits calculation.
+ */
+#define STM32_VDD 300U
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F777xx
+
+/*
+ * IO pins assignments.
+ */
+#define AUX_A1 0U
+#define AUX_A2 1U
+#define AUX_A3 2U
+#define AUX_A4 3U
+#define PA04 4U
+#define PA05 5U
+#define AUX_B1 6U
+#define AUX_B2 7U
+#define PA08 8U
+#define USB_VBUS 9U
+#define PA10 10U
+#define OTG_FS_DM 11U
+#define OTG_FS_DP 12U
+#define SWDIO 13U
+#define SWCLK 14U
+#define UART7_TX 15U
+
+#define LED1 0U
+#define AUX_B4 1U
+#define PB02 2U
+#define UART7_RX 3U
+#define PB04 4U
+#define DSHOT_RX 5U
+#define SRVB1 6U
+#define LED2 7U
+#define SRVB3 8U
+#define SRVB4 9U
+#define I2C2_SCL_EXTERNAL 10U
+#define I2C2_SDA_EXTERNAL 11U
+#define SPI2_EXTERNAL_CS 12U
+#define PB13 13U
+#define LED3 14U
+#define SPI2_EXTERNAL_MOSI 15U
+
+#define VBAT_MEAS 0U
+#define PC01 1U
+#define SPI2_EXTERNAL_MISO 2U
+#define PC03 3U
+#define PC04 4U
+#define PC05 5U
+#define RC2 6U
+#define PC07 7U
+#define SDMMC1_D0 8U
+#define SDMMC1_D1 9U
+#define SDMMC1_D2 10U
+#define SDMMC1_D3 11U
+#define SDMMC1_CK 12U
+#define USER_BUTTON 13U
+#define OSC32_IN 14U
+#define OSC32_OUT 15U
+
+#define CAN_RX 0U
+#define CAN_TX 1U
+#define SDMMC1_CMD 2U
+#define SPI2_EXTERNAL_CLK 3U
+#define PD04 4U
+#define UART2_TX 5U
+#define UART2_RX 6U
+#define PD07 7U
+#define UART3_TX 8U
+#define UART3_RX 9U
+#define PD10 10U
+#define PD11 11U
+#define I2C4_SCL_EXTERNAL 12U
+#define I2C4_SDA_EXTERNAL 13U
+#define PD14 14U
+#define PD15 15U
+
+#define RC1 0U
+#define PE01 1U
+#define SPI4_INTERNAL_CLK 2U
+#define PE03 3U
+#define SPI4_INTERNAL_CS 4U
+#define SPI4_INTERNAL_MISO 5U
+#define SPI4_INTERNAL_MOSI 6U
+#define PE07 7U
+#define PE08 8U
+#define SRVA1 9U
+#define PE10 10U
+#define SRVA2 11U
+#define PE12 12U
+#define SRVA3 13U
+#define SRVA4 14U
+#define PE15 15U
+
+#define PF00 0U
+#define PF01 1U
+#define PF02 2U
+#define PF03 3U
+#define PF04 4U
+#define PF05 5U
+#define PF06 6U
+#define PF07 7U
+#define PF08 8U
+#define PF09 9U
+#define PF10 10U
+#define PF11 11U
+#define PF12 12U
+#define PF13 13U
+#define PF14 14U
+#define PF15 15U
+
+#define PG00 0U
+#define PG01 1U
+#define PG02 2U
+#define PG03 3U
+#define PG04 4U
+#define PG05 5U
+#define PG06 6U
+#define PG07 7U
+#define PG08 8U
+#define PG09 9U
+#define PG10 10U
+#define PG11 11U
+#define PG12 12U
+#define PG13 13U
+#define PG14 14U
+#define PG15 15U
+
+#define OSC_IN 0U
+#define OSC_OUT 1U
+#define PH02 2U
+#define PH03 3U
+#define PH04 4U
+#define PH05 5U
+#define PH06 6U
+#define PH07 7U
+#define PH08 8U
+#define PH09 9U
+#define PH10 10U
+#define PH11 11U
+#define PH12 12U
+#define PH13 13U
+#define PH14 14U
+#define PH15 15U
+
+#define PI00 0U
+#define PI01 1U
+#define PI02 2U
+#define PI03 3U
+#define PI04 4U
+#define PI05 5U
+#define PI06 6U
+#define PI07 7U
+#define PI08 8U
+#define PI09 9U
+#define PI10 10U
+#define PI11 11U
+#define PI12 12U
+#define PI13 13U
+#define PI14 14U
+#define PI15 15U
+
+#define PJ00 0U
+#define PJ01 1U
+#define PJ02 2U
+#define PJ03 3U
+#define PJ04 4U
+#define PJ05 5U
+#define PJ06 6U
+#define PJ07 7U
+#define PJ08 8U
+#define PJ09 9U
+#define PJ10 10U
+#define PJ11 11U
+#define PJ12 12U
+#define PJ13 13U
+#define PJ14 14U
+#define PJ15 15U
+
+#define PK00 0U
+#define PK01 1U
+#define PK02 2U
+#define PK03 3U
+#define PK04 4U
+#define PK05 5U
+#define PK06 6U
+#define PK07 7U
+#define PK08 8U
+#define PK09 9U
+#define PK10 10U
+#define PK11 11U
+#define PK12 12U
+#define PK13 13U
+#define PK14 14U
+#define PK15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_AUX_A1 PAL_LINE(GPIOA, 0U)
+#define LINE_AUX_A2 PAL_LINE(GPIOA, 1U)
+#define LINE_AUX_A3 PAL_LINE(GPIOA, 2U)
+#define LINE_AUX_A4 PAL_LINE(GPIOA, 3U)
+#define LINE_AUX_B1 PAL_LINE(GPIOA, 6U)
+#define LINE_AUX_B2 PAL_LINE(GPIOA, 7U)
+#define LINE_USB_VBUS PAL_LINE(GPIOA, 9U)
+#define LINE_OTG_FS_DM PAL_LINE(GPIOA, 11U)
+#define LINE_OTG_FS_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+#define LINE_UART7_TX PAL_LINE(GPIOA, 15U)
+
+#define LINE_LED1 PAL_LINE(GPIOB, 0U)
+#define LINE_AUX_B4 PAL_LINE(GPIOB, 1U)
+#define LINE_UART7_RX PAL_LINE(GPIOB, 3U)
+#define LINE_DSHOT_RX PAL_LINE(GPIOB, 5U)
+#define LINE_SRVB1 PAL_LINE(GPIOB, 6U)
+#define LINE_LED2 PAL_LINE(GPIOB, 7U)
+#define LINE_SRVB3 PAL_LINE(GPIOB, 8U)
+#define LINE_SRVB4 PAL_LINE(GPIOB, 9U)
+#define LINE_I2C2_SCL_EXTERNAL PAL_LINE(GPIOB, 10U)
+#define LINE_I2C2_SDA_EXTERNAL PAL_LINE(GPIOB, 11U)
+#define LINE_SPI2_EXTERNAL_CS PAL_LINE(GPIOB, 12U)
+#define LINE_LED3 PAL_LINE(GPIOB, 14U)
+#define LINE_SPI2_EXTERNAL_MOSI PAL_LINE(GPIOB, 15U)
+
+#define LINE_VBAT_MEAS PAL_LINE(GPIOC, 0U)
+#define LINE_SPI2_EXTERNAL_MISO PAL_LINE(GPIOC, 2U)
+#define LINE_RC2 PAL_LINE(GPIOC, 6U)
+#define LINE_SDMMC1_D0 PAL_LINE(GPIOC, 8U)
+#define LINE_SDMMC1_D1 PAL_LINE(GPIOC, 9U)
+#define LINE_SDMMC1_D2 PAL_LINE(GPIOC, 10U)
+#define LINE_SDMMC1_D3 PAL_LINE(GPIOC, 11U)
+#define LINE_SDMMC1_CK PAL_LINE(GPIOC, 12U)
+#define LINE_USER_BUTTON PAL_LINE(GPIOC, 13U)
+#define LINE_OSC32_IN PAL_LINE(GPIOC, 14U)
+#define LINE_OSC32_OUT PAL_LINE(GPIOC, 15U)
+
+#define LINE_CAN_RX PAL_LINE(GPIOD, 0U)
+#define LINE_CAN_TX PAL_LINE(GPIOD, 1U)
+#define LINE_SDMMC1_CMD PAL_LINE(GPIOD, 2U)
+#define LINE_SPI2_EXTERNAL_CLK PAL_LINE(GPIOD, 3U)
+#define LINE_UART2_TX PAL_LINE(GPIOD, 5U)
+#define LINE_UART2_RX PAL_LINE(GPIOD, 6U)
+#define LINE_UART3_TX PAL_LINE(GPIOD, 8U)
+#define LINE_UART3_RX PAL_LINE(GPIOD, 9U)
+#define LINE_I2C4_SCL_EXTERNAL PAL_LINE(GPIOD, 12U)
+#define LINE_I2C4_SDA_EXTERNAL PAL_LINE(GPIOD, 13U)
+
+#define LINE_RC1 PAL_LINE(GPIOE, 0U)
+#define LINE_SPI4_INTERNAL_CLK PAL_LINE(GPIOE, 2U)
+#define LINE_SPI4_INTERNAL_CS PAL_LINE(GPIOE, 4U)
+#define LINE_SPI4_INTERNAL_MISO PAL_LINE(GPIOE, 5U)
+#define LINE_SPI4_INTERNAL_MOSI PAL_LINE(GPIOE, 6U)
+#define LINE_SRVA1 PAL_LINE(GPIOE, 9U)
+#define LINE_SRVA2 PAL_LINE(GPIOE, 11U)
+#define LINE_SRVA3 PAL_LINE(GPIOE, 13U)
+#define LINE_SRVA4 PAL_LINE(GPIOE, 14U)
+
+#define LINE_OSC_IN PAL_LINE(GPIOH, 0U)
+#define LINE_OSC_OUT PAL_LINE(GPIOH, 1U)
+
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LEVEL_LOW(n) (0U << (n))
+#define PIN_ODR_LEVEL_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_SPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_SPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_SPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_SPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(AUX_A1) | \
+ PIN_MODE_INPUT(AUX_A2) | \
+ PIN_MODE_INPUT(AUX_A3) | \
+ PIN_MODE_INPUT(AUX_A4) | \
+ PIN_MODE_INPUT(PA04) | \
+ PIN_MODE_INPUT(PA05) | \
+ PIN_MODE_INPUT(AUX_B1) | \
+ PIN_MODE_INPUT(AUX_B2) | \
+ PIN_MODE_INPUT(PA08) | \
+ PIN_MODE_INPUT(USB_VBUS) | \
+ PIN_MODE_INPUT(PA10) | \
+ PIN_MODE_ALTERNATE(OTG_FS_DM) | \
+ PIN_MODE_ALTERNATE(OTG_FS_DP) | \
+ PIN_MODE_ALTERNATE(SWDIO) | \
+ PIN_MODE_ALTERNATE(SWCLK) | \
+ PIN_MODE_ALTERNATE(UART7_TX))
+
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_OPENDRAIN(AUX_A1) | \
+ PIN_OTYPE_OPENDRAIN(AUX_A2) | \
+ PIN_OTYPE_OPENDRAIN(AUX_A3) | \
+ PIN_OTYPE_OPENDRAIN(AUX_A4) | \
+ PIN_OTYPE_PUSHPULL(PA04) | \
+ PIN_OTYPE_PUSHPULL(PA05) | \
+ PIN_OTYPE_OPENDRAIN(AUX_B1) | \
+ PIN_OTYPE_OPENDRAIN(AUX_B2) | \
+ PIN_OTYPE_PUSHPULL(PA08) | \
+ PIN_OTYPE_OPENDRAIN(USB_VBUS) | \
+ PIN_OTYPE_PUSHPULL(PA10) | \
+ PIN_OTYPE_PUSHPULL(OTG_FS_DM) | \
+ PIN_OTYPE_PUSHPULL(OTG_FS_DP) | \
+ PIN_OTYPE_PUSHPULL(SWDIO) | \
+ PIN_OTYPE_PUSHPULL(SWCLK) | \
+ PIN_OTYPE_PUSHPULL(UART7_TX))
+
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(AUX_A1) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_A2) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_A3) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_A4) | \
+ PIN_OSPEED_SPEED_VERYLOW(PA04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PA05) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_B1) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_B2) | \
+ PIN_OSPEED_SPEED_VERYLOW(PA08) | \
+ PIN_OSPEED_SPEED_VERYLOW(USB_VBUS) | \
+ PIN_OSPEED_SPEED_VERYLOW(PA10) | \
+ PIN_OSPEED_SPEED_HIGH(OTG_FS_DM) | \
+ PIN_OSPEED_SPEED_HIGH(OTG_FS_DP) | \
+ PIN_OSPEED_SPEED_HIGH(SWDIO) | \
+ PIN_OSPEED_SPEED_HIGH(SWCLK) | \
+ PIN_OSPEED_SPEED_HIGH(UART7_TX))
+
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_PULLDOWN(AUX_A1) | \
+ PIN_PUPDR_PULLDOWN(AUX_A2) | \
+ PIN_PUPDR_PULLDOWN(AUX_A3) | \
+ PIN_PUPDR_PULLDOWN(AUX_A4) | \
+ PIN_PUPDR_PULLDOWN(PA04) | \
+ PIN_PUPDR_PULLDOWN(PA05) | \
+ PIN_PUPDR_PULLDOWN(AUX_B1) | \
+ PIN_PUPDR_PULLDOWN(AUX_B2) | \
+ PIN_PUPDR_PULLDOWN(PA08) | \
+ PIN_PUPDR_PULLDOWN(USB_VBUS) | \
+ PIN_PUPDR_PULLDOWN(PA10) | \
+ PIN_PUPDR_FLOATING(OTG_FS_DM) | \
+ PIN_PUPDR_FLOATING(OTG_FS_DP) | \
+ PIN_PUPDR_FLOATING(SWDIO) | \
+ PIN_PUPDR_FLOATING(SWCLK) | \
+ PIN_PUPDR_FLOATING(UART7_TX))
+
+#define VAL_GPIOA_ODR (PIN_ODR_LEVEL_HIGH(AUX_A1) | \
+ PIN_ODR_LEVEL_HIGH(AUX_A2) | \
+ PIN_ODR_LEVEL_HIGH(AUX_A3) | \
+ PIN_ODR_LEVEL_HIGH(AUX_A4) | \
+ PIN_ODR_LEVEL_LOW(PA04) | \
+ PIN_ODR_LEVEL_LOW(PA05) | \
+ PIN_ODR_LEVEL_HIGH(AUX_B1) | \
+ PIN_ODR_LEVEL_HIGH(AUX_B2) | \
+ PIN_ODR_LEVEL_LOW(PA08) | \
+ PIN_ODR_LEVEL_LOW(USB_VBUS) | \
+ PIN_ODR_LEVEL_LOW(PA10) | \
+ PIN_ODR_LEVEL_HIGH(OTG_FS_DM) | \
+ PIN_ODR_LEVEL_HIGH(OTG_FS_DP) | \
+ PIN_ODR_LEVEL_HIGH(SWDIO) | \
+ PIN_ODR_LEVEL_HIGH(SWCLK) | \
+ PIN_ODR_LEVEL_HIGH(UART7_TX))
+
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(AUX_A1, 0) | \
+ PIN_AFIO_AF(AUX_A2, 0) | \
+ PIN_AFIO_AF(AUX_A3, 0) | \
+ PIN_AFIO_AF(AUX_A4, 0) | \
+ PIN_AFIO_AF(PA04, 0) | \
+ PIN_AFIO_AF(PA05, 0) | \
+ PIN_AFIO_AF(AUX_B1, 0) | \
+ PIN_AFIO_AF(AUX_B2, 0))
+
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(PA08, 0) | \
+ PIN_AFIO_AF(USB_VBUS, 0) | \
+ PIN_AFIO_AF(PA10, 0) | \
+ PIN_AFIO_AF(OTG_FS_DM, 10) | \
+ PIN_AFIO_AF(OTG_FS_DP, 10) | \
+ PIN_AFIO_AF(SWDIO, 0) | \
+ PIN_AFIO_AF(SWCLK, 0) | \
+ PIN_AFIO_AF(UART7_TX, 12))
+
+#define VAL_GPIOB_MODER (PIN_MODE_OUTPUT(LED1) | \
+ PIN_MODE_INPUT(AUX_B4) | \
+ PIN_MODE_INPUT(PB02) | \
+ PIN_MODE_ALTERNATE(UART7_RX) | \
+ PIN_MODE_INPUT(PB04) | \
+ PIN_MODE_ALTERNATE(DSHOT_RX) | \
+ PIN_MODE_ALTERNATE(SRVB1) | \
+ PIN_MODE_OUTPUT(LED2) | \
+ PIN_MODE_ALTERNATE(SRVB3) | \
+ PIN_MODE_ALTERNATE(SRVB4) | \
+ PIN_MODE_ALTERNATE(I2C2_SCL_EXTERNAL) | \
+ PIN_MODE_ALTERNATE(I2C2_SDA_EXTERNAL) | \
+ PIN_MODE_OUTPUT(SPI2_EXTERNAL_CS) | \
+ PIN_MODE_INPUT(PB13) | \
+ PIN_MODE_OUTPUT(LED3) | \
+ PIN_MODE_ALTERNATE(SPI2_EXTERNAL_MOSI))
+
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(LED1) | \
+ PIN_OTYPE_OPENDRAIN(AUX_B4) | \
+ PIN_OTYPE_PUSHPULL(PB02) | \
+ PIN_OTYPE_PUSHPULL(UART7_RX) | \
+ PIN_OTYPE_PUSHPULL(PB04) | \
+ PIN_OTYPE_PUSHPULL(DSHOT_RX) | \
+ PIN_OTYPE_PUSHPULL(SRVB1) | \
+ PIN_OTYPE_PUSHPULL(LED2) | \
+ PIN_OTYPE_PUSHPULL(SRVB3) | \
+ PIN_OTYPE_PUSHPULL(SRVB4) | \
+ PIN_OTYPE_OPENDRAIN(I2C2_SCL_EXTERNAL) | \
+ PIN_OTYPE_OPENDRAIN(I2C2_SDA_EXTERNAL) | \
+ PIN_OTYPE_PUSHPULL(SPI2_EXTERNAL_CS) | \
+ PIN_OTYPE_PUSHPULL(PB13) | \
+ PIN_OTYPE_PUSHPULL(LED3) | \
+ PIN_OTYPE_PUSHPULL(SPI2_EXTERNAL_MOSI))
+
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(LED1) | \
+ PIN_OSPEED_SPEED_VERYLOW(AUX_B4) | \
+ PIN_OSPEED_SPEED_VERYLOW(PB02) | \
+ PIN_OSPEED_SPEED_HIGH(UART7_RX) | \
+ PIN_OSPEED_SPEED_VERYLOW(PB04) | \
+ PIN_OSPEED_SPEED_HIGH(DSHOT_RX) | \
+ PIN_OSPEED_SPEED_HIGH(SRVB1) | \
+ PIN_OSPEED_SPEED_VERYLOW(LED2) | \
+ PIN_OSPEED_SPEED_HIGH(SRVB3) | \
+ PIN_OSPEED_SPEED_HIGH(SRVB4) | \
+ PIN_OSPEED_SPEED_HIGH(I2C2_SCL_EXTERNAL) | \
+ PIN_OSPEED_SPEED_HIGH(I2C2_SDA_EXTERNAL) | \
+ PIN_OSPEED_SPEED_HIGH(SPI2_EXTERNAL_CS) | \
+ PIN_OSPEED_SPEED_VERYLOW(PB13) | \
+ PIN_OSPEED_SPEED_VERYLOW(LED3) | \
+ PIN_OSPEED_SPEED_HIGH(SPI2_EXTERNAL_MOSI))
+
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_FLOATING(LED1) | \
+ PIN_PUPDR_PULLDOWN(AUX_B4) | \
+ PIN_PUPDR_PULLDOWN(PB02) | \
+ PIN_PUPDR_FLOATING(UART7_RX) | \
+ PIN_PUPDR_PULLDOWN(PB04) | \
+ PIN_PUPDR_FLOATING(DSHOT_RX) | \
+ PIN_PUPDR_FLOATING(SRVB1) | \
+ PIN_PUPDR_FLOATING(LED2) | \
+ PIN_PUPDR_FLOATING(SRVB3) | \
+ PIN_PUPDR_FLOATING(SRVB4) | \
+ PIN_PUPDR_PULLUP(I2C2_SCL_EXTERNAL) | \
+ PIN_PUPDR_PULLUP(I2C2_SDA_EXTERNAL) | \
+ PIN_PUPDR_FLOATING(SPI2_EXTERNAL_CS) | \
+ PIN_PUPDR_PULLDOWN(PB13) | \
+ PIN_PUPDR_FLOATING(LED3) | \
+ PIN_PUPDR_FLOATING(SPI2_EXTERNAL_MOSI))
+
+#define VAL_GPIOB_ODR (PIN_ODR_LEVEL_LOW(LED1) | \
+ PIN_ODR_LEVEL_HIGH(AUX_B4) | \
+ PIN_ODR_LEVEL_LOW(PB02) | \
+ PIN_ODR_LEVEL_HIGH(UART7_RX) | \
+ PIN_ODR_LEVEL_LOW(PB04) | \
+ PIN_ODR_LEVEL_HIGH(DSHOT_RX) | \
+ PIN_ODR_LEVEL_LOW(SRVB1) | \
+ PIN_ODR_LEVEL_LOW(LED2) | \
+ PIN_ODR_LEVEL_LOW(SRVB3) | \
+ PIN_ODR_LEVEL_LOW(SRVB4) | \
+ PIN_ODR_LEVEL_HIGH(I2C2_SCL_EXTERNAL) | \
+ PIN_ODR_LEVEL_HIGH(I2C2_SDA_EXTERNAL) | \
+ PIN_ODR_LEVEL_HIGH(SPI2_EXTERNAL_CS) | \
+ PIN_ODR_LEVEL_LOW(PB13) | \
+ PIN_ODR_LEVEL_LOW(LED3) | \
+ PIN_ODR_LEVEL_HIGH(SPI2_EXTERNAL_MOSI))
+
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(LED1, 0) | \
+ PIN_AFIO_AF(AUX_B4, 0) | \
+ PIN_AFIO_AF(PB02, 0) | \
+ PIN_AFIO_AF(UART7_RX, 12) | \
+ PIN_AFIO_AF(PB04, 0) | \
+ PIN_AFIO_AF(DSHOT_RX, 1) | \
+ PIN_AFIO_AF(SRVB1, 2) | \
+ PIN_AFIO_AF(LED2, 0))
+
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(SRVB3, 2) | \
+ PIN_AFIO_AF(SRVB4, 2) | \
+ PIN_AFIO_AF(I2C2_SCL_EXTERNAL, 4) | \
+ PIN_AFIO_AF(I2C2_SDA_EXTERNAL, 4) | \
+ PIN_AFIO_AF(SPI2_EXTERNAL_CS, 0) | \
+ PIN_AFIO_AF(PB13, 0) | \
+ PIN_AFIO_AF(LED3, 0) | \
+ PIN_AFIO_AF(SPI2_EXTERNAL_MOSI, 5))
+
+#define VAL_GPIOC_MODER (PIN_MODE_ANALOG(VBAT_MEAS) | \
+ PIN_MODE_INPUT(PC01) | \
+ PIN_MODE_ALTERNATE(SPI2_EXTERNAL_MISO) | \
+ PIN_MODE_INPUT(PC03) | \
+ PIN_MODE_INPUT(PC04) | \
+ PIN_MODE_INPUT(PC05) | \
+ PIN_MODE_INPUT(RC2) | \
+ PIN_MODE_INPUT(PC07) | \
+ PIN_MODE_ALTERNATE(SDMMC1_D0) | \
+ PIN_MODE_ALTERNATE(SDMMC1_D1) | \
+ PIN_MODE_ALTERNATE(SDMMC1_D2) | \
+ PIN_MODE_ALTERNATE(SDMMC1_D3) | \
+ PIN_MODE_ALTERNATE(SDMMC1_CK) | \
+ PIN_MODE_INPUT(USER_BUTTON) | \
+ PIN_MODE_ALTERNATE(OSC32_IN) | \
+ PIN_MODE_ALTERNATE(OSC32_OUT))
+
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(VBAT_MEAS) | \
+ PIN_OTYPE_PUSHPULL(PC01) | \
+ PIN_OTYPE_PUSHPULL(SPI2_EXTERNAL_MISO) | \
+ PIN_OTYPE_PUSHPULL(PC03) | \
+ PIN_OTYPE_PUSHPULL(PC04) | \
+ PIN_OTYPE_PUSHPULL(PC05) | \
+ PIN_OTYPE_OPENDRAIN(RC2) | \
+ PIN_OTYPE_PUSHPULL(PC07) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_D0) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_D1) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_D2) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_D3) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_CK) | \
+ PIN_OTYPE_OPENDRAIN(USER_BUTTON) | \
+ PIN_OTYPE_PUSHPULL(OSC32_IN) | \
+ PIN_OTYPE_PUSHPULL(OSC32_OUT))
+
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(VBAT_MEAS) | \
+ PIN_OSPEED_SPEED_VERYLOW(PC01) | \
+ PIN_OSPEED_SPEED_HIGH(SPI2_EXTERNAL_MISO) | \
+ PIN_OSPEED_SPEED_VERYLOW(PC03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PC04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PC05) | \
+ PIN_OSPEED_SPEED_VERYLOW(RC2) | \
+ PIN_OSPEED_SPEED_VERYLOW(PC07) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_D0) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_D1) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_D2) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_D3) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_CK) | \
+ PIN_OSPEED_SPEED_VERYLOW(USER_BUTTON) | \
+ PIN_OSPEED_SPEED_HIGH(OSC32_IN) | \
+ PIN_OSPEED_SPEED_HIGH(OSC32_OUT))
+
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(VBAT_MEAS) | \
+ PIN_PUPDR_PULLDOWN(PC01) | \
+ PIN_PUPDR_FLOATING(SPI2_EXTERNAL_MISO) | \
+ PIN_PUPDR_PULLDOWN(PC03) | \
+ PIN_PUPDR_PULLDOWN(PC04) | \
+ PIN_PUPDR_PULLDOWN(PC05) | \
+ PIN_PUPDR_PULLDOWN(RC2) | \
+ PIN_PUPDR_PULLDOWN(PC07) | \
+ PIN_PUPDR_PULLUP(SDMMC1_D0) | \
+ PIN_PUPDR_PULLUP(SDMMC1_D1) | \
+ PIN_PUPDR_PULLUP(SDMMC1_D2) | \
+ PIN_PUPDR_PULLUP(SDMMC1_D3) | \
+ PIN_PUPDR_PULLUP(SDMMC1_CK) | \
+ PIN_PUPDR_PULLDOWN(USER_BUTTON) | \
+ PIN_PUPDR_FLOATING(OSC32_IN) | \
+ PIN_PUPDR_FLOATING(OSC32_OUT))
+
+#define VAL_GPIOC_ODR (PIN_ODR_LEVEL_LOW(VBAT_MEAS) | \
+ PIN_ODR_LEVEL_LOW(PC01) | \
+ PIN_ODR_LEVEL_HIGH(SPI2_EXTERNAL_MISO) | \
+ PIN_ODR_LEVEL_LOW(PC03) | \
+ PIN_ODR_LEVEL_LOW(PC04) | \
+ PIN_ODR_LEVEL_LOW(PC05) | \
+ PIN_ODR_LEVEL_HIGH(RC2) | \
+ PIN_ODR_LEVEL_LOW(PC07) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_D0) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_D1) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_D2) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_D3) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_CK) | \
+ PIN_ODR_LEVEL_LOW(USER_BUTTON) | \
+ PIN_ODR_LEVEL_HIGH(OSC32_IN) | \
+ PIN_ODR_LEVEL_HIGH(OSC32_OUT))
+
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(VBAT_MEAS, 0) | \
+ PIN_AFIO_AF(PC01, 0) | \
+ PIN_AFIO_AF(SPI2_EXTERNAL_MISO, 5) | \
+ PIN_AFIO_AF(PC03, 0) | \
+ PIN_AFIO_AF(PC04, 0) | \
+ PIN_AFIO_AF(PC05, 0) | \
+ PIN_AFIO_AF(RC2, 0) | \
+ PIN_AFIO_AF(PC07, 0))
+
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(SDMMC1_D0, 12) | \
+ PIN_AFIO_AF(SDMMC1_D1, 12) | \
+ PIN_AFIO_AF(SDMMC1_D2, 12) | \
+ PIN_AFIO_AF(SDMMC1_D3, 12) | \
+ PIN_AFIO_AF(SDMMC1_CK, 12) | \
+ PIN_AFIO_AF(USER_BUTTON, 0) | \
+ PIN_AFIO_AF(OSC32_IN, 0) | \
+ PIN_AFIO_AF(OSC32_OUT, 0))
+
+#define VAL_GPIOD_MODER (PIN_MODE_ALTERNATE(CAN_RX) | \
+ PIN_MODE_ALTERNATE(CAN_TX) | \
+ PIN_MODE_ALTERNATE(SDMMC1_CMD) | \
+ PIN_MODE_ALTERNATE(SPI2_EXTERNAL_CLK) | \
+ PIN_MODE_INPUT(PD04) | \
+ PIN_MODE_ALTERNATE(UART2_TX) | \
+ PIN_MODE_ALTERNATE(UART2_RX) | \
+ PIN_MODE_INPUT(PD07) | \
+ PIN_MODE_ALTERNATE(UART3_TX) | \
+ PIN_MODE_ALTERNATE(UART3_RX) | \
+ PIN_MODE_INPUT(PD10) | \
+ PIN_MODE_INPUT(PD11) | \
+ PIN_MODE_ALTERNATE(I2C4_SCL_EXTERNAL) | \
+ PIN_MODE_ALTERNATE(I2C4_SDA_EXTERNAL) | \
+ PIN_MODE_INPUT(PD14) | \
+ PIN_MODE_INPUT(PD15))
+
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(CAN_RX) | \
+ PIN_OTYPE_PUSHPULL(CAN_TX) | \
+ PIN_OTYPE_PUSHPULL(SDMMC1_CMD) | \
+ PIN_OTYPE_PUSHPULL(SPI2_EXTERNAL_CLK) | \
+ PIN_OTYPE_PUSHPULL(PD04) | \
+ PIN_OTYPE_PUSHPULL(UART2_TX) | \
+ PIN_OTYPE_PUSHPULL(UART2_RX) | \
+ PIN_OTYPE_PUSHPULL(PD07) | \
+ PIN_OTYPE_PUSHPULL(UART3_TX) | \
+ PIN_OTYPE_PUSHPULL(UART3_RX) | \
+ PIN_OTYPE_PUSHPULL(PD10) | \
+ PIN_OTYPE_PUSHPULL(PD11) | \
+ PIN_OTYPE_OPENDRAIN(I2C4_SCL_EXTERNAL) | \
+ PIN_OTYPE_OPENDRAIN(I2C4_SDA_EXTERNAL) | \
+ PIN_OTYPE_PUSHPULL(PD14) | \
+ PIN_OTYPE_PUSHPULL(PD15))
+
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_SPEED_HIGH(CAN_RX) | \
+ PIN_OSPEED_SPEED_HIGH(CAN_TX) | \
+ PIN_OSPEED_SPEED_HIGH(SDMMC1_CMD) | \
+ PIN_OSPEED_SPEED_HIGH(SPI2_EXTERNAL_CLK) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD04) | \
+ PIN_OSPEED_SPEED_HIGH(UART2_TX) | \
+ PIN_OSPEED_SPEED_HIGH(UART2_RX) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD07) | \
+ PIN_OSPEED_SPEED_HIGH(UART3_TX) | \
+ PIN_OSPEED_SPEED_HIGH(UART3_RX) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD11) | \
+ PIN_OSPEED_SPEED_HIGH(I2C4_SCL_EXTERNAL) | \
+ PIN_OSPEED_SPEED_HIGH(I2C4_SDA_EXTERNAL) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PD15))
+
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_FLOATING(CAN_RX) | \
+ PIN_PUPDR_FLOATING(CAN_TX) | \
+ PIN_PUPDR_PULLUP(SDMMC1_CMD) | \
+ PIN_PUPDR_FLOATING(SPI2_EXTERNAL_CLK) | \
+ PIN_PUPDR_PULLDOWN(PD04) | \
+ PIN_PUPDR_FLOATING(UART2_TX) | \
+ PIN_PUPDR_FLOATING(UART2_RX) | \
+ PIN_PUPDR_PULLDOWN(PD07) | \
+ PIN_PUPDR_FLOATING(UART3_TX) | \
+ PIN_PUPDR_FLOATING(UART3_RX) | \
+ PIN_PUPDR_PULLDOWN(PD10) | \
+ PIN_PUPDR_PULLDOWN(PD11) | \
+ PIN_PUPDR_PULLUP(I2C4_SCL_EXTERNAL) | \
+ PIN_PUPDR_PULLUP(I2C4_SDA_EXTERNAL) | \
+ PIN_PUPDR_PULLDOWN(PD14) | \
+ PIN_PUPDR_PULLDOWN(PD15))
+
+#define VAL_GPIOD_ODR (PIN_ODR_LEVEL_HIGH(CAN_RX) | \
+ PIN_ODR_LEVEL_HIGH(CAN_TX) | \
+ PIN_ODR_LEVEL_HIGH(SDMMC1_CMD) | \
+ PIN_ODR_LEVEL_HIGH(SPI2_EXTERNAL_CLK) | \
+ PIN_ODR_LEVEL_LOW(PD04) | \
+ PIN_ODR_LEVEL_HIGH(UART2_TX) | \
+ PIN_ODR_LEVEL_HIGH(UART2_RX) | \
+ PIN_ODR_LEVEL_LOW(PD07) | \
+ PIN_ODR_LEVEL_HIGH(UART3_TX) | \
+ PIN_ODR_LEVEL_HIGH(UART3_RX) | \
+ PIN_ODR_LEVEL_LOW(PD10) | \
+ PIN_ODR_LEVEL_LOW(PD11) | \
+ PIN_ODR_LEVEL_HIGH(I2C4_SCL_EXTERNAL) | \
+ PIN_ODR_LEVEL_HIGH(I2C4_SDA_EXTERNAL) | \
+ PIN_ODR_LEVEL_LOW(PD14) | \
+ PIN_ODR_LEVEL_LOW(PD15))
+
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(CAN_RX, 9) | \
+ PIN_AFIO_AF(CAN_TX, 9) | \
+ PIN_AFIO_AF(SDMMC1_CMD, 12) | \
+ PIN_AFIO_AF(SPI2_EXTERNAL_CLK, 5) | \
+ PIN_AFIO_AF(PD04, 0) | \
+ PIN_AFIO_AF(UART2_TX, 7) | \
+ PIN_AFIO_AF(UART2_RX, 7) | \
+ PIN_AFIO_AF(PD07, 0))
+
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(UART3_TX, 7) | \
+ PIN_AFIO_AF(UART3_RX, 7) | \
+ PIN_AFIO_AF(PD10, 0) | \
+ PIN_AFIO_AF(PD11, 0) | \
+ PIN_AFIO_AF(I2C4_SCL_EXTERNAL, 4) | \
+ PIN_AFIO_AF(I2C4_SDA_EXTERNAL, 4) | \
+ PIN_AFIO_AF(PD14, 0) | \
+ PIN_AFIO_AF(PD15, 0))
+
+#define VAL_GPIOE_MODER (PIN_MODE_ALTERNATE(RC1) | \
+ PIN_MODE_INPUT(PE01) | \
+ PIN_MODE_ALTERNATE(SPI4_INTERNAL_CLK) | \
+ PIN_MODE_INPUT(PE03) | \
+ PIN_MODE_OUTPUT(SPI4_INTERNAL_CS) | \
+ PIN_MODE_ALTERNATE(SPI4_INTERNAL_MISO) | \
+ PIN_MODE_ALTERNATE(SPI4_INTERNAL_MOSI) | \
+ PIN_MODE_INPUT(PE07) | \
+ PIN_MODE_INPUT(PE08) | \
+ PIN_MODE_ALTERNATE(SRVA1) | \
+ PIN_MODE_INPUT(PE10) | \
+ PIN_MODE_ALTERNATE(SRVA2) | \
+ PIN_MODE_INPUT(PE12) | \
+ PIN_MODE_ALTERNATE(SRVA3) | \
+ PIN_MODE_ALTERNATE(SRVA4) | \
+ PIN_MODE_INPUT(PE15))
+
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(RC1) | \
+ PIN_OTYPE_PUSHPULL(PE01) | \
+ PIN_OTYPE_PUSHPULL(SPI4_INTERNAL_CLK) | \
+ PIN_OTYPE_PUSHPULL(PE03) | \
+ PIN_OTYPE_PUSHPULL(SPI4_INTERNAL_CS) | \
+ PIN_OTYPE_PUSHPULL(SPI4_INTERNAL_MISO) | \
+ PIN_OTYPE_PUSHPULL(SPI4_INTERNAL_MOSI) | \
+ PIN_OTYPE_PUSHPULL(PE07) | \
+ PIN_OTYPE_PUSHPULL(PE08) | \
+ PIN_OTYPE_PUSHPULL(SRVA1) | \
+ PIN_OTYPE_PUSHPULL(PE10) | \
+ PIN_OTYPE_PUSHPULL(SRVA2) | \
+ PIN_OTYPE_PUSHPULL(PE12) | \
+ PIN_OTYPE_PUSHPULL(SRVA3) | \
+ PIN_OTYPE_PUSHPULL(SRVA4) | \
+ PIN_OTYPE_PUSHPULL(PE15))
+
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_SPEED_HIGH(RC1) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE01) | \
+ PIN_OSPEED_SPEED_HIGH(SPI4_INTERNAL_CLK) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE03) | \
+ PIN_OSPEED_SPEED_HIGH(SPI4_INTERNAL_CS) | \
+ PIN_OSPEED_SPEED_HIGH(SPI4_INTERNAL_MISO) | \
+ PIN_OSPEED_SPEED_HIGH(SPI4_INTERNAL_MOSI) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE08) | \
+ PIN_OSPEED_SPEED_HIGH(SRVA1) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE10) | \
+ PIN_OSPEED_SPEED_HIGH(SRVA2) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE12) | \
+ PIN_OSPEED_SPEED_HIGH(SRVA3) | \
+ PIN_OSPEED_SPEED_HIGH(SRVA4) | \
+ PIN_OSPEED_SPEED_VERYLOW(PE15))
+
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_FLOATING(RC1) | \
+ PIN_PUPDR_PULLDOWN(PE01) | \
+ PIN_PUPDR_FLOATING(SPI4_INTERNAL_CLK) | \
+ PIN_PUPDR_PULLDOWN(PE03) | \
+ PIN_PUPDR_FLOATING(SPI4_INTERNAL_CS) | \
+ PIN_PUPDR_FLOATING(SPI4_INTERNAL_MISO) | \
+ PIN_PUPDR_FLOATING(SPI4_INTERNAL_MOSI) | \
+ PIN_PUPDR_PULLDOWN(PE07) | \
+ PIN_PUPDR_PULLDOWN(PE08) | \
+ PIN_PUPDR_FLOATING(SRVA1) | \
+ PIN_PUPDR_PULLDOWN(PE10) | \
+ PIN_PUPDR_FLOATING(SRVA2) | \
+ PIN_PUPDR_PULLDOWN(PE12) | \
+ PIN_PUPDR_FLOATING(SRVA3) | \
+ PIN_PUPDR_FLOATING(SRVA4) | \
+ PIN_PUPDR_PULLDOWN(PE15))
+
+#define VAL_GPIOE_ODR (PIN_ODR_LEVEL_HIGH(RC1) | \
+ PIN_ODR_LEVEL_LOW(PE01) | \
+ PIN_ODR_LEVEL_HIGH(SPI4_INTERNAL_CLK) | \
+ PIN_ODR_LEVEL_LOW(PE03) | \
+ PIN_ODR_LEVEL_HIGH(SPI4_INTERNAL_CS) | \
+ PIN_ODR_LEVEL_HIGH(SPI4_INTERNAL_MISO) | \
+ PIN_ODR_LEVEL_HIGH(SPI4_INTERNAL_MOSI) | \
+ PIN_ODR_LEVEL_LOW(PE07) | \
+ PIN_ODR_LEVEL_LOW(PE08) | \
+ PIN_ODR_LEVEL_LOW(SRVA1) | \
+ PIN_ODR_LEVEL_LOW(PE10) | \
+ PIN_ODR_LEVEL_LOW(SRVA2) | \
+ PIN_ODR_LEVEL_LOW(PE12) | \
+ PIN_ODR_LEVEL_LOW(SRVA3) | \
+ PIN_ODR_LEVEL_LOW(SRVA4) | \
+ PIN_ODR_LEVEL_LOW(PE15))
+
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(RC1, 8) | \
+ PIN_AFIO_AF(PE01, 0) | \
+ PIN_AFIO_AF(SPI4_INTERNAL_CLK, 5) | \
+ PIN_AFIO_AF(PE03, 0) | \
+ PIN_AFIO_AF(SPI4_INTERNAL_CS, 0) | \
+ PIN_AFIO_AF(SPI4_INTERNAL_MISO, 5) | \
+ PIN_AFIO_AF(SPI4_INTERNAL_MOSI, 5) | \
+ PIN_AFIO_AF(PE07, 0))
+
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(PE08, 0) | \
+ PIN_AFIO_AF(SRVA1, 1) | \
+ PIN_AFIO_AF(PE10, 0) | \
+ PIN_AFIO_AF(SRVA2, 1) | \
+ PIN_AFIO_AF(PE12, 0) | \
+ PIN_AFIO_AF(SRVA3, 1) | \
+ PIN_AFIO_AF(SRVA4, 1) | \
+ PIN_AFIO_AF(PE15, 0))
+
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(PF00) | \
+ PIN_MODE_INPUT(PF01) | \
+ PIN_MODE_INPUT(PF02) | \
+ PIN_MODE_INPUT(PF03) | \
+ PIN_MODE_INPUT(PF04) | \
+ PIN_MODE_INPUT(PF05) | \
+ PIN_MODE_INPUT(PF06) | \
+ PIN_MODE_INPUT(PF07) | \
+ PIN_MODE_INPUT(PF08) | \
+ PIN_MODE_INPUT(PF09) | \
+ PIN_MODE_INPUT(PF10) | \
+ PIN_MODE_INPUT(PF11) | \
+ PIN_MODE_INPUT(PF12) | \
+ PIN_MODE_INPUT(PF13) | \
+ PIN_MODE_INPUT(PF14) | \
+ PIN_MODE_INPUT(PF15))
+
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(PF00) | \
+ PIN_OTYPE_PUSHPULL(PF01) | \
+ PIN_OTYPE_PUSHPULL(PF02) | \
+ PIN_OTYPE_PUSHPULL(PF03) | \
+ PIN_OTYPE_PUSHPULL(PF04) | \
+ PIN_OTYPE_PUSHPULL(PF05) | \
+ PIN_OTYPE_PUSHPULL(PF06) | \
+ PIN_OTYPE_PUSHPULL(PF07) | \
+ PIN_OTYPE_PUSHPULL(PF08) | \
+ PIN_OTYPE_PUSHPULL(PF09) | \
+ PIN_OTYPE_PUSHPULL(PF10) | \
+ PIN_OTYPE_PUSHPULL(PF11) | \
+ PIN_OTYPE_PUSHPULL(PF12) | \
+ PIN_OTYPE_PUSHPULL(PF13) | \
+ PIN_OTYPE_PUSHPULL(PF14) | \
+ PIN_OTYPE_PUSHPULL(PF15))
+
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(PF00) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF01) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PF15))
+
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_PULLDOWN(PF00) | \
+ PIN_PUPDR_PULLDOWN(PF01) | \
+ PIN_PUPDR_PULLDOWN(PF02) | \
+ PIN_PUPDR_PULLDOWN(PF03) | \
+ PIN_PUPDR_PULLDOWN(PF04) | \
+ PIN_PUPDR_PULLDOWN(PF05) | \
+ PIN_PUPDR_PULLDOWN(PF06) | \
+ PIN_PUPDR_PULLDOWN(PF07) | \
+ PIN_PUPDR_PULLDOWN(PF08) | \
+ PIN_PUPDR_PULLDOWN(PF09) | \
+ PIN_PUPDR_PULLDOWN(PF10) | \
+ PIN_PUPDR_PULLDOWN(PF11) | \
+ PIN_PUPDR_PULLDOWN(PF12) | \
+ PIN_PUPDR_PULLDOWN(PF13) | \
+ PIN_PUPDR_PULLDOWN(PF14) | \
+ PIN_PUPDR_PULLDOWN(PF15))
+
+#define VAL_GPIOF_ODR (PIN_ODR_LEVEL_LOW(PF00) | \
+ PIN_ODR_LEVEL_LOW(PF01) | \
+ PIN_ODR_LEVEL_LOW(PF02) | \
+ PIN_ODR_LEVEL_LOW(PF03) | \
+ PIN_ODR_LEVEL_LOW(PF04) | \
+ PIN_ODR_LEVEL_LOW(PF05) | \
+ PIN_ODR_LEVEL_LOW(PF06) | \
+ PIN_ODR_LEVEL_LOW(PF07) | \
+ PIN_ODR_LEVEL_LOW(PF08) | \
+ PIN_ODR_LEVEL_LOW(PF09) | \
+ PIN_ODR_LEVEL_LOW(PF10) | \
+ PIN_ODR_LEVEL_LOW(PF11) | \
+ PIN_ODR_LEVEL_LOW(PF12) | \
+ PIN_ODR_LEVEL_LOW(PF13) | \
+ PIN_ODR_LEVEL_LOW(PF14) | \
+ PIN_ODR_LEVEL_LOW(PF15))
+
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(PF00, 0) | \
+ PIN_AFIO_AF(PF01, 0) | \
+ PIN_AFIO_AF(PF02, 0) | \
+ PIN_AFIO_AF(PF03, 0) | \
+ PIN_AFIO_AF(PF04, 0) | \
+ PIN_AFIO_AF(PF05, 0) | \
+ PIN_AFIO_AF(PF06, 0) | \
+ PIN_AFIO_AF(PF07, 0))
+
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(PF08, 0) | \
+ PIN_AFIO_AF(PF09, 0) | \
+ PIN_AFIO_AF(PF10, 0) | \
+ PIN_AFIO_AF(PF11, 0) | \
+ PIN_AFIO_AF(PF12, 0) | \
+ PIN_AFIO_AF(PF13, 0) | \
+ PIN_AFIO_AF(PF14, 0) | \
+ PIN_AFIO_AF(PF15, 0))
+
+#define VAL_GPIOG_MODER (PIN_MODE_INPUT(PG00) | \
+ PIN_MODE_INPUT(PG01) | \
+ PIN_MODE_INPUT(PG02) | \
+ PIN_MODE_INPUT(PG03) | \
+ PIN_MODE_INPUT(PG04) | \
+ PIN_MODE_INPUT(PG05) | \
+ PIN_MODE_INPUT(PG06) | \
+ PIN_MODE_INPUT(PG07) | \
+ PIN_MODE_INPUT(PG08) | \
+ PIN_MODE_INPUT(PG09) | \
+ PIN_MODE_INPUT(PG10) | \
+ PIN_MODE_INPUT(PG11) | \
+ PIN_MODE_INPUT(PG12) | \
+ PIN_MODE_INPUT(PG13) | \
+ PIN_MODE_INPUT(PG14) | \
+ PIN_MODE_INPUT(PG15))
+
+#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(PG00) | \
+ PIN_OTYPE_PUSHPULL(PG01) | \
+ PIN_OTYPE_PUSHPULL(PG02) | \
+ PIN_OTYPE_PUSHPULL(PG03) | \
+ PIN_OTYPE_PUSHPULL(PG04) | \
+ PIN_OTYPE_PUSHPULL(PG05) | \
+ PIN_OTYPE_PUSHPULL(PG06) | \
+ PIN_OTYPE_PUSHPULL(PG07) | \
+ PIN_OTYPE_PUSHPULL(PG08) | \
+ PIN_OTYPE_PUSHPULL(PG09) | \
+ PIN_OTYPE_PUSHPULL(PG10) | \
+ PIN_OTYPE_PUSHPULL(PG11) | \
+ PIN_OTYPE_PUSHPULL(PG12) | \
+ PIN_OTYPE_PUSHPULL(PG13) | \
+ PIN_OTYPE_PUSHPULL(PG14) | \
+ PIN_OTYPE_PUSHPULL(PG15))
+
+#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(PG00) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG01) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PG15))
+
+#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLDOWN(PG00) | \
+ PIN_PUPDR_PULLDOWN(PG01) | \
+ PIN_PUPDR_PULLDOWN(PG02) | \
+ PIN_PUPDR_PULLDOWN(PG03) | \
+ PIN_PUPDR_PULLDOWN(PG04) | \
+ PIN_PUPDR_PULLDOWN(PG05) | \
+ PIN_PUPDR_PULLDOWN(PG06) | \
+ PIN_PUPDR_PULLDOWN(PG07) | \
+ PIN_PUPDR_PULLDOWN(PG08) | \
+ PIN_PUPDR_PULLDOWN(PG09) | \
+ PIN_PUPDR_PULLDOWN(PG10) | \
+ PIN_PUPDR_PULLDOWN(PG11) | \
+ PIN_PUPDR_PULLDOWN(PG12) | \
+ PIN_PUPDR_PULLDOWN(PG13) | \
+ PIN_PUPDR_PULLDOWN(PG14) | \
+ PIN_PUPDR_PULLDOWN(PG15))
+
+#define VAL_GPIOG_ODR (PIN_ODR_LEVEL_LOW(PG00) | \
+ PIN_ODR_LEVEL_LOW(PG01) | \
+ PIN_ODR_LEVEL_LOW(PG02) | \
+ PIN_ODR_LEVEL_LOW(PG03) | \
+ PIN_ODR_LEVEL_LOW(PG04) | \
+ PIN_ODR_LEVEL_LOW(PG05) | \
+ PIN_ODR_LEVEL_LOW(PG06) | \
+ PIN_ODR_LEVEL_LOW(PG07) | \
+ PIN_ODR_LEVEL_LOW(PG08) | \
+ PIN_ODR_LEVEL_LOW(PG09) | \
+ PIN_ODR_LEVEL_LOW(PG10) | \
+ PIN_ODR_LEVEL_LOW(PG11) | \
+ PIN_ODR_LEVEL_LOW(PG12) | \
+ PIN_ODR_LEVEL_LOW(PG13) | \
+ PIN_ODR_LEVEL_LOW(PG14) | \
+ PIN_ODR_LEVEL_LOW(PG15))
+
+#define VAL_GPIOG_AFRL (PIN_AFIO_AF(PG00, 0) | \
+ PIN_AFIO_AF(PG01, 0) | \
+ PIN_AFIO_AF(PG02, 0) | \
+ PIN_AFIO_AF(PG03, 0) | \
+ PIN_AFIO_AF(PG04, 0) | \
+ PIN_AFIO_AF(PG05, 0) | \
+ PIN_AFIO_AF(PG06, 0) | \
+ PIN_AFIO_AF(PG07, 0))
+
+#define VAL_GPIOG_AFRH (PIN_AFIO_AF(PG08, 0) | \
+ PIN_AFIO_AF(PG09, 0) | \
+ PIN_AFIO_AF(PG10, 0) | \
+ PIN_AFIO_AF(PG11, 0) | \
+ PIN_AFIO_AF(PG12, 0) | \
+ PIN_AFIO_AF(PG13, 0) | \
+ PIN_AFIO_AF(PG14, 0) | \
+ PIN_AFIO_AF(PG15, 0))
+
+#define VAL_GPIOH_MODER (PIN_MODE_ALTERNATE(OSC_IN) | \
+ PIN_MODE_ALTERNATE(OSC_OUT) | \
+ PIN_MODE_INPUT(PH02) | \
+ PIN_MODE_INPUT(PH03) | \
+ PIN_MODE_INPUT(PH04) | \
+ PIN_MODE_INPUT(PH05) | \
+ PIN_MODE_INPUT(PH06) | \
+ PIN_MODE_INPUT(PH07) | \
+ PIN_MODE_INPUT(PH08) | \
+ PIN_MODE_INPUT(PH09) | \
+ PIN_MODE_INPUT(PH10) | \
+ PIN_MODE_INPUT(PH11) | \
+ PIN_MODE_INPUT(PH12) | \
+ PIN_MODE_INPUT(PH13) | \
+ PIN_MODE_INPUT(PH14) | \
+ PIN_MODE_INPUT(PH15))
+
+#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(OSC_IN) | \
+ PIN_OTYPE_PUSHPULL(OSC_OUT) | \
+ PIN_OTYPE_PUSHPULL(PH02) | \
+ PIN_OTYPE_PUSHPULL(PH03) | \
+ PIN_OTYPE_PUSHPULL(PH04) | \
+ PIN_OTYPE_PUSHPULL(PH05) | \
+ PIN_OTYPE_PUSHPULL(PH06) | \
+ PIN_OTYPE_PUSHPULL(PH07) | \
+ PIN_OTYPE_PUSHPULL(PH08) | \
+ PIN_OTYPE_PUSHPULL(PH09) | \
+ PIN_OTYPE_PUSHPULL(PH10) | \
+ PIN_OTYPE_PUSHPULL(PH11) | \
+ PIN_OTYPE_PUSHPULL(PH12) | \
+ PIN_OTYPE_PUSHPULL(PH13) | \
+ PIN_OTYPE_PUSHPULL(PH14) | \
+ PIN_OTYPE_PUSHPULL(PH15))
+
+#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_SPEED_HIGH(OSC_IN) | \
+ PIN_OSPEED_SPEED_HIGH(OSC_OUT) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PH15))
+
+#define VAL_GPIOH_PUPDR (PIN_PUPDR_FLOATING(OSC_IN) | \
+ PIN_PUPDR_FLOATING(OSC_OUT) | \
+ PIN_PUPDR_PULLDOWN(PH02) | \
+ PIN_PUPDR_PULLDOWN(PH03) | \
+ PIN_PUPDR_PULLDOWN(PH04) | \
+ PIN_PUPDR_PULLDOWN(PH05) | \
+ PIN_PUPDR_PULLDOWN(PH06) | \
+ PIN_PUPDR_PULLDOWN(PH07) | \
+ PIN_PUPDR_PULLDOWN(PH08) | \
+ PIN_PUPDR_PULLDOWN(PH09) | \
+ PIN_PUPDR_PULLDOWN(PH10) | \
+ PIN_PUPDR_PULLDOWN(PH11) | \
+ PIN_PUPDR_PULLDOWN(PH12) | \
+ PIN_PUPDR_PULLDOWN(PH13) | \
+ PIN_PUPDR_PULLDOWN(PH14) | \
+ PIN_PUPDR_PULLDOWN(PH15))
+
+#define VAL_GPIOH_ODR (PIN_ODR_LEVEL_HIGH(OSC_IN) | \
+ PIN_ODR_LEVEL_HIGH(OSC_OUT) | \
+ PIN_ODR_LEVEL_LOW(PH02) | \
+ PIN_ODR_LEVEL_LOW(PH03) | \
+ PIN_ODR_LEVEL_LOW(PH04) | \
+ PIN_ODR_LEVEL_LOW(PH05) | \
+ PIN_ODR_LEVEL_LOW(PH06) | \
+ PIN_ODR_LEVEL_LOW(PH07) | \
+ PIN_ODR_LEVEL_LOW(PH08) | \
+ PIN_ODR_LEVEL_LOW(PH09) | \
+ PIN_ODR_LEVEL_LOW(PH10) | \
+ PIN_ODR_LEVEL_LOW(PH11) | \
+ PIN_ODR_LEVEL_LOW(PH12) | \
+ PIN_ODR_LEVEL_LOW(PH13) | \
+ PIN_ODR_LEVEL_LOW(PH14) | \
+ PIN_ODR_LEVEL_LOW(PH15))
+
+#define VAL_GPIOH_AFRL (PIN_AFIO_AF(OSC_IN, 0) | \
+ PIN_AFIO_AF(OSC_OUT, 0) | \
+ PIN_AFIO_AF(PH02, 0) | \
+ PIN_AFIO_AF(PH03, 0) | \
+ PIN_AFIO_AF(PH04, 0) | \
+ PIN_AFIO_AF(PH05, 0) | \
+ PIN_AFIO_AF(PH06, 0) | \
+ PIN_AFIO_AF(PH07, 0))
+
+#define VAL_GPIOH_AFRH (PIN_AFIO_AF(PH08, 0) | \
+ PIN_AFIO_AF(PH09, 0) | \
+ PIN_AFIO_AF(PH10, 0) | \
+ PIN_AFIO_AF(PH11, 0) | \
+ PIN_AFIO_AF(PH12, 0) | \
+ PIN_AFIO_AF(PH13, 0) | \
+ PIN_AFIO_AF(PH14, 0) | \
+ PIN_AFIO_AF(PH15, 0))
+
+#define VAL_GPIOI_MODER (PIN_MODE_INPUT(PI00) | \
+ PIN_MODE_INPUT(PI01) | \
+ PIN_MODE_INPUT(PI02) | \
+ PIN_MODE_INPUT(PI03) | \
+ PIN_MODE_INPUT(PI04) | \
+ PIN_MODE_INPUT(PI05) | \
+ PIN_MODE_INPUT(PI06) | \
+ PIN_MODE_INPUT(PI07) | \
+ PIN_MODE_INPUT(PI08) | \
+ PIN_MODE_INPUT(PI09) | \
+ PIN_MODE_INPUT(PI10) | \
+ PIN_MODE_INPUT(PI11) | \
+ PIN_MODE_INPUT(PI12) | \
+ PIN_MODE_INPUT(PI13) | \
+ PIN_MODE_INPUT(PI14) | \
+ PIN_MODE_INPUT(PI15))
+
+#define VAL_GPIOI_OTYPER (PIN_OTYPE_PUSHPULL(PI00) | \
+ PIN_OTYPE_PUSHPULL(PI01) | \
+ PIN_OTYPE_PUSHPULL(PI02) | \
+ PIN_OTYPE_PUSHPULL(PI03) | \
+ PIN_OTYPE_PUSHPULL(PI04) | \
+ PIN_OTYPE_PUSHPULL(PI05) | \
+ PIN_OTYPE_PUSHPULL(PI06) | \
+ PIN_OTYPE_PUSHPULL(PI07) | \
+ PIN_OTYPE_PUSHPULL(PI08) | \
+ PIN_OTYPE_PUSHPULL(PI09) | \
+ PIN_OTYPE_PUSHPULL(PI10) | \
+ PIN_OTYPE_PUSHPULL(PI11) | \
+ PIN_OTYPE_PUSHPULL(PI12) | \
+ PIN_OTYPE_PUSHPULL(PI13) | \
+ PIN_OTYPE_PUSHPULL(PI14) | \
+ PIN_OTYPE_PUSHPULL(PI15))
+
+#define VAL_GPIOI_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(PI00) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI01) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PI15))
+
+#define VAL_GPIOI_PUPDR (PIN_PUPDR_PULLDOWN(PI00) | \
+ PIN_PUPDR_PULLDOWN(PI01) | \
+ PIN_PUPDR_PULLDOWN(PI02) | \
+ PIN_PUPDR_PULLDOWN(PI03) | \
+ PIN_PUPDR_PULLDOWN(PI04) | \
+ PIN_PUPDR_PULLDOWN(PI05) | \
+ PIN_PUPDR_PULLDOWN(PI06) | \
+ PIN_PUPDR_PULLDOWN(PI07) | \
+ PIN_PUPDR_PULLDOWN(PI08) | \
+ PIN_PUPDR_PULLDOWN(PI09) | \
+ PIN_PUPDR_PULLDOWN(PI10) | \
+ PIN_PUPDR_PULLDOWN(PI11) | \
+ PIN_PUPDR_PULLDOWN(PI12) | \
+ PIN_PUPDR_PULLDOWN(PI13) | \
+ PIN_PUPDR_PULLDOWN(PI14) | \
+ PIN_PUPDR_PULLDOWN(PI15))
+
+#define VAL_GPIOI_ODR (PIN_ODR_LEVEL_LOW(PI00) | \
+ PIN_ODR_LEVEL_LOW(PI01) | \
+ PIN_ODR_LEVEL_LOW(PI02) | \
+ PIN_ODR_LEVEL_LOW(PI03) | \
+ PIN_ODR_LEVEL_LOW(PI04) | \
+ PIN_ODR_LEVEL_LOW(PI05) | \
+ PIN_ODR_LEVEL_LOW(PI06) | \
+ PIN_ODR_LEVEL_LOW(PI07) | \
+ PIN_ODR_LEVEL_LOW(PI08) | \
+ PIN_ODR_LEVEL_LOW(PI09) | \
+ PIN_ODR_LEVEL_LOW(PI10) | \
+ PIN_ODR_LEVEL_LOW(PI11) | \
+ PIN_ODR_LEVEL_LOW(PI12) | \
+ PIN_ODR_LEVEL_LOW(PI13) | \
+ PIN_ODR_LEVEL_LOW(PI14) | \
+ PIN_ODR_LEVEL_LOW(PI15))
+
+#define VAL_GPIOI_AFRL (PIN_AFIO_AF(PI00, 0) | \
+ PIN_AFIO_AF(PI01, 0) | \
+ PIN_AFIO_AF(PI02, 0) | \
+ PIN_AFIO_AF(PI03, 0) | \
+ PIN_AFIO_AF(PI04, 0) | \
+ PIN_AFIO_AF(PI05, 0) | \
+ PIN_AFIO_AF(PI06, 0) | \
+ PIN_AFIO_AF(PI07, 0))
+
+#define VAL_GPIOI_AFRH (PIN_AFIO_AF(PI08, 0) | \
+ PIN_AFIO_AF(PI09, 0) | \
+ PIN_AFIO_AF(PI10, 0) | \
+ PIN_AFIO_AF(PI11, 0) | \
+ PIN_AFIO_AF(PI12, 0) | \
+ PIN_AFIO_AF(PI13, 0) | \
+ PIN_AFIO_AF(PI14, 0) | \
+ PIN_AFIO_AF(PI15, 0))
+
+#define VAL_GPIOJ_MODER (PIN_MODE_INPUT(PJ00) | \
+ PIN_MODE_INPUT(PJ01) | \
+ PIN_MODE_INPUT(PJ02) | \
+ PIN_MODE_INPUT(PJ03) | \
+ PIN_MODE_INPUT(PJ04) | \
+ PIN_MODE_INPUT(PJ05) | \
+ PIN_MODE_INPUT(PJ06) | \
+ PIN_MODE_INPUT(PJ07) | \
+ PIN_MODE_INPUT(PJ08) | \
+ PIN_MODE_INPUT(PJ09) | \
+ PIN_MODE_INPUT(PJ10) | \
+ PIN_MODE_INPUT(PJ11) | \
+ PIN_MODE_INPUT(PJ12) | \
+ PIN_MODE_INPUT(PJ13) | \
+ PIN_MODE_INPUT(PJ14) | \
+ PIN_MODE_INPUT(PJ15))
+
+#define VAL_GPIOJ_OTYPER (PIN_OTYPE_PUSHPULL(PJ00) | \
+ PIN_OTYPE_PUSHPULL(PJ01) | \
+ PIN_OTYPE_PUSHPULL(PJ02) | \
+ PIN_OTYPE_PUSHPULL(PJ03) | \
+ PIN_OTYPE_PUSHPULL(PJ04) | \
+ PIN_OTYPE_PUSHPULL(PJ05) | \
+ PIN_OTYPE_PUSHPULL(PJ06) | \
+ PIN_OTYPE_PUSHPULL(PJ07) | \
+ PIN_OTYPE_PUSHPULL(PJ08) | \
+ PIN_OTYPE_PUSHPULL(PJ09) | \
+ PIN_OTYPE_PUSHPULL(PJ10) | \
+ PIN_OTYPE_PUSHPULL(PJ11) | \
+ PIN_OTYPE_PUSHPULL(PJ12) | \
+ PIN_OTYPE_PUSHPULL(PJ13) | \
+ PIN_OTYPE_PUSHPULL(PJ14) | \
+ PIN_OTYPE_PUSHPULL(PJ15))
+
+#define VAL_GPIOJ_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(PJ00) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ01) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PJ15))
+
+#define VAL_GPIOJ_PUPDR (PIN_PUPDR_PULLDOWN(PJ00) | \
+ PIN_PUPDR_PULLDOWN(PJ01) | \
+ PIN_PUPDR_PULLDOWN(PJ02) | \
+ PIN_PUPDR_PULLDOWN(PJ03) | \
+ PIN_PUPDR_PULLDOWN(PJ04) | \
+ PIN_PUPDR_PULLDOWN(PJ05) | \
+ PIN_PUPDR_PULLDOWN(PJ06) | \
+ PIN_PUPDR_PULLDOWN(PJ07) | \
+ PIN_PUPDR_PULLDOWN(PJ08) | \
+ PIN_PUPDR_PULLDOWN(PJ09) | \
+ PIN_PUPDR_PULLDOWN(PJ10) | \
+ PIN_PUPDR_PULLDOWN(PJ11) | \
+ PIN_PUPDR_PULLDOWN(PJ12) | \
+ PIN_PUPDR_PULLDOWN(PJ13) | \
+ PIN_PUPDR_PULLDOWN(PJ14) | \
+ PIN_PUPDR_PULLDOWN(PJ15))
+
+#define VAL_GPIOJ_ODR (PIN_ODR_LEVEL_LOW(PJ00) | \
+ PIN_ODR_LEVEL_LOW(PJ01) | \
+ PIN_ODR_LEVEL_LOW(PJ02) | \
+ PIN_ODR_LEVEL_LOW(PJ03) | \
+ PIN_ODR_LEVEL_LOW(PJ04) | \
+ PIN_ODR_LEVEL_LOW(PJ05) | \
+ PIN_ODR_LEVEL_LOW(PJ06) | \
+ PIN_ODR_LEVEL_LOW(PJ07) | \
+ PIN_ODR_LEVEL_LOW(PJ08) | \
+ PIN_ODR_LEVEL_LOW(PJ09) | \
+ PIN_ODR_LEVEL_LOW(PJ10) | \
+ PIN_ODR_LEVEL_LOW(PJ11) | \
+ PIN_ODR_LEVEL_LOW(PJ12) | \
+ PIN_ODR_LEVEL_LOW(PJ13) | \
+ PIN_ODR_LEVEL_LOW(PJ14) | \
+ PIN_ODR_LEVEL_LOW(PJ15))
+
+#define VAL_GPIOJ_AFRL (PIN_AFIO_AF(PJ00, 0) | \
+ PIN_AFIO_AF(PJ01, 0) | \
+ PIN_AFIO_AF(PJ02, 0) | \
+ PIN_AFIO_AF(PJ03, 0) | \
+ PIN_AFIO_AF(PJ04, 0) | \
+ PIN_AFIO_AF(PJ05, 0) | \
+ PIN_AFIO_AF(PJ06, 0) | \
+ PIN_AFIO_AF(PJ07, 0))
+
+#define VAL_GPIOJ_AFRH (PIN_AFIO_AF(PJ08, 0) | \
+ PIN_AFIO_AF(PJ09, 0) | \
+ PIN_AFIO_AF(PJ10, 0) | \
+ PIN_AFIO_AF(PJ11, 0) | \
+ PIN_AFIO_AF(PJ12, 0) | \
+ PIN_AFIO_AF(PJ13, 0) | \
+ PIN_AFIO_AF(PJ14, 0) | \
+ PIN_AFIO_AF(PJ15, 0))
+
+#define VAL_GPIOK_MODER (PIN_MODE_INPUT(PK00) | \
+ PIN_MODE_INPUT(PK01) | \
+ PIN_MODE_INPUT(PK02) | \
+ PIN_MODE_INPUT(PK03) | \
+ PIN_MODE_INPUT(PK04) | \
+ PIN_MODE_INPUT(PK05) | \
+ PIN_MODE_INPUT(PK06) | \
+ PIN_MODE_INPUT(PK07) | \
+ PIN_MODE_INPUT(PK08) | \
+ PIN_MODE_INPUT(PK09) | \
+ PIN_MODE_INPUT(PK10) | \
+ PIN_MODE_INPUT(PK11) | \
+ PIN_MODE_INPUT(PK12) | \
+ PIN_MODE_INPUT(PK13) | \
+ PIN_MODE_INPUT(PK14) | \
+ PIN_MODE_INPUT(PK15))
+
+#define VAL_GPIOK_OTYPER (PIN_OTYPE_PUSHPULL(PK00) | \
+ PIN_OTYPE_PUSHPULL(PK01) | \
+ PIN_OTYPE_PUSHPULL(PK02) | \
+ PIN_OTYPE_PUSHPULL(PK03) | \
+ PIN_OTYPE_PUSHPULL(PK04) | \
+ PIN_OTYPE_PUSHPULL(PK05) | \
+ PIN_OTYPE_PUSHPULL(PK06) | \
+ PIN_OTYPE_PUSHPULL(PK07) | \
+ PIN_OTYPE_PUSHPULL(PK08) | \
+ PIN_OTYPE_PUSHPULL(PK09) | \
+ PIN_OTYPE_PUSHPULL(PK10) | \
+ PIN_OTYPE_PUSHPULL(PK11) | \
+ PIN_OTYPE_PUSHPULL(PK12) | \
+ PIN_OTYPE_PUSHPULL(PK13) | \
+ PIN_OTYPE_PUSHPULL(PK14) | \
+ PIN_OTYPE_PUSHPULL(PK15))
+
+#define VAL_GPIOK_OSPEEDR (PIN_OSPEED_SPEED_VERYLOW(PK00) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK01) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK02) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK03) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK04) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK05) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK06) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK07) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK08) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK09) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK10) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK11) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK12) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK13) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK14) | \
+ PIN_OSPEED_SPEED_VERYLOW(PK15))
+
+#define VAL_GPIOK_PUPDR (PIN_PUPDR_PULLDOWN(PK00) | \
+ PIN_PUPDR_PULLDOWN(PK01) | \
+ PIN_PUPDR_PULLDOWN(PK02) | \
+ PIN_PUPDR_PULLDOWN(PK03) | \
+ PIN_PUPDR_PULLDOWN(PK04) | \
+ PIN_PUPDR_PULLDOWN(PK05) | \
+ PIN_PUPDR_PULLDOWN(PK06) | \
+ PIN_PUPDR_PULLDOWN(PK07) | \
+ PIN_PUPDR_PULLDOWN(PK08) | \
+ PIN_PUPDR_PULLDOWN(PK09) | \
+ PIN_PUPDR_PULLDOWN(PK10) | \
+ PIN_PUPDR_PULLDOWN(PK11) | \
+ PIN_PUPDR_PULLDOWN(PK12) | \
+ PIN_PUPDR_PULLDOWN(PK13) | \
+ PIN_PUPDR_PULLDOWN(PK14) | \
+ PIN_PUPDR_PULLDOWN(PK15))
+
+#define VAL_GPIOK_ODR (PIN_ODR_LEVEL_LOW(PK00) | \
+ PIN_ODR_LEVEL_LOW(PK01) | \
+ PIN_ODR_LEVEL_LOW(PK02) | \
+ PIN_ODR_LEVEL_LOW(PK03) | \
+ PIN_ODR_LEVEL_LOW(PK04) | \
+ PIN_ODR_LEVEL_LOW(PK05) | \
+ PIN_ODR_LEVEL_LOW(PK06) | \
+ PIN_ODR_LEVEL_LOW(PK07) | \
+ PIN_ODR_LEVEL_LOW(PK08) | \
+ PIN_ODR_LEVEL_LOW(PK09) | \
+ PIN_ODR_LEVEL_LOW(PK10) | \
+ PIN_ODR_LEVEL_LOW(PK11) | \
+ PIN_ODR_LEVEL_LOW(PK12) | \
+ PIN_ODR_LEVEL_LOW(PK13) | \
+ PIN_ODR_LEVEL_LOW(PK14) | \
+ PIN_ODR_LEVEL_LOW(PK15))
+
+#define VAL_GPIOK_AFRL (PIN_AFIO_AF(PK00, 0) | \
+ PIN_AFIO_AF(PK01, 0) | \
+ PIN_AFIO_AF(PK02, 0) | \
+ PIN_AFIO_AF(PK03, 0) | \
+ PIN_AFIO_AF(PK04, 0) | \
+ PIN_AFIO_AF(PK05, 0) | \
+ PIN_AFIO_AF(PK06, 0) | \
+ PIN_AFIO_AF(PK07, 0))
+
+#define VAL_GPIOK_AFRH (PIN_AFIO_AF(PK08, 0) | \
+ PIN_AFIO_AF(PK09, 0) | \
+ PIN_AFIO_AF(PK10, 0) | \
+ PIN_AFIO_AF(PK11, 0) | \
+ PIN_AFIO_AF(PK12, 0) | \
+ PIN_AFIO_AF(PK13, 0) | \
+ PIN_AFIO_AF(PK14, 0) | \
+ PIN_AFIO_AF(PK15, 0))
+
+#define AF_OTG_FS_DM 10U
+#define AF_LINE_OTG_FS_DM 10U
+#define AF_OTG_FS_DP 10U
+#define AF_LINE_OTG_FS_DP 10U
+#define AF_SWDIO 0U
+#define AF_LINE_SWDIO 0U
+#define AF_SWCLK 0U
+#define AF_LINE_SWCLK 0U
+#define AF_UART7_TX 12U
+#define AF_LINE_UART7_TX 12U
+#define AF_UART7_RX 12U
+#define AF_LINE_UART7_RX 12U
+#define AF_DSHOT_RX 1U
+#define AF_LINE_DSHOT_RX 1U
+#define AF_SRVB1 2U
+#define AF_LINE_SRVB1 2U
+#define AF_SRVB3 2U
+#define AF_LINE_SRVB3 2U
+#define AF_SRVB4 2U
+#define AF_LINE_SRVB4 2U
+#define AF_I2C2_SCL_EXTERNAL 4U
+#define AF_LINE_I2C2_SCL_EXTERNAL 4U
+#define AF_I2C2_SDA_EXTERNAL 4U
+#define AF_LINE_I2C2_SDA_EXTERNAL 4U
+#define AF_SPI2_EXTERNAL_MOSI 5U
+#define AF_LINE_SPI2_EXTERNAL_MOSI 5U
+#define AF_SPI2_EXTERNAL_MISO 5U
+#define AF_LINE_SPI2_EXTERNAL_MISO 5U
+#define AF_SDMMC1_D0 12U
+#define AF_LINE_SDMMC1_D0 12U
+#define AF_SDMMC1_D1 12U
+#define AF_LINE_SDMMC1_D1 12U
+#define AF_SDMMC1_D2 12U
+#define AF_LINE_SDMMC1_D2 12U
+#define AF_SDMMC1_D3 12U
+#define AF_LINE_SDMMC1_D3 12U
+#define AF_SDMMC1_CK 12U
+#define AF_LINE_SDMMC1_CK 12U
+#define AF_OSC32_IN 0U
+#define AF_LINE_OSC32_IN 0U
+#define AF_OSC32_OUT 0U
+#define AF_LINE_OSC32_OUT 0U
+#define AF_CAN_RX 9U
+#define AF_LINE_CAN_RX 9U
+#define AF_CAN_TX 9U
+#define AF_LINE_CAN_TX 9U
+#define AF_SDMMC1_CMD 12U
+#define AF_LINE_SDMMC1_CMD 12U
+#define AF_SPI2_EXTERNAL_CLK 5U
+#define AF_LINE_SPI2_EXTERNAL_CLK 5U
+#define AF_UART2_TX 7U
+#define AF_LINE_UART2_TX 7U
+#define AF_UART2_RX 7U
+#define AF_LINE_UART2_RX 7U
+#define AF_UART3_TX 7U
+#define AF_LINE_UART3_TX 7U
+#define AF_UART3_RX 7U
+#define AF_LINE_UART3_RX 7U
+#define AF_I2C4_SCL_EXTERNAL 4U
+#define AF_LINE_I2C4_SCL_EXTERNAL 4U
+#define AF_I2C4_SDA_EXTERNAL 4U
+#define AF_LINE_I2C4_SDA_EXTERNAL 4U
+#define AF_RC1 8U
+#define AF_LINE_RC1 8U
+#define AF_SPI4_INTERNAL_CLK 5U
+#define AF_LINE_SPI4_INTERNAL_CLK 5U
+#define AF_SPI4_INTERNAL_MISO 5U
+#define AF_LINE_SPI4_INTERNAL_MISO 5U
+#define AF_SPI4_INTERNAL_MOSI 5U
+#define AF_LINE_SPI4_INTERNAL_MOSI 5U
+#define AF_SRVA1 1U
+#define AF_LINE_SRVA1 1U
+#define AF_SRVA2 1U
+#define AF_LINE_SRVA2 1U
+#define AF_SRVA3 1U
+#define AF_LINE_SRVA3 1U
+#define AF_SRVA4 1U
+#define AF_LINE_SRVA4 1U
+#define AF_OSC_IN 0U
+#define AF_LINE_OSC_IN 0U
+#define AF_OSC_OUT 0U
+#define AF_LINE_OSC_OUT 0U
+
+
+#define AUX_A1_ADC 1
+#define AUX_A1_ADC_FN IN
+#define AUX_A1_ADC_IN 0
+#define AUX_A1_TIM 5
+#define AUX_A1_TIM_FN CH
+#define AUX_A1_TIM_CH 1
+#define AUX_A1_TIM_AF 2
+#define AUX_A1_UART 4
+#define AUX_A1_UART_FN TX
+#define AUX_A1_UART_AF 8
+#define AUX_A1_USART 2
+#define AUX_A1_USART_FN CTS
+#define AUX_A1_USART_AF 7
+#define AUX_A2_ADC 1
+#define AUX_A2_ADC_FN IN
+#define AUX_A2_ADC_IN 1
+#define AUX_A2_TIM 5
+#define AUX_A2_TIM_FN CH
+#define AUX_A2_TIM_CH 2
+#define AUX_A2_TIM_AF 2
+#define AUX_A2_UART 4
+#define AUX_A2_UART_FN RX
+#define AUX_A2_UART_AF 8
+#define AUX_A2_USART 2
+#define AUX_A2_USART_FN RTS
+#define AUX_A2_USART_AF 7
+#define AUX_A3_ADC 1
+#define AUX_A3_ADC_FN IN
+#define AUX_A3_ADC_IN 2
+#define AUX_A3_TIM 5
+#define AUX_A3_TIM_FN CH
+#define AUX_A3_TIM_CH 3
+#define AUX_A3_TIM_AF 2
+#define AUX_A4_ADC 1
+#define AUX_A4_ADC_FN IN
+#define AUX_A4_ADC_IN 3
+#define AUX_A4_TIM 5
+#define AUX_A4_TIM_FN CH
+#define AUX_A4_TIM_CH 4
+#define AUX_A4_TIM_AF 2
+#define AUX_B1_ADC 1
+#define AUX_B1_ADC_FN IN
+#define AUX_B1_ADC_IN 6
+#define AUX_B1_TIM 3
+#define AUX_B1_TIM_FN CH
+#define AUX_B1_TIM_CH 1
+#define AUX_B1_TIM_AF 2
+#define AUX_B2_ADC 1
+#define AUX_B2_ADC_FN IN
+#define AUX_B2_ADC_IN 7
+#define AUX_B2_TIM 3
+#define AUX_B2_TIM_FN CH
+#define AUX_B2_TIM_CH 2
+#define AUX_B2_TIM_AF 2
+#define AUX_B4_ADC 1
+#define AUX_B4_ADC_FN IN
+#define AUX_B4_ADC_IN 9
+#define AUX_B4_TIM 3
+#define AUX_B4_TIM_FN CH
+#define AUX_B4_TIM_CH 4
+#define AUX_B4_TIM_AF 2
+#define SRVB1_TIM 4
+#define SRVB1_TIM_FN CH
+#define SRVB1_TIM_CH 1
+#define SRVB1_TIM_AF 2
+#define SRVB3_TIM 4
+#define SRVB3_TIM_FN CH
+#define SRVB3_TIM_CH 3
+#define SRVB3_TIM_AF 2
+#define SRVB4_TIM 4
+#define SRVB4_TIM_FN CH
+#define SRVB4_TIM_CH 4
+#define SRVB4_TIM_AF 2
+#define VBAT_MEAS_ADC 1
+#define VBAT_MEAS_ADC_FN IN
+#define VBAT_MEAS_ADC_IN 10
+#define RC2_TIM 8
+#define RC2_TIM_FN CH
+#define RC2_TIM_CH 1
+#define RC2_TIM_AF 3
+#define RC2_USART 6
+#define RC2_USART_FN TX
+#define RC2_USART_AF 8
+#define RC1_UART 8
+#define RC1_UART_FN RX
+#define RC1_UART_AF 8
+#define SRVA1_TIM 1
+#define SRVA1_TIM_FN CH
+#define SRVA1_TIM_CH 1
+#define SRVA1_TIM_AF 1
+#define SRVA2_TIM 1
+#define SRVA2_TIM_FN CH
+#define SRVA2_TIM_CH 2
+#define SRVA2_TIM_AF 1
+#define SRVA3_TIM 1
+#define SRVA3_TIM_FN CH
+#define SRVA3_TIM_CH 3
+#define SRVA3_TIM_AF 1
+#define SRVA4_TIM 1
+#define SRVA4_TIM_FN CH
+#define SRVA4_TIM_CH 4
+#define SRVA4_TIM_AF 1
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
diff --git a/sw/airborne/boards/nucleo/144_f767zi/board.mk b/sw/airborne/boards/nucleo/144_f767zi/board.mk
new file mode 100644
index 0000000000..5a109515f4
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/board.mk
@@ -0,0 +1,20 @@
+#
+# ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Required include directories
+BOARDINC = $(CHIBIOS_BOARD_DIR)
+
+# List of all the board related files.
+BOARDSRC = ${BOARDINC}/board.c
diff --git a/sw/airborne/boards/nucleo/144_f767zi/mcuconf.h b/sw/airborne/boards/nucleo/144_f767zi/mcuconf.h
new file mode 100644
index 0000000000..2263eabb5a
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/mcuconf.h
@@ -0,0 +1,498 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F7xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F7xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_BKPRAM_ENABLE FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED TRUE
+#define STM32_CLOCK48_REQUIRED TRUE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLM_VALUE 8
+#define STM32_PLLN_VALUE 432
+#define STM32_PLLP_VALUE 2
+#define STM32_PLLQ_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV4
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#if HAL_USE_RTC
+#define STM32_RTCSEL STM32_RTCSEL_LSE
+#else
+#define STM32_RTCSEL STM32_RTCSEL_NOCLOCK
+#endif
+#define STM32_RTCPRE_VALUE 25
+#define STM32_MCO1SEL STM32_MCO1SEL_HSI
+#define STM32_MCO1PRE STM32_MCO1PRE_DIV1
+#define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK
+#define STM32_MCO2PRE STM32_MCO2PRE_DIV4
+#define STM32_I2SSRC STM32_I2SSRC_OFF
+#define STM32_PLLI2SN_VALUE 192
+#define STM32_PLLI2SP_VALUE 4
+#define STM32_PLLI2SQ_VALUE 4
+#define STM32_PLLI2SR_VALUE 4
+#define STM32_PLLI2SDIVQ_VALUE 2
+#define STM32_PLLSAIN_VALUE 192
+#define STM32_PLLSAIP_VALUE 4
+#define STM32_PLLSAIQ_VALUE 4
+#define STM32_PLLSAIR_VALUE 4
+#define STM32_PLLSAIDIVQ_VALUE 2
+#define STM32_PLLSAIDIVR_VALUE 2
+#define STM32_SAI1SEL STM32_SAI1SEL_OFF
+#define STM32_SAI2SEL STM32_SAI2SEL_OFF
+#define STM32_LCDTFT_REQUIRED FALSE
+#define STM32_USART1SEL STM32_USART1SEL_PCLK2
+#define STM32_USART2SEL STM32_USART2SEL_PCLK1
+#define STM32_USART3SEL STM32_USART3SEL_PCLK1
+#define STM32_UART4SEL STM32_UART4SEL_PCLK1
+#define STM32_UART5SEL STM32_UART5SEL_PCLK1
+#define STM32_USART6SEL STM32_USART6SEL_PCLK2
+#define STM32_UART7SEL STM32_UART7SEL_PCLK1
+#define STM32_UART8SEL STM32_UART8SEL_PCLK1
+#define STM32_I2C1SEL STM32_I2C1SEL_PCLK1
+#define STM32_I2C2SEL STM32_I2C2SEL_PCLK1
+#define STM32_I2C3SEL STM32_I2C3SEL_PCLK1
+#define STM32_I2C4SEL STM32_I2C4SEL_PCLK1
+#define STM32_LPTIM1SEL STM32_LPTIM1SEL_PCLK1
+#define STM32_CECSEL STM32_CECSEL_LSE
+#define STM32_CK48MSEL STM32_CK48MSEL_PLL
+#define STM32_SDMMC1SEL STM32_SDMMC1SEL_PLL48CLK
+#define STM32_SDMMC2SEL STM32_SDMMC2SEL_PLL48CLK
+#define STM32_SRAM2_NOCACHE FALSE
+
+/*
+ * IRQ system settings.
+ */
+#define STM32_IRQ_EXTI0_PRIORITY 6
+#define STM32_IRQ_EXTI1_PRIORITY 6
+#define STM32_IRQ_EXTI2_PRIORITY 6
+#define STM32_IRQ_EXTI3_PRIORITY 6
+#define STM32_IRQ_EXTI4_PRIORITY 6
+#define STM32_IRQ_EXTI5_9_PRIORITY 6
+#define STM32_IRQ_EXTI10_15_PRIORITY 6
+#define STM32_IRQ_EXTI16_PRIORITY 6
+#define STM32_IRQ_EXTI17_PRIORITY 15
+#define STM32_IRQ_EXTI18_PRIORITY 6
+#define STM32_IRQ_EXTI19_PRIORITY 6
+#define STM32_IRQ_EXTI20_PRIORITY 6
+#define STM32_IRQ_EXTI21_PRIORITY 15
+#define STM32_IRQ_EXTI22_PRIORITY 15
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV4
+#define STM32_ADC_USE_ADC1 TRUE
+#define STM32_ADC_USE_ADC2 FALSE
+#define STM32_ADC_USE_ADC3 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC2_DMA_PRIORITY 2
+#define STM32_ADC_ADC3_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 6
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 6
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 6
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#if USE_CAN1
+#define STM32_CAN_USE_CAN1 TRUE
+#else
+#define STM32_CAN_USE_CAN1 FALSE
+#endif
+#define STM32_CAN_USE_CAN2 FALSE
+#define STM32_CAN_USE_CAN3 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+#define STM32_CAN_CAN2_IRQ_PRIORITY 11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE FALSE
+#define STM32_DAC_USE_DAC1_CH1 FALSE
+#define STM32_DAC_USE_DAC1_CH2 FALSE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
+//#define STM32_DAC_DAC1_CH1_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_DAC_DAC1_CH2_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE // keep free if in tickless mode
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM6 FALSE
+#define STM32_GPT_USE_TIM7 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_USE_TIM9 FALSE
+#define STM32_GPT_USE_TIM11 FALSE
+#define STM32_GPT_USE_TIM12 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM6_IRQ_PRIORITY 7
+#define STM32_GPT_TIM7_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+#define STM32_GPT_TIM9_IRQ_PRIORITY 7
+#define STM32_GPT_TIM11_IRQ_PRIORITY 7
+#define STM32_GPT_TIM12_IRQ_PRIORITY 7
+#define STM32_GPT_TIM14_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+//#if USE_I2C1
+//#define STM32_I2C_USE_I2C1 TRUE
+//#else
+#define STM32_I2C_USE_I2C1 FALSE // incompatible with I2C2 and I2C4
+//#endif
+#if USE_I2C2
+#define STM32_I2C_USE_I2C2 TRUE
+#else
+#define STM32_I2C_USE_I2C2 FALSE
+#endif
+#define STM32_I2C_USE_I2C3 FALSE
+#if USE_I2C4
+#define STM32_I2C_USE_I2C4 TRUE
+#else
+#define STM32_I2C_USE_I2C4 FALSE
+#endif
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+//#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+//#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2C_I2C4_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_I2C_I2C4_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C4_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_I2C4_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#ifdef USE_PWM_INPUT1
+#define STM32_ICU_USE_TIM2 TRUE
+#else
+#define STM32_ICU_USE_TIM2 FALSE // keep free if in tickless mode
+#endif
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#if RADIO_CONTROL_TYPE_PPM
+#define STM32_ICU_USE_TIM5 TRUE
+#else
+#define STM32_ICU_USE_TIM5 FALSE
+#endif
+#ifdef USE_PWM_INPUT2
+#define STM32_ICU_USE_TIM8 TRUE
+#else
+#define STM32_ICU_USE_TIM8 FALSE
+#endif
+#define STM32_ICU_USE_TIM9 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+#define STM32_ICU_TIM9_IRQ_PRIORITY 7
+
+/*
+ * MAC driver system settings.
+ */
+#define STM32_MAC_TRANSMIT_BUFFERS 2
+#define STM32_MAC_RECEIVE_BUFFERS 4
+#define STM32_MAC_BUFFERS_SIZE 1522
+#define STM32_MAC_PHY_TIMEOUT 100
+#define STM32_MAC_ETH1_CHANGE_PHY_STATE TRUE
+#define STM32_MAC_ETH1_IRQ_PRIORITY 13
+#define STM32_MAC_IP_CHECKSUM_OFFLOAD 0
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#ifndef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
+#endif
+#ifndef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 FALSE // keep free if in tickless mode, can be used in systick mode
+#endif
+#ifndef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 FALSE // enable for servo 12, 14, 15, 16 on AUX connectors
+#endif
+#ifndef STM32_PWM_USE_TIM4
+#define STM32_PWM_USE_TIM4 TRUE
+#endif
+#ifndef STM32_PWM_USE_TIM5
+#define STM32_PWM_USE_TIM5 FALSE // enable for servo 9, 10, 11, 13 on AUX connectors
+#endif
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_USE_TIM9 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+#define STM32_PWM_TIM9_IRQ_PRIORITY 7
+
+#define STM32_PWM1_UP_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_PWM1_UP_DMA_CHANNEL 6
+#define STM32_PWM1_UP_DMA_IRQ_PRIORITY 6
+#define STM32_PWM1_UP_DMA_PRIORITY 2
+
+#define STM32_PWM4_UP_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_PWM4_UP_DMA_CHANNEL 2
+#define STM32_PWM4_UP_DMA_IRQ_PRIORITY 6
+#define STM32_PWM4_UP_DMA_PRIORITY 2
+
+#define STM32_PWM5_UP_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_PWM5_UP_DMA_CHANNEL 6
+#define STM32_PWM5_UP_DMA_IRQ_PRIORITY 6
+#define STM32_PWM5_UP_DMA_PRIORITY 2
+
+/*
+ * SERIAL driver system settings.
+ */
+#if USE_UART1
+#define STM32_SERIAL_USE_USART1 TRUE
+#else
+#define STM32_SERIAL_USE_USART1 FALSE
+#endif
+#if USE_UART2
+#define STM32_SERIAL_USE_USART2 TRUE
+#else
+#define STM32_SERIAL_USE_USART2 FALSE
+#endif
+#if USE_UART3
+#define STM32_SERIAL_USE_USART3 TRUE
+#else
+#define STM32_SERIAL_USE_USART3 FALSE
+#endif
+#if USE_UART4
+#define STM32_SERIAL_USE_UART4 TRUE
+#else
+#define STM32_SERIAL_USE_UART4 FALSE
+#endif
+#if USE_UART5
+#define STM32_SERIAL_USE_UART5 TRUE
+#else
+#define STM32_SERIAL_USE_UART5 FALSE
+#endif
+#if USE_UART6
+#define STM32_SERIAL_USE_USART6 TRUE
+#else
+#define STM32_SERIAL_USE_USART6 FALSE
+#endif
+#if USE_UART7
+#define STM32_SERIAL_USE_UART7 TRUE
+#else
+#define STM32_SERIAL_USE_UART7 FALSE
+#endif
+#if USE_UART8
+#define STM32_SERIAL_USE_UART8 TRUE
+#else
+#define STM32_SERIAL_USE_UART8 FALSE
+#endif
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+#define STM32_SERIAL_USART6_PRIORITY 12
+#define STM32_SERIAL_UART7_PRIORITY 12
+#define STM32_SERIAL_UART8_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#if USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
+#else
+#define STM32_SPI_USE_SPI2 FALSE
+#endif
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_USE_SPI4 TRUE
+#define STM32_SPI_USE_SPI5 FALSE
+#define STM32_SPI_USE_SPI6 FALSE
+//#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+//#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+//#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+//#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_SPI_SPI4_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#define STM32_SPI_SPI4_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+//#define STM32_SPI_SPI5_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+//#define STM32_SPI_SPI5_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+//#define STM32_SPI_SPI6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 6)
+//#define STM32_SPI_SPI6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI4_DMA_PRIORITY 1
+#define STM32_SPI_SPI5_DMA_PRIORITY 1
+#define STM32_SPI_SPI6_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_SPI4_IRQ_PRIORITY 10
+#define STM32_SPI_SPI5_IRQ_PRIORITY 10
+#define STM32_SPI_SPI6_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE /* DMA OK */
+#define STM32_UART_USE_USART2 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USE_USART3 FALSE /* DMA OK */
+#define STM32_UART_USE_UART4 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USE_UART5 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USE_USART6 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USE_UART7 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USE_UART8 FALSE /* NO DMA AVAIL */
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+/* #define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) */
+/* #define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6) */
+#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+/* #define STM32_UART_UART4_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) */
+/* #define STM32_UART_UART4_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) */
+/* #define STM32_UART_UART5_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0) */
+/* #define STM32_UART_UART5_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7) */
+/* #define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2) */
+/* #define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7) */
+/* #define STM32_UART_UART7_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) */
+/* #define STM32_UART_UART7_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1) */
+/* #define STM32_UART_UART8_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6) */
+/* #define STM32_UART_UART8_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0) */
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_UART4_IRQ_PRIORITY 12
+#define STM32_UART_UART5_IRQ_PRIORITY 12
+#define STM32_UART_USART6_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_UART4_DMA_PRIORITY 0
+#define STM32_UART_UART5_DMA_PRIORITY 0
+#define STM32_UART_USART6_DMA_PRIORITY 0
+#define STM32_UART_UART7_DMA_PRIORITY 0
+#define STM32_UART_UART8_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_OTG1 TRUE
+#define STM32_USB_USE_OTG2 FALSE
+#define STM32_USB_OTG1_IRQ_PRIORITY 14
+#define STM32_USB_OTG2_IRQ_PRIORITY 14
+#define STM32_USB_OTG1_RX_FIFO_SIZE 512
+#define STM32_USB_OTG2_RX_FIFO_SIZE 1024
+#define STM32_USB_OTG_THREAD_PRIO LOWPRIO
+#define STM32_USB_OTG_THREAD_STACK_SIZE 128
+#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
+
+/*
+ * SDC driver system settings.
+ */
+#define STM32_SDC_USE_SDMMC1 FALSE
+#define STM32_SDC_SDMMC_UNALIGNED_SUPPORT TRUE
+#define STM32_SDC_SDMMC_WRITE_TIMEOUT 250
+#define STM32_SDC_SDMMC_READ_TIMEOUT 25
+#define STM32_SDC_SDMMC_CLOCK_DELAY 10
+#define STM32_SDC_SDMMC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 6)
+#define STM32_SDC_SDMMC1_DMA_PRIORITY 3
+#define STM32_SDC_SDMMC1_IRQ_PRIORITY 9
+
+/*
+ sdlog message buffer and queue configuration
+ */
+#define SDLOG_QUEUE_BUCKETS 1024
+#define SDLOG_MAX_MESSAGE_LEN 300
+#define SDLOG_NUM_FILES 2
+#define SDLOG_ALL_BUFFERS_SIZE (SDLOG_NUM_FILES*16*1024)
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+
+//#define CH_HEAP_SIZE (32*1024)
+//#define CH_HEAP_USE_TLSF 1 // if 0 or undef, chAlloc will be used
+
+
+
+#endif /* _MCUCONF_H_ */
diff --git a/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.cfg b/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.cfg
new file mode 100644
index 0000000000..7812658998
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.cfg
@@ -0,0 +1,136 @@
+MCU_MODEL = STM32F767ZITx
+CHIBIOS_VERSION = 3.0
+
+HEADER
+/*
+ * Board identifier.
+ */
+#define BOARD_NUCLEO144_F767ZI
+#define BOARD_NAME "Nucleo144_f767zi Autopilot"
+
+/*
+ * Board oscillators-related settings.
+ */
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 32768U
+#endif
+
+#define STM32_HSE_BYPASS
+#define STM32_LSEDRV (3U << 3U)
+
+/*
+ * Board voltages.
+ * Required for performance limits calculation.
+ */
+#define STM32_VDD 300U
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F777xx
+
+CONFIG
+
+
+# PIN NAME PERIPH_TYPE AF_NUMBER or
+# PIN NAME FUNCTION PP_or_OPENDRAIN PIN_SPEED PULL_RESISTOR INITIAL_LEVEL AF_NUMBER
+# SPEED : SPEED_VERYLOW, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH
+#
+# DEFAULT AND SYS
+#
+# 'SYS' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'ADC' => ['ANALOG', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_LOW'],
+# 'PWM' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_LOW'],
+# 'ICU' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'I2C' => ['ALTERNATE', 'OPENDRAIN', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
+# 'SPI' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'UART' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
+# 'OTG' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'ETH' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'FSMC' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'SDIO' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
+# 'SDIOCK' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'CAN' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'DCMI' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
+# 'LED' => ['OUTPUT', 'PUSHPULL', 'SPEED_VERYLOW', 'FLOATING', 'LEVEL_LOW'],
+# 'PASSIVE' => ['INPUT', 'PUSHPULL', 'SPEED_VERYLOW', 'FLOATING', 'LEVEL_LOW']);
+#
+# SYSTEM
+A13 SWDIO SYS AF:SYS_JTMS-SWDIO
+A14 SWCLK SYS AF:SYS_JTCK-SWCLK
+C14 OSC32_IN SYS AF0
+C15 OSC32_OUT SYS AF0
+H00 OSC_IN SYS AF0
+H01 OSC_OUT SYS AF0
+
+#DEFAULT
+DEFAULT INPUT PUSHPULL SPEED_VERYLOW PULLDOWN LEVEL_LOW AF0
+
+# ACTIVE PINS
+
+PA00 AUX_A1 PASSIVE (ADC1_IN0, AF:TIM5_CH1, AF:UART4_TX, AF:USART2_CTS)
+PA01 AUX_A2 PASSIVE (ADC1_IN1, AF:TIM5_CH2, AF:UART4_RX, AF:USART2_RTS)
+PA02 AUX_A3 PASSIVE (ADC1_IN2, AF:TIM5_CH3) #AF:TIM9_CH1
+PA03 AUX_A4 PASSIVE (ADC1_IN3, AF:TIM5_CH4) #AF:TIM9_CH2
+PA06 AUX_B1 PASSIVE (ADC1_IN6, AF:TIM3_CH1) #AF:TIM13_CH1
+PA07 AUX_B2 PASSIVE (ADC1_IN7, AF:TIM3_CH2) #AF:TIM14_CH1
+PA09 USB_VBUS INPUT PULLDOWN
+#PA10 LED2 LED # original Tawaki LED2
+PA11 OTG_FS_DM OTG AF:USB_OTG_FS_DM
+PA12 OTG_FS_DP OTG AF:USB_OTG_FS_DP
+PA15 UART7_TX UART AF:UART7_TX
+
+#PB00 AUX_B3 PASSIVE (ADC1_IN8, AF:TIM3_CH3) # original Tawaki AUX_B3
+PB00 LED1 LED
+PB01 AUX_B4 PASSIVE (ADC1_IN9, AF:TIM3_CH4)
+PB03 UART7_RX UART AF:UART7_RX
+PB05 DSHOT_RX UART AF:UART5_RX
+PB06 SRVB1 PWM AF:TIM4_CH1 ()
+#PB07 SRVB2 PWM AF:TIM4_CH2 () # original Tawaki SRVB2
+PB07 LED2 LED
+PB08 SRVB3 PWM AF:TIM4_CH3 ()
+PB09 SRVB4 PWM AF:TIM4_CH4 ()
+PB10 I2C2_SCL_EXTERNAL I2C AF:I2C2_SCL
+PB11 I2C2_SDA_EXTERNAL I2C AF:I2C2_SDA
+PB12 SPI2_EXTERNAL_CS OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH
+PB14 LED3 LED
+PB15 SPI2_EXTERNAL_MOSI SPI AF:SPI2_MOSI
+
+PC00 VBAT_MEAS ADC ADC1_IN10 ()
+PC02 SPI2_EXTERNAL_MISO SPI AF:SPI2_MISO
+PC06 RC2 PASSIVE (AF:TIM8_CH1, AF:USART6_TX) #TLMF_TX6 UART AF:USART6_TX
+#PC07 LED3 LED # original Tawaki LED3
+PC08 SDMMC1_D0 SDIO AF:SDMMC1_D0
+PC09 SDMMC1_D1 SDIO AF:SDMMC1_D1
+PC10 SDMMC1_D2 SDIO AF:SDMMC1_D2
+PC11 SDMMC1_D3 SDIO AF:SDMMC1_D3
+PC12 SDMMC1_CK SDIO AF:SDMMC1_CK
+PC13 USER_BUTTON INPUT PULLDOWN
+
+PD00 CAN_RX CAN AF:CAN1_RX
+PD01 CAN_TX CAN AF:CAN1_TX
+PD02 SDMMC1_CMD SDIO AF:SDMMC1_CMD
+PD03 SPI2_EXTERNAL_CLK SPI AF:SPI2_SCK
+PD05 UART2_TX UART AF:USART2_TX
+PD06 UART2_RX UART AF:USART2_RX
+PD08 UART3_TX UART AF:USART3_TX
+PD09 UART3_RX UART AF:USART3_RX
+#PD10 LED4 LED # original Tawaki LED4
+PD12 I2C4_SCL_EXTERNAL I2C AF:I2C4_SCL
+PD13 I2C4_SDA_EXTERNAL I2C AF:I2C4_SDA
+#PD15 LED1 LED # original Tawaki LED1
+
+PE00 RC1 UART AF:UART8_RX ()
+PE02 SPI4_INTERNAL_CLK SPI AF:SPI4_SCK
+PE04 SPI4_INTERNAL_CS OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH
+PE05 SPI4_INTERNAL_MISO SPI AF:SPI4_MISO
+PE06 SPI4_INTERNAL_MOSI SPI AF:SPI4_MOSI
+PE09 SRVA1 PWM AF:TIM1_CH1 ()
+PE11 SRVA2 PWM AF:TIM1_CH2 ()
+PE13 SRVA3 PWM AF:TIM1_CH3 ()
+PE14 SRVA4 PWM AF:TIM1_CH4 ()
+
diff --git a/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.h b/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.h
new file mode 100644
index 0000000000..593c488017
--- /dev/null
+++ b/sw/airborne/boards/nucleo/144_f767zi/nucleo144_f767zi.h
@@ -0,0 +1,834 @@
+#ifndef CONFIG_NUCLEO144_F767ZI_1_00_H
+#define CONFIG_NUCLEO144_F767ZI_1_00_H
+
+#define BOARD_NUCLEO144_F767ZI
+
+/**
+ * based on Tawaki project
+ */
+
+/**
+ * ChibiOS board file
+ */
+#include "boards/nucleo/144_f767zi/board.h"
+
+/**
+ * PPRZ definitions
+ */
+
+/*
+ * AHB_CLK
+ */
+#define AHB_CLK STM32_HCLK
+
+/*
+ * Concat macro
+ */
+#define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
+#define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
+
+/*
+ * LEDs
+ */
+/* green, on PB0, 1 on LED_ON, 0 on LED_OFF */
+#ifndef USE_LED_1
+#define USE_LED_1 1
+#endif
+#define LED_1_GPIO PAL_PORT(LINE_LED1)
+#define LED_1_GPIO_PIN PAL_PAD(LINE_LED1)
+#define LED_1_GPIO_ON gpio_set
+#define LED_1_GPIO_OFF gpio_clear
+
+/* blue, on PB7, 1 on LED_ON, 0 on LED_OFF */
+#ifndef USE_LED_2
+#define USE_LED_2 1
+#endif
+#define LED_2_GPIO PAL_PORT(LINE_LED2)
+#define LED_2_GPIO_PIN PAL_PAD(LINE_LED2)
+#define LED_2_GPIO_ON gpio_set
+#define LED_2_GPIO_OFF gpio_clear
+
+/* red, on PB14, 1 on LED_ON, 0 on LED_OFF (disabled by default as shared with SPI2) */
+#ifndef USE_LED_3
+#define USE_LED_3 0
+#endif
+#define LED_3_GPIO PAL_PORT(LINE_LED3)
+#define LED_3_GPIO_PIN PAL_PAD(LINE_LED3)
+#define LED_3_GPIO_ON gpio_set
+#define LED_3_GPIO_OFF gpio_clear
+
+/*
+ * ADCs
+ */
+// AUXa1
+#if USE_ADC_1
+#define AD1_1_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_A1_ADC_IN)
+#define ADC_1 AD1_1
+#define ADC_1_GPIO_PORT PAL_PORT(LINE_AUX_A1)
+#define ADC_1_GPIO_PIN PAL_PAD(LINE_AUX_A1)
+#endif
+
+// AUXa2
+#if USE_ADC_2
+#define AD1_2_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_A2_ADC_IN)
+#define ADC_2 AD1_2
+#define ADC_2_GPIO_PORT PAL_PORT(LINE_AUX_A2)
+#define ADC_2_GPIO_PIN PAL_PAD(LINE_AUX_A2)
+#endif
+
+// AUXa3
+#if USE_ADC_3
+#define AD1_3_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_A3_ADC_IN)
+#define ADC_3 AD1_3
+#define ADC_3_GPIO_PORT PAL_PORT(LINE_AUX_A3)
+#define ADC_3_GPIO_PIN PAL_PAD(LINE_AUX_A3)
+#endif
+
+// AUXa4
+#if USE_ADC_4
+#define AD1_4_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_A4_ADC_IN)
+#define ADC_4 AD1_4
+#define ADC_4_GPIO_PORT PAL_PORT(LINE_AUX_A4)
+#define ADC_4_GPIO_PIN PAL_PAD(LINE_AUX_A4)
+#endif
+
+// AUXb1
+#if USE_ADC_5
+#define AD1_5_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_B1_ADC_IN)
+#define ADC_5 AD1_5
+#define ADC_5_GPIO_PORT PAL_PORT(LINE_AUX_B1)
+#define ADC_5_GPIO_PIN PAL_PAD(LINE_AUX_B1)
+#endif
+
+// AUXb2
+#if USE_ADC_6
+#define AD1_6_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_B2_ADC_IN)
+#define ADC_6 AD1_6
+#define ADC_6_GPIO_PORT PAL_PORT(LINE_AUX_B2)
+#define ADC_6_GPIO_PIN PAL_PAD(LINE_AUX_B2)
+#endif
+
+// AUXb3
+//#if USE_ADC_7
+//#define AD1_7_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_B3_ADC_IN)
+//#define ADC_7 AD1_7
+//#define ADC_7_GPIO_PORT PAL_PORT(LINE_AUX_B3)
+//#define ADC_7_GPIO_PIN PAL_PAD(LINE_AUX_B3)
+//#endif
+
+// AUXb4
+#if USE_ADC_8
+#define AD1_8_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, AUX_B4_ADC_IN)
+#define ADC_8 AD1_8
+#define ADC_8_GPIO_PORT PAL_PORT(LINE_AUX_B4)
+#define ADC_8_GPIO_PIN PAL_PAD(LINE_AUX_B4)
+#endif
+
+// Internal ADC for battery enabled by default
+#ifndef USE_ADC_9
+#define USE_ADC_9 1
+#endif
+#if USE_ADC_9
+#define AD1_9_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, VBAT_MEAS_ADC_IN)
+#define ADC_9 AD1_9
+#define ADC_9_GPIO_PORT PAL_PORT(LINE_VBAT_MEAS)
+#define ADC_9_GPIO_PIN PAL_PAD(LINE_VBAT_MEAS)
+#endif
+
+/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
+#ifndef ADC_CHANNEL_VSUPPLY
+#define ADC_CHANNEL_VSUPPLY ADC_9
+#endif
+
+/*
+ * R1 = 2.2k
+ * R2 = 12k
+ * adc * (3.3 / 2^12) * ((R1 + R2) / R1)
+ */
+#define VBAT_R1 2200.0f
+#define VBAT_R2 12000.0f
+#define DefaultVoltageOfAdc(adc) ((3.3f/4096.0f)*((VBAT_R1+VBAT_R2)/VBAT_R1)*adc)
+
+/*
+ * PWM defines
+ */
+
+// SRVa connectors, activated in PWM mode by default
+
+#ifndef USE_PWM1
+#define USE_PWM1 1
+#endif
+#if USE_PWM1
+#define PWM_SERVO_1 1
+#define PWM_SERVO_1_GPIO PAL_PORT(LINE_SRVA1)
+#define PWM_SERVO_1_PIN PAL_PAD(LINE_SRVA1)
+#define PWM_SERVO_1_AF AF_SRVA1
+#define PWM_SERVO_1_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVA1_TIM)
+#define PWM_SERVO_1_CHANNEL SRVA1_TIM_CH
+#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM2
+#define USE_PWM2 1
+#endif
+#if USE_PWM2
+#define PWM_SERVO_2 2
+#define PWM_SERVO_2_GPIO PAL_PORT(LINE_SRVA2)
+#define PWM_SERVO_2_PIN PAL_PAD(LINE_SRVA2)
+#define PWM_SERVO_2_AF AF_SRVA2
+#define PWM_SERVO_2_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVA2_TIM)
+#define PWM_SERVO_2_CHANNEL SRVA2_TIM_CH
+#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM3
+#define USE_PWM3 1
+#endif
+#if USE_PWM3
+#define PWM_SERVO_3 3
+#define PWM_SERVO_3_GPIO PAL_PORT(LINE_SRVA3)
+#define PWM_SERVO_3_PIN PAL_PAD(LINE_SRVA3)
+#define PWM_SERVO_3_AF AF_SRVA3
+#define PWM_SERVO_3_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVA3_TIM)
+#define PWM_SERVO_3_CHANNEL SRVA3_TIM_CH
+#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM4
+#define USE_PWM4 1
+#endif
+#if USE_PWM4
+#define PWM_SERVO_4 4
+#define PWM_SERVO_4_GPIO PAL_PORT(LINE_SRVA4)
+#define PWM_SERVO_4_PIN PAL_PAD(LINE_SRVA4)
+#define PWM_SERVO_4_AF AF_SRVA4
+#define PWM_SERVO_4_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVA4_TIM)
+#define PWM_SERVO_4_CHANNEL SRVA4_TIM_CH
+#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+// SRVb connector, PWM mode disabled by default (DShot is enabled by default)
+
+#ifndef USE_PWM5
+#define USE_PWM5 0
+#endif
+#if USE_PWM5
+#define PWM_SERVO_5 5
+#define PWM_SERVO_5_GPIO PAL_PORT(LINE_SRVB1)
+#define PWM_SERVO_5_PIN PAL_PAD(LINE_SRVB1)
+#define PWM_SERVO_5_AF AF_SRVB1
+#define PWM_SERVO_5_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVB1_TIM)
+#define PWM_SERVO_5_CHANNEL SRVB1_TIM_CH
+#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM6
+#define USE_PWM6 0
+#endif
+#if USE_PWM6
+#define PWM_SERVO_6 6
+#define PWM_SERVO_6_GPIO PAL_PORT(LINE_SRVB2)
+#define PWM_SERVO_6_PIN PAL_PAD(LINE_SRVB2)
+#define PWM_SERVO_6_AF AF_SRVB2
+#define PWM_SERVO_6_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVB2_TIM)
+#define PWM_SERVO_6_CHANNEL SRVB2_TIM_CH
+#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM7
+#define USE_PWM7 0
+#endif
+#if USE_PWM7
+#define PWM_SERVO_7 7
+#define PWM_SERVO_7_GPIO PAL_PORT(LINE_SRVB3)
+#define PWM_SERVO_7_PIN PAL_PAD(LINE_SRVB3)
+#define PWM_SERVO_7_AF AF_SRVB3
+#define PWM_SERVO_7_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVB3_TIM)
+#define PWM_SERVO_7_CHANNEL SRVB3_TIM_CH
+#define PWM_SERVO_7_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_7_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM8
+#define USE_PWM8 0
+#endif
+#if USE_PWM8
+#define PWM_SERVO_8 8
+#define PWM_SERVO_8_GPIO PAL_PORT(LINE_SRVB4)
+#define PWM_SERVO_8_PIN PAL_PAD(LINE_SRVB4)
+#define PWM_SERVO_8_AF AF_SRVB4
+#define PWM_SERVO_8_DRIVER CONCAT_BOARD_PARAM(PWMD, SRVB4_TIM)
+#define PWM_SERVO_8_CHANNEL SRVB4_TIM_CH
+#define PWM_SERVO_8_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_8_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM9
+#define USE_PWM9 0
+#endif
+#if USE_PWM9
+#define PWM_SERVO_9 9
+#define PWM_SERVO_9_GPIO PAL_PORT(LINE_AUX_A1)
+#define PWM_SERVO_9_PIN PAL_PAD(LINE_AUX_A1)
+#define PWM_SERVO_9_AF GPIO_AF2
+#define PWM_SERVO_9_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_A1_TIM)
+#define PWM_SERVO_9_CHANNEL AUX_A1_TIM_CH
+#define PWM_SERVO_9_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_9_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM10
+#define USE_PWM10 0
+#endif
+#if USE_PWM10
+#define PWM_SERVO_10 10
+#define PWM_SERVO_10_GPIO PAL_PORT(LINE_AUX_A2)
+#define PWM_SERVO_10_PIN PAL_PAD(LINE_AUX_A2)
+#define PWM_SERVO_10_AF GPIO_AF2
+#define PWM_SERVO_10_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_A2_TIM)
+#define PWM_SERVO_10_CHANNEL AUX_A2_TIM_CH
+#define PWM_SERVO_10_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_10_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM11
+#define USE_PWM11 0
+#endif
+#if USE_PWM11
+#define PWM_SERVO_11 11
+#define PWM_SERVO_11_GPIO PAL_PORT(LINE_AUX_A3)
+#define PWM_SERVO_11_PIN PAL_PAD(LINE_AUX_A3)
+#define PWM_SERVO_11_AF GPIO_AF2
+#define PWM_SERVO_11_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_A3_TIM)
+#define PWM_SERVO_11_CHANNEL AUX_A3_TIM_CH
+#define PWM_SERVO_11_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_11_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM12
+#define USE_PWM12 0
+#endif
+#if USE_PWM12
+#define PWM_SERVO_12 12
+#define PWM_SERVO_12_GPIO PAL_PORT(LINE_AUX_A4)
+#define PWM_SERVO_12_PIN PAL_PAD(LINE_AUX_A4)
+#define PWM_SERVO_12_AF GPIO_AF2
+#define PWM_SERVO_12_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_A4_TIM)
+#define PWM_SERVO_12_CHANNEL AUX_A4_TIM_CH
+#define PWM_SERVO_12_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_12_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM13
+#define USE_PWM13 0
+#endif
+#if USE_PWM13
+#define PWM_SERVO_13 13
+#define PWM_SERVO_13_GPIO PAL_PORT(LINE_AUX_B1)
+#define PWM_SERVO_13_PIN PAL_PAD(LINE_AUX_B1)
+#define PWM_SERVO_13_AF GPIO_AF2
+#define PWM_SERVO_13_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_B1_TIM)
+#define PWM_SERVO_13_CHANNEL AUX_B1_TIM_CH
+#define PWM_SERVO_13_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_13_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+#ifndef USE_PWM14
+#define USE_PWM14 0
+#endif
+#if USE_PWM14
+#define PWM_SERVO_14 14
+#define PWM_SERVO_14_GPIO PAL_PORT(LINE_AUX_B2)
+#define PWM_SERVO_14_PIN PAL_PAD(LINE_AUX_B2)
+#define PWM_SERVO_14_AF GPIO_AF2
+#define PWM_SERVO_14_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_B2_TIM)
+#define PWM_SERVO_14_CHANNEL AUX_B2_TIM_CH
+#define PWM_SERVO_14_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_14_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+//#ifndef USE_PWM15
+//#define USE_PWM15 0
+//#endif
+//#if USE_PWM15
+//#define PWM_SERVO_15 15
+//#define PWM_SERVO_15_GPIO PAL_PORT(LINE_AUX_B3)
+//#define PWM_SERVO_15_PIN PAL_PAD(LINE_AUX_B3)
+//#define PWM_SERVO_15_AF GPIO_AF2
+//#define PWM_SERVO_15_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_B3_TIM)
+//#define PWM_SERVO_15_CHANNEL AUX_B3_TIM_CH
+//#define PWM_SERVO_15_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+//#else
+//#define PWM_SERVO_15_ACTIVE PWM_OUTPUT_DISABLED
+//#endif
+
+#ifndef USE_PWM16
+#define USE_PWM16 0
+#endif
+#if USE_PWM16
+#define PWM_SERVO_16 16
+#define PWM_SERVO_16_GPIO PAL_PORT(LINE_AUX_B4)
+#define PWM_SERVO_16_PIN PAL_PAD(LINE_AUX_B4)
+#define PWM_SERVO_16_AF GPIO_AF2
+#define PWM_SERVO_16_DRIVER CONCAT_BOARD_PARAM(PWMD, AUX_B4_TIM)
+#define PWM_SERVO_16_CHANNEL AUX_B4_TIM_CH
+#define PWM_SERVO_16_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
+#else
+#define PWM_SERVO_16_ACTIVE PWM_OUTPUT_DISABLED
+#endif
+
+// servo index starting at 1 + regular servos + aux servos
+// so NB = 1+8+8
+#define ACTUATORS_PWM_NB 17
+
+
+#ifdef STM32_PWM_USE_TIM1
+#define PWM_CONF_TIM1 STM32_PWM_USE_TIM1
+#else
+#define PWM_CONF_TIM1 1
+#endif
+#define PWM_CONF1_DEF { \
+ PWM_FREQUENCY, \
+ PWM_FREQUENCY/TIM1_SERVO_HZ, \
+ NULL, \
+ { \
+ { PWM_SERVO_1_ACTIVE, NULL }, \
+ { PWM_SERVO_2_ACTIVE, NULL }, \
+ { PWM_SERVO_3_ACTIVE, NULL }, \
+ { PWM_SERVO_4_ACTIVE, NULL }, \
+ }, \
+ 0, \
+ 0 \
+}
+
+#ifdef STM32_PWM_USE_TIM3
+#define PWM_CONF_TIM3 STM32_PWM_USE_TIM3
+#else
+#define PWM_CONF_TIM3 1
+#endif
+#define PWM_CONF3_DEF { \
+ PWM_FREQUENCY, \
+ PWM_FREQUENCY/TIM3_SERVO_HZ, \
+ NULL, \
+ { \
+ { PWM_SERVO_12_ACTIVE, NULL }, \
+ { PWM_SERVO_14_ACTIVE, NULL }, \
+ { PWM_SERVO_15_ACTIVE, NULL }, \
+ { PWM_SERVO_16_ACTIVE, NULL }, \
+ }, \
+ 0, \
+ 0 \
+}
+
+#ifdef STM32_PWM_USE_TIM4
+#define PWM_CONF_TIM4 STM32_PWM_USE_TIM4
+#else
+#define PWM_CONF_TIM4 1
+#endif
+#define PWM_CONF4_DEF { \
+ PWM_FREQUENCY, \
+ PWM_FREQUENCY/TIM4_SERVO_HZ, \
+ NULL, \
+ { \
+ { PWM_SERVO_5_ACTIVE, NULL }, \
+ { PWM_SERVO_6_ACTIVE, NULL }, \
+ { PWM_SERVO_7_ACTIVE, NULL }, \
+ { PWM_SERVO_8_ACTIVE, NULL }, \
+ }, \
+ 0, \
+ 0 \
+}
+
+#ifdef STM32_PWM_USE_TIM5
+#define PWM_CONF_TIM5 STM32_PWM_USE_TIM5
+#else
+#define PWM_CONF_TIM5 1
+#endif
+#define PWM_CONF5_DEF { \
+ PWM_FREQUENCY, \
+ PWM_FREQUENCY/TIM5_SERVO_HZ, \
+ NULL, \
+ { \
+ { PWM_SERVO_9_ACTIVE, NULL }, \
+ { PWM_SERVO_10_ACTIVE, NULL }, \
+ { PWM_SERVO_11_ACTIVE, NULL }, \
+ { PWM_SERVO_13_ACTIVE, NULL }, \
+ }, \
+ 0, \
+ 0 \
+}
+
+/**
+ * DSHOT
+ */
+#ifndef DSHOT_TELEMETRY_DEV
+#define DSHOT_TELEMETRY_DEV NULL
+#endif
+
+#ifndef USE_DSHOT_TIM4
+#define USE_DSHOT_TIM4 1 // use SRVb for DShot by default
+#endif
+
+#if USE_DSHOT_TIM4 // Servo B1, B2, B3, B4 on TIM4
+
+// Servo B1, B2, B3, B4 on TM4 are primary DSHOT connector
+#define DSHOT_SERVO_1 1
+#define DSHOT_SERVO_1_GPIO PAL_PORT(LINE_SRVB1)
+#define DSHOT_SERVO_1_PIN PAL_PAD(LINE_SRVB1)
+#define DSHOT_SERVO_1_AF AF_SRVB1
+#define DSHOT_SERVO_1_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVB1_TIM)
+#define DSHOT_SERVO_1_CHANNEL SRVB1_TIM_CH
+
+#define DSHOT_SERVO_2 2
+#define DSHOT_SERVO_2_GPIO PAL_PORT(LINE_SRVB2)
+#define DSHOT_SERVO_2_PIN PAL_PAD(LINE_SRVB2)
+#define DSHOT_SERVO_2_AF AF_SRVB2
+#define DSHOT_SERVO_2_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVB2_TIM)
+#define DSHOT_SERVO_2_CHANNEL SRVB2_TIM_CH
+
+#define DSHOT_SERVO_3 3
+#define DSHOT_SERVO_3_GPIO PAL_PORT(LINE_SRVB3)
+#define DSHOT_SERVO_3_PIN PAL_PAD(LINE_SRVB3)
+#define DSHOT_SERVO_3_AF AF_SRVB3
+#define DSHOT_SERVO_3_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVB3_TIM)
+#define DSHOT_SERVO_3_CHANNEL SRVB3_TIM_CH
+
+#define DSHOT_SERVO_4 4
+#define DSHOT_SERVO_4_GPIO PAL_PORT(LINE_SRVB4)
+#define DSHOT_SERVO_4_PIN PAL_PAD(LINE_SRVB4)
+#define DSHOT_SERVO_4_AF AF_SRVB4
+#define DSHOT_SERVO_4_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVB4_TIM)
+#define DSHOT_SERVO_4_CHANNEL SRVB4_TIM_CH
+
+#define DSHOT_CONF_TIM4 1
+#define DSHOT_CONF4_DEF { \
+ .dma_stream = STM32_PWM4_UP_DMA_STREAM, \
+ .dma_channel = STM32_PWM4_UP_DMA_CHANNEL, \
+ .pwmp = &PWMD4, \
+ .tlm_sd = DSHOT_TELEMETRY_DEV \
+}
+
+#endif
+
+#if USE_DSHOT_TIM1 // Servo A1, A2, A3, A4 on TIM1 only activated if needed
+
+#define DSHOT_SERVO_5 5
+#define DSHOT_SERVO_5_GPIO PAL_PORT(LINE_SRVA1)
+#define DSHOT_SERVO_5_PIN PAL_PAD(LINE_SRVA1)
+#define DSHOT_SERVO_5_AF AF_SRVA1
+#define DSHOT_SERVO_5_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVA1_TIM)
+#define DSHOT_SERVO_5_CHANNEL SRVA1_TIM_CH
+
+#define DSHOT_SERVO_6 6
+#define DSHOT_SERVO_6_GPIO PAL_PORT(LINE_SRVA2)
+#define DSHOT_SERVO_6_PIN PAL_PAD(LINE_SRVA2)
+#define DSHOT_SERVO_6_AF AF_SRVA2
+#define DSHOT_SERVO_6_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVA2_TIM)
+#define DSHOT_SERVO_6_CHANNEL SRVA2_TIM_CH
+
+#define DSHOT_SERVO_7 7
+#define DSHOT_SERVO_7_GPIO PAL_PORT(LINE_SRVA3)
+#define DSHOT_SERVO_7_PIN PAL_PAD(LINE_SRVA3)
+#define DSHOT_SERVO_7_AF AF_SRVA3
+#define DSHOT_SERVO_7_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVA3_TIM)
+#define DSHOT_SERVO_7_CHANNEL SRVA3_TIM_CH
+
+#define DSHOT_SERVO_8 8
+#define DSHOT_SERVO_8_GPIO PAL_PORT(LINE_SRVA4)
+#define DSHOT_SERVO_8_PIN PAL_PAD(LINE_SRVA4)
+#define DSHOT_SERVO_8_AF AF_SRVA4
+#define DSHOT_SERVO_8_DRIVER CONCAT_BOARD_PARAM(DSHOTD, SRVA4_TIM)
+#define DSHOT_SERVO_8_CHANNEL SRVA4_TIM_CH
+
+#define DSHOT_CONF_TIM1 1
+#define DSHOT_CONF1_DEF { \
+ .dma_stream = STM32_PWM1_UP_DMA_STREAM, \
+ .dma_channel = STM32_PWM1_UP_DMA_CHANNEL, \
+ .pwmp = &PWMD1, \
+ .tlm_sd = DSHOT_TELEMETRY_DEV \
+}
+
+#endif
+
+/**
+ * UART2 (Modem with optional flow control on AUXa disabled by default)
+ */
+#define UART2_GPIO_PORT_TX PAL_PORT(LINE_UART2_TX)
+#define UART2_GPIO_TX PAL_PAD(LINE_UART2_TX)
+#define UART2_GPIO_PORT_RX PAL_PORT(LINE_UART2_RX)
+#define UART2_GPIO_RX PAL_PAD(LINE_UART2_RX)
+#define UART2_GPIO_AF AF_UART2_TX
+#ifndef UART2_HW_FLOW_CONTROL
+#define UART2_HW_FLOW_CONTROL FALSE
+#endif
+
+/**
+ * UART7 (GPS) and UART3 (Companion)
+ * are configured as UART from ChibiOS board file by default
+ */
+
+#define UART3_GPIO_PORT_TX PAL_PORT(LINE_UART3_TX)
+#define UART3_GPIO_TX PAL_PAD(LINE_UART3_TX)
+#define UART3_GPIO_PORT_RX PAL_PORT(LINE_UART3_RX)
+#define UART3_GPIO_RX PAL_PAD(LINE_UART3_RX)
+#define UART3_GPIO_AF AF_UART3_TX
+
+#define UART7_GPIO_PORT_TX PAL_PORT(LINE_UART7_TX)
+#define UART7_GPIO_TX PAL_PAD(LINE_UART7_TX)
+#define UART7_GPIO_PORT_RX PAL_PORT(LINE_UART7_RX)
+#define UART7_GPIO_RX PAL_PAD(LINE_UART7_RX)
+#define UART7_GPIO_AF AF_UART7_TX
+
+/**
+ * UART4 on AUXa (not configured by default)
+ */
+
+#define UART4_GPIO_PORT_TX PAL_PORT(LINE_AUX_A1)
+#define UART4_GPIO_TX PAL_PAD(LINE_AUX_A1)
+#define UART4_GPIO_PORT_RX PAL_PORT(LINE_AUX_A2)
+#define UART4_GPIO_RX PAL_PAD(LINE_AUX_A2)
+#define UART4_GPIO_AF AUX_A1_UART_AF
+
+/**
+ * SBUS / Spektrum port
+ *
+ * Recommended config:
+ *
+ * primary SBUS port is UART8, a.k.a. RC1 on Nucleo144_f767zi board
+ * secondary port (in dual driver) is UART6, a.k.a. RC2 on Nucleo144_f767zi board
+ *
+ * primary Spektrum port is UART6, a.k.a. RC2 on Nucleo144_f767zi board
+ * secondary port is UART8, a.k.a. RC1 on Nucleo144_f767zi board
+ */
+
+// In case, do dynamic config of UARTs
+#define USE_UART8_RX TRUE
+#ifndef USE_UART8_TX // may be used in half duplex mode
+#define USE_UART8_TX FALSE
+#endif
+#define UART8_GPIO_PORT_RX PAL_PORT(LINE_RC1)
+#define UART8_GPIO_RX PAL_PAD(LINE_RC1)
+#define UART8_GPIO_AF RC1_UART_AF
+
+// FIXME when RC2 is used for FrSky telemetry
+#define USE_UART6_RX TRUE
+#define USE_UART6_TX FALSE
+#define UART6_GPIO_PORT_RX PAL_PORT(LINE_RC2)
+#define UART6_GPIO_RX PAL_PAD(LINE_RC2)
+#define UART6_GPIO_AF RC2_USART_AF
+
+/* The line that is pulled low at power up to initiate the bind process
+ * PB1: AUXb4
+ */
+#define SPEKTRUM_BIND_PIN PAL_PORT(LINE_AUX_B4)
+#define SPEKTRUM_BIND_PIN_PORT PAL_PAD(LINE_AUX_B4)
+
+// no wait with chibios as the RTC oscillator takes longer to stabilize
+#define SPEKTRUM_BIND_WAIT 30000
+
+/**
+ * PPM radio defines
+ *
+ * available on RC2
+ */
+#define RC_PPM_TICKS_PER_USEC 6
+#define PPM_TIMER_FREQUENCY 6000000
+#define PPM_CHANNEL CONCAT_BOARD_PARAM(ICU_CHANNEL_, RC2_TIM_CH)
+#define PPM_TIMER CONCAT_BOARD_PARAM(ICUD, RC2_TIM)
+
+/*
+ * PWM input
+ */
+// PWM_INPUT 1 on PA0 (AUXa1)
+#define PWM_INPUT1_ICU ICUD2
+#define PWM_INPUT1_CHANNEL ICU_CHANNEL_1
+#define PWM_INPUT1_GPIO_PORT PAL_PORT(LINE_AUX_A1)
+#define PWM_INPUT1_GPIO_PIN PAL_PAD(LINE_AUX_A1)
+#define PWM_INPUT1_GPIO_AF GPIO_AF1
+
+// PWM_INPUT 2 on PA1 (AUXa2)
+#define PWM_INPUT2_ICU ICUD5
+#define PWM_INPUT2_CHANNEL ICU_CHANNEL_2
+#define PWM_INPUT2_GPIO_PORT PAL_PORT(LINE_AUX_A2)
+#define PWM_INPUT2_GPIO_PIN PAL_PAD(LINE_AUX_A2)
+#define PWM_INPUT2_GPIO_AF GPIO_AF2
+
+/**
+ * I2C defines
+ */
+// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
+#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
+// Timing register
+#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
+ STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
+ STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
+#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
+ STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
+ STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
+
+
+// Internal I2C (baro, magneto)
+
+#ifndef I2C4_CLOCK_SPEED
+#define I2C4_CLOCK_SPEED 400000
+#endif
+
+#if I2C4_CLOCK_SPEED == 400000
+#define I2C4_CFG_DEF { \
+ .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
+ .cr1 = STM32_CR1_DNF(0), \
+ .cr2 = 0 \
+}
+#elif I2C4_CLOCK_SPEED == 100000
+#define I2C4_CFG_DEF { \
+ .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
+ .cr1 = STM32_CR1_DNF(0), \
+ .cr2 = 0 \
+}
+#else
+#error "Unknown I2C4 clock speed"
+#endif
+
+// External I2C
+
+#ifndef I2C2_CLOCK_SPEED
+#define I2C2_CLOCK_SPEED 400000
+#endif
+
+#if I2C2_CLOCK_SPEED == 400000
+#define I2C2_CFG_DEF { \
+ .timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
+ .cr1 = STM32_CR1_DNF(0), \
+ .cr2 = 0 \
+}
+#elif I2C2_CLOCK_SPEED == 100000
+#define I2C2_CFG_DEF { \
+ .timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
+ .cr1 = STM32_CR1_DNF(0), \
+ .cr2 = 0 \
+}
+#else
+#error "Unknown I2C2 clock speed"
+#endif
+
+/**
+ * SPI Config
+ */
+
+// Internal SPI (IMU)
+#define SPI4_GPIO_AF AF_SPI4_INTERNAL_CLK
+#define SPI4_GPIO_PORT_MISO PAL_PORT(LINE_SPI4_INTERNAL_MISO)
+#define SPI4_GPIO_MISO PAL_PAD(LINE_SPI4_INTERNAL_MISO)
+#define SPI4_GPIO_PORT_MOSI PAL_PORT(LINE_SPI4_INTERNAL_MOSI)
+#define SPI4_GPIO_MOSI PAL_PAD(LINE_SPI4_INTERNAL_MOSI)
+#define SPI4_GPIO_PORT_SCK PAL_PORT(LINE_SPI4_INTERNAL_CLK)
+#define SPI4_GPIO_SCK PAL_PAD(LINE_SPI4_INTERNAL_CLK)
+
+// External SPI
+#define SPI2_GPIO_AF AF_SPI2_EXTERNAL_CLK
+#define SPI2_GPIO_PORT_MISO PAL_PORT(LINE_SPI2_EXTERNAL_MISO)
+#define SPI2_GPIO_MISO PAL_PAD(LINE_SPI2_EXTERNAL_MISO)
+#define SPI2_GPIO_PORT_MOSI PAL_PORT(LINE_SPI2_EXTERNAL_MOSI)
+#define SPI2_GPIO_MOSI PAL_PAD(LINE_SPI2_EXTERNAL_MOSI)
+#define SPI2_GPIO_PORT_SCK PAL_PORT(LINE_SPI2_EXTERNAL_CLK)
+#define SPI2_GPIO_SCK PAL_PAD(LINE_SPI2_EXTERNAL_CLK)
+
+// SLAVE0 on SPI connector (NSS possible)
+#define SPI_SELECT_SLAVE0_PORT PAL_PORT(LINE_SPI2_EXTERNAL_CS)
+#define SPI_SELECT_SLAVE0_PIN PAL_PAD(LINE_SPI2_EXTERNAL_CS)
+// SLAVE1 on AUXb1
+#define SPI_SELECT_SLAVE1_PORT PAL_PORT(LINE_AUX_B1)
+#define SPI_SELECT_SLAVE1_PIN PAL_PAD(LINE_AUX_B1)
+// SLAVE2 on AUXb2
+#define SPI_SELECT_SLAVE2_PORT PAL_PORT(LINE_AUX_B2)
+#define SPI_SELECT_SLAVE2_PIN PAL_PAD(LINE_AUX_B2)
+// SLAVE3 on AUXb3
+//#define SPI_SELECT_SLAVE3_PORT PAL_PORT(LINE_AUX_B3)
+//#define SPI_SELECT_SLAVE3_PIN PAL_PAD(LINE_AUX_B3)
+// SLAVE4 on AUXb4
+#define SPI_SELECT_SLAVE4_PORT PAL_PORT(LINE_AUX_B4)
+#define SPI_SELECT_SLAVE4_PIN PAL_PAD(LINE_AUX_B4)
+// SLAVE5 on PE4 (internal IMU)
+#define SPI_SELECT_SLAVE5_PORT PAL_PORT(LINE_SPI4_INTERNAL_CS)
+#define SPI_SELECT_SLAVE5_PIN PAL_PAD(LINE_SPI4_INTERNAL_CS)
+
+/**
+ * Baro
+ *
+ * Apparently needed for backwards compatibility
+ * with the ancient onboard baro boards
+ */
+#ifndef USE_BARO_BOARD
+#define USE_BARO_BOARD 0
+#endif
+
+/**
+ * SDIO
+ */
+#define SDIO_D0_PORT PAL_PORT(LINE_SDMMC1_D0)
+#define SDIO_D0_PIN PAL_PAD(LINE_SDMMC1_D0)
+#define SDIO_D1_PORT PAL_PORT(LINE_SDMMC1_D1)
+#define SDIO_D1_PIN PAL_PAD(LINE_SDMMC1_D1)
+#define SDIO_D2_PORT PAL_PORT(LINE_SDMMC1_D2)
+#define SDIO_D2_PIN PAL_PAD(LINE_SDMMC1_D2)
+#define SDIO_D3_PORT PAL_PORT(LINE_SDMMC1_D3)
+#define SDIO_D3_PIN PAL_PAD(LINE_SDMMC1_D3)
+#define SDIO_CK_PORT PAL_PORT(LINE_SDMMC1_CK)
+#define SDIO_CK_PIN PAL_PAD(LINE_SDMMC1_CK)
+#define SDIO_CMD_PORT PAL_PORT(LINE_SDMMC1_CMD)
+#define SDIO_CMD_PIN PAL_PAD(LINE_SDMMC1_CMD)
+#define SDIO_AF AF_SDMMC1_CK
+// bat monitoring for file closing
+#define SDLOG_BAT_ADC CONCAT_BOARD_PARAM(ADCD, VBAT_MEAS_ADC)
+#define SDLOG_BAT_CHAN CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, VBAT_MEAS_ADC_IN)
+// usb led status
+#define SDLOG_USB_LED 4
+#define SDLOG_USB_VBUS_PORT PAL_PORT(LINE_USB_VBUS)
+#define SDLOG_USB_VBUS_PIN PAL_PAD(LINE_USB_VBUS)
+
+
+/*
+ * Actuators for fixedwing
+ */
+ /* Default actuators driver */
+#define DEFAULT_ACTUATORS "subsystems/actuators/actuators_pwm.h"
+#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
+#define ActuatorsDefaultInit() ActuatorsPwmInit()
+#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
+
+/**
+ * For WS2812
+ */
+#define WS2812D1_GPIO PAL_PORT(LINE_AUX_A1)
+#define WS2812D1_PIN PAL_PAD(LINE_AUX_A1)
+#define WS2812D1_AF 2
+#define WS2812D1_CFG_DEF { \
+ .dma_stream = STM32_PWM5_UP_DMA_STREAM, \
+ .dma_channel = STM32_PWM5_UP_DMA_CHANNEL, \
+ .dma_priority = STM32_PWM5_UP_DMA_PRIORITY, \
+ .pwm_channel = 0, \
+ .pwmp = &PWMD5 \
+}
+
+#endif /* CONFIG_NUCLEO144_F767ZI_1_00_H */
+