diff options
Diffstat (limited to 'os')
| -rw-r--r-- | os/common/startup/ARMCMx/devices/STM32F4xx/cmparams.h | 1 | ||||
| -rw-r--r-- | os/hal/boards/ST_NUCLEO64_F410RB/board.c | 132 | ||||
| -rw-r--r-- | os/hal/boards/ST_NUCLEO64_F410RB/board.h | 1350 | ||||
| -rw-r--r-- | os/hal/boards/ST_NUCLEO64_F410RB/board.mk | 5 | ||||
| -rw-r--r-- | os/hal/boards/ST_NUCLEO64_F410RB/cfg/board.chcfg | 1193 | ||||
| -rw-r--r-- | os/hal/ports/STM32/STM32F4xx/hal_lld.c | 5 | ||||
| -rw-r--r-- | os/hal/ports/STM32/STM32F4xx/hal_lld.h | 30 | ||||
| -rw-r--r-- | os/hal/ports/STM32/STM32F4xx/stm32_registry.h | 266 | 
8 files changed, 2979 insertions, 3 deletions
| diff --git a/os/common/startup/ARMCMx/devices/STM32F4xx/cmparams.h b/os/common/startup/ARMCMx/devices/STM32F4xx/cmparams.h index d3ac4c09e..a0b785af0 100644 --- a/os/common/startup/ARMCMx/devices/STM32F4xx/cmparams.h +++ b/os/common/startup/ARMCMx/devices/STM32F4xx/cmparams.h @@ -62,6 +62,7 @@      !defined(STM32F427xx) && !defined(STM32F437xx) &&                       \
      !defined(STM32F429xx) && !defined(STM32F439xx) &&                       \
      !defined(STM32F401xC) && !defined(STM32F401xE) &&                       \
 +    !defined(STM32F410Cx) && !defined(STM32F410Rx) &&                       \
      !defined(STM32F411xE) && !defined(STM32F446xx) &&                       \
      !defined(STM32F469xx) && !defined(STM32F479xx)
  #include "board.h"
 diff --git a/os/hal/boards/ST_NUCLEO64_F410RB/board.c b/os/hal/boards/ST_NUCLEO64_F410RB/board.c new file mode 100644 index 000000000..32206c195 --- /dev/null +++ b/os/hal/boards/ST_NUCLEO64_F410RB/board.c @@ -0,0 +1,132 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 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.
 +*/
 +
 +#include "hal.h"
 +
 +#if HAL_USE_PAL || defined(__DOXYGEN__)
 +/**
 + * @brief   PAL setup.
 + * @details Digital I/O ports static configuration as defined in @p board.h.
 + *          This variable is used by the HAL when initializing the PAL driver.
 + */
 +const PALConfig pal_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
 +};
 +#endif
 +
 +/**
 + * @brief   Early initialization code.
 + * @details This initialization must be performed just after stack setup
 + *          and before any other initialization.
 + */
 +void __early_init(void) {
 +
 +  stm32_clock_init();
 +}
 +
 +#if HAL_USE_SDC || defined(__DOXYGEN__)
 +/**
 + * @brief   SDC card detection.
 + */
 +bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
 +
 +  (void)sdcp;
 +  /* TODO: Fill the implementation.*/
 +  return true;
 +}
 +
 +/**
 + * @brief   SDC card write protection detection.
 + */
 +bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
 +
 +  (void)sdcp;
 +  /* TODO: Fill the implementation.*/
 +  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;
 +  /* TODO: Fill the implementation.*/
 +  return true;
 +}
 +
 +/**
 + * @brief   MMC_SPI card write protection detection.
 + */
 +bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
 +
 +  (void)mmcp;
 +  /* TODO: Fill the implementation.*/
 +  return false;
 +}
 +#endif
 +
 +/**
 + * @brief   Board-specific initialization code.
 + * @todo    Add your board-specific code, if any.
 + */
 +void boardInit(void) {
 +}
 diff --git a/os/hal/boards/ST_NUCLEO64_F410RB/board.h b/os/hal/boards/ST_NUCLEO64_F410RB/board.h new file mode 100644 index 000000000..4219a6255 --- /dev/null +++ b/os/hal/boards/ST_NUCLEO64_F410RB/board.h @@ -0,0 +1,1350 @@ +/*
 +    ChibiOS - Copyright (C) 2006..2016 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 _BOARD_H_
 +#define _BOARD_H_
 +
 +/*
 + * Setup for STMicroelectronics NUCLEO64-F410RB board.
 + */
 +
 +/*
 + * Board identifier.
 + */
 +#define BOARD_ST_NUCLEO64_F410RB
 +#define BOARD_NAME                  "STMicroelectronics NUCLEO64-F410RB"
 +
 +/*
 + * Board oscillators-related settings.
 + * NOTE: LSE not fitted.
 + * NOTE: HSE not fitted.
 + */
 +#if !defined(STM32_LSECLK)
 +#define STM32_LSECLK                0U
 +#endif
 +
 +#if !defined(STM32_HSECLK)
 +#define STM32_HSECLK                0U
 +#endif
 +
 +/*
 + * Board voltages.
 + * Required for performance limits calculation.
 + */
 +#define STM32_VDD                   300U
 +
 +/*
 + * MCU type as defined in the ST header.
 + */
 +#define STM32F410xE
 +#define STM32F410Rx
 +
 +/*
 + * IO pins assignments.
 + */
 +#define GPIOA_ARD_A0                0U
 +#define GPIOA_ARD_A1                1U
 +#define GPIOA_ARD_D1                2U
 +#define GPIOA_USART_TX              2U
 +#define GPIOA_ARD_D0                3U
 +#define GPIOA_USART_RX              3U
 +#define GPIOA_ARD_A2                4U
 +#define GPIOA_LED_GREEN             5U
 +#define GPIOA_ARD_D13               5U
 +#define GPIOA_ARD_D12               6U
 +#define GPIOA_ARD_D11               7U
 +#define GPIOA_ARD_D7                8U
 +#define GPIOA_ARD_D8                9U
 +#define GPIOA_ARD_D2                10U
 +#define GPIOA_OTG_FS_DM             11U
 +#define GPIOA_OTG_FS_DP             12U
 +#define GPIOA_SWDIO                 13U
 +#define GPIOA_SWCLK                 14U
 +#define GPIOA_PIN15                 15U
 +
 +#define GPIOB_ARD_A3                0U
 +#define GPIOB_PIN1                  1U
 +#define GPIOB_PIN2                  2U
 +#define GPIOB_SWO                   3U
 +#define GPIOB_ARD_D3                3U
 +#define GPIOB_ARD_D5                4U
 +#define GPIOB_ARD_D4                5U
 +#define GPIOB_ARD_D10               6U
 +#define GPIOB_PIN7                  7U
 +#define GPIOB_ARD_D15               8U
 +#define GPIOB_ARD_A5_ALT            8U
 +#define GPIOB_ARD_D14               9U
 +#define GPIOB_ARD_A4_ALT            9U
 +#define GPIOB_ARD_D6                10U
 +#define GPIOB_PIN11                 11U
 +#define GPIOB_PIN12                 12U
 +#define GPIOB_PIN13                 13U
 +#define GPIOB_PIN14                 14U
 +#define GPIOB_PIN15                 15U
 +
 +#define GPIOC_ARD_A5                0U
 +#define GPIOC_ARD_A4                1U
 +#define GPIOC_PIN2                  2U
 +#define GPIOC_PIN3                  3U
 +#define GPIOC_PIN4                  4U
 +#define GPIOC_PIN5                  5U
 +#define GPIOC_PIN6                  6U
 +#define GPIOC_ARD_D9                7U
 +#define GPIOC_PIN8                  8U
 +#define GPIOC_PIN9                  9U
 +#define GPIOC_PIN10                 10U
 +#define GPIOC_PIN11                 11U
 +#define GPIOC_PIN12                 12U
 +#define GPIOC_BUTTON                13U
 +#define GPIOC_PIN14                 14U
 +#define GPIOC_PIN15                 15U
 +
 +#define GPIOD_PIN0                  0U
 +#define GPIOD_PIN1                  1U
 +#define GPIOD_PIN2                  2U
 +#define GPIOD_PIN3                  3U
 +#define GPIOD_PIN4                  4U
 +#define GPIOD_PIN5                  5U
 +#define GPIOD_PIN6                  6U
 +#define GPIOD_PIN7                  7U
 +#define GPIOD_PIN8                  8U
 +#define GPIOD_PIN9                  9U
 +#define GPIOD_PIN10                 10U
 +#define GPIOD_PIN11                 11U
 +#define GPIOD_PIN12                 12U
 +#define GPIOD_PIN13                 13U
 +#define GPIOD_PIN14                 14U
 +#define GPIOD_PIN15                 15U
 +
 +#define GPIOE_PIN0                  0U
 +#define GPIOE_PIN1                  1U
 +#define GPIOE_PIN2                  2U
 +#define GPIOE_PIN3                  3U
 +#define GPIOE_PIN4                  4U
 +#define GPIOE_PIN5                  5U
 +#define GPIOE_PIN6                  6U
 +#define GPIOE_PIN7                  7U
 +#define GPIOE_PIN8                  8U
 +#define GPIOE_PIN9                  9U
 +#define GPIOE_PIN10                 10U
 +#define GPIOE_PIN11                 11U
 +#define GPIOE_PIN12                 12U
 +#define GPIOE_PIN13                 13U
 +#define GPIOE_PIN14                 14U
 +#define GPIOE_PIN15                 15U
 +
 +#define GPIOF_PIN0                  0U
 +#define GPIOF_PIN1                  1U
 +#define GPIOF_PIN2                  2U
 +#define GPIOF_PIN3                  3U
 +#define GPIOF_PIN4                  4U
 +#define GPIOF_PIN5                  5U
 +#define GPIOF_PIN6                  6U
 +#define GPIOF_PIN7                  7U
 +#define GPIOF_PIN8                  8U
 +#define GPIOF_PIN9                  9U
 +#define GPIOF_PIN10                 10U
 +#define GPIOF_PIN11                 11U
 +#define GPIOF_PIN12                 12U
 +#define GPIOF_PIN13                 13U
 +#define GPIOF_PIN14                 14U
 +#define GPIOF_PIN15                 15U
 +
 +#define GPIOG_PIN0                  0U
 +#define GPIOG_PIN1                  1U
 +#define GPIOG_PIN2                  2U
 +#define GPIOG_PIN3                  3U
 +#define GPIOG_PIN4                  4U
 +#define GPIOG_PIN5                  5U
 +#define GPIOG_PIN6                  6U
 +#define GPIOG_PIN7                  7U
 +#define GPIOG_PIN8                  8U
 +#define GPIOG_PIN9                  9U
 +#define GPIOG_PIN10                 10U
 +#define GPIOG_PIN11                 11U
 +#define GPIOG_PIN12                 12U
 +#define GPIOG_PIN13                 13U
 +#define GPIOG_PIN14                 14U
 +#define GPIOG_PIN15                 15U
 +
 +#define GPIOH_OSC_IN                0U
 +#define GPIOH_OSC_OUT               1U
 +#define GPIOH_PIN2                  2U
 +#define GPIOH_PIN3                  3U
 +#define GPIOH_PIN4                  4U
 +#define GPIOH_PIN5                  5U
 +#define GPIOH_PIN6                  6U
 +#define GPIOH_PIN7                  7U
 +#define GPIOH_PIN8                  8U
 +#define GPIOH_PIN9                  9U
 +#define GPIOH_PIN10                 10U
 +#define GPIOH_PIN11                 11U
 +#define GPIOH_PIN12                 12U
 +#define GPIOH_PIN13                 13U
 +#define GPIOH_PIN14                 14U
 +#define GPIOH_PIN15                 15U
 +
 +#define GPIOI_PIN0                  0U
 +#define GPIOI_PIN1                  1U
 +#define GPIOI_PIN2                  2U
 +#define GPIOI_PIN3                  3U
 +#define GPIOI_PIN4                  4U
 +#define GPIOI_PIN5                  5U
 +#define GPIOI_PIN6                  6U
 +#define GPIOI_PIN7                  7U
 +#define GPIOI_PIN8                  8U
 +#define GPIOI_PIN9                  9U
 +#define GPIOI_PIN10                 10U
 +#define GPIOI_PIN11                 11U
 +#define GPIOI_PIN12                 12U
 +#define GPIOI_PIN13                 13U
 +#define GPIOI_PIN14                 14U
 +#define GPIOI_PIN15                 15U
 +
 +/*
 + * IO lines assignments.
 + */
 +#define LINE_ARD_A0                 PAL_LINE(GPIOA, 0U)
 +#define LINE_ARD_A1                 PAL_LINE(GPIOA, 1U)
 +#define LINE_ARD_D1                 PAL_LINE(GPIOA, 2U)
 +#define LINE_USART_TX               PAL_LINE(GPIOA, 2U)
 +#define LINE_ARD_D0                 PAL_LINE(GPIOA, 3U)
 +#define LINE_USART_RX               PAL_LINE(GPIOA, 3U)
 +#define LINE_ARD_A2                 PAL_LINE(GPIOA, 4U)
 +#define LINE_LED_GREEN              PAL_LINE(GPIOA, 5U)
 +#define LINE_ARD_D13                PAL_LINE(GPIOA, 5U)
 +#define LINE_ARD_D12                PAL_LINE(GPIOA, 6U)
 +#define LINE_ARD_D11                PAL_LINE(GPIOA, 7U)
 +#define LINE_ARD_D7                 PAL_LINE(GPIOA, 8U)
 +#define LINE_ARD_D8                 PAL_LINE(GPIOA, 9U)
 +#define LINE_ARD_D2                 PAL_LINE(GPIOA, 10U)
 +#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_ARD_A3                 PAL_LINE(GPIOB, 0U)
 +#define LINE_SWO                    PAL_LINE(GPIOB, 3U)
 +#define LINE_ARD_D3                 PAL_LINE(GPIOB, 3U)
 +#define LINE_ARD_D5                 PAL_LINE(GPIOB, 4U)
 +#define LINE_ARD_D4                 PAL_LINE(GPIOB, 5U)
 +#define LINE_ARD_D10                PAL_LINE(GPIOB, 6U)
 +#define LINE_ARD_D15                PAL_LINE(GPIOB, 8U)
 +#define LINE_ARD_A5_ALT             PAL_LINE(GPIOB, 8U)
 +#define LINE_ARD_D14                PAL_LINE(GPIOB, 9U)
 +#define LINE_ARD_A4_ALT             PAL_LINE(GPIOB, 9U)
 +#define LINE_ARD_D6                 PAL_LINE(GPIOB, 10U)
 +
 +#define LINE_ARD_A5                 PAL_LINE(GPIOC, 0U)
 +#define LINE_ARD_A4                 PAL_LINE(GPIOC, 1U)
 +#define LINE_ARD_D9                 PAL_LINE(GPIOC, 7U)
 +#define LINE_BUTTON                 PAL_LINE(GPIOC, 13U)
 +
 +
 +
 +
 +
 +#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_LOW(n)              (0U << (n))
 +#define PIN_ODR_HIGH(n)             (1U << (n))
 +#define PIN_OTYPE_PUSHPULL(n)       (0U << (n))
 +#define PIN_OTYPE_OPENDRAIN(n)      (1U << (n))
 +#define PIN_OSPEED_VERYLOW(n)       (0U << ((n) * 2U))
 +#define PIN_OSPEED_LOW(n)           (1U << ((n) * 2U))
 +#define PIN_OSPEED_MEDIUM(n)        (2U << ((n) * 2U))
 +#define PIN_OSPEED_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))
 +
 +/*
 + * GPIOA setup:
 + *
 + * PA0  - ARD_A0                    (analog).
 + * PA1  - ARD_A1                    (analog).
 + * PA2  - ARD_D1 USART_TX           (alternate 7).
 + * PA3  - ARD_D0 USART_RX           (alternate 7).
 + * PA4  - ARD_A2                    (analog).
 + * PA5  - LED_GREEN ARD_D13         (output pushpull high).
 + * PA6  - ARD_D12                   (input pullup).
 + * PA7  - ARD_D11                   (input pullup).
 + * PA8  - ARD_D7                    (input pullup).
 + * PA9  - ARD_D8                    (input pullup).
 + * PA10 - ARD_D2                    (input pullup).
 + * PA11 - OTG_FS_DM                 (alternate 10).
 + * PA12 - OTG_FS_DP                 (alternate 10).
 + * PA13 - SWDIO                     (alternate 0).
 + * PA14 - SWCLK                     (alternate 0).
 + * PA15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOA_MODER             (PIN_MODE_ANALOG(GPIOA_ARD_A0) |        \
 +                                     PIN_MODE_ANALOG(GPIOA_ARD_A1) |        \
 +                                     PIN_MODE_ALTERNATE(GPIOA_ARD_D1) |     \
 +                                     PIN_MODE_ALTERNATE(GPIOA_ARD_D0) |     \
 +                                     PIN_MODE_ANALOG(GPIOA_ARD_A2) |        \
 +                                     PIN_MODE_OUTPUT(GPIOA_LED_GREEN) |     \
 +                                     PIN_MODE_INPUT(GPIOA_ARD_D12) |        \
 +                                     PIN_MODE_INPUT(GPIOA_ARD_D11) |        \
 +                                     PIN_MODE_INPUT(GPIOA_ARD_D7) |         \
 +                                     PIN_MODE_INPUT(GPIOA_ARD_D8) |         \
 +                                     PIN_MODE_INPUT(GPIOA_ARD_D2) |         \
 +                                     PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DM) |  \
 +                                     PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DP) |  \
 +                                     PIN_MODE_ALTERNATE(GPIOA_SWDIO) |      \
 +                                     PIN_MODE_ALTERNATE(GPIOA_SWCLK) |      \
 +                                     PIN_MODE_INPUT(GPIOA_PIN15))
 +#define VAL_GPIOA_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOA_ARD_A0) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_A1) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D1) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D0) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_A2) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_LED_GREEN) |  \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D12) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D11) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D7) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D8) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_ARD_D2) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_DM) |  \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_DP) |  \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
 +#define VAL_GPIOA_OSPEEDR           (PIN_OSPEED_HIGH(GPIOA_ARD_A0) |        \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_A1) |        \
 +                                     PIN_OSPEED_MEDIUM(GPIOA_ARD_D1) |      \
 +                                     PIN_OSPEED_MEDIUM(GPIOA_ARD_D0) |      \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_A2) |        \
 +                                     PIN_OSPEED_MEDIUM(GPIOA_LED_GREEN) |   \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_D12) |       \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_D11) |       \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_D7) |        \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_D8) |        \
 +                                     PIN_OSPEED_HIGH(GPIOA_ARD_D2) |        \
 +                                     PIN_OSPEED_HIGH(GPIOA_OTG_FS_DM) |     \
 +                                     PIN_OSPEED_HIGH(GPIOA_OTG_FS_DP) |     \
 +                                     PIN_OSPEED_HIGH(GPIOA_SWDIO) |         \
 +                                     PIN_OSPEED_HIGH(GPIOA_SWCLK) |         \
 +                                     PIN_OSPEED_HIGH(GPIOA_PIN15))
 +#define VAL_GPIOA_PUPDR             (PIN_PUPDR_FLOATING(GPIOA_ARD_A0) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOA_ARD_A1) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOA_ARD_D1) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOA_ARD_D0) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOA_ARD_A2) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOA_LED_GREEN) |  \
 +                                     PIN_PUPDR_PULLUP(GPIOA_ARD_D12) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOA_ARD_D11) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOA_ARD_D7) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOA_ARD_D8) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOA_ARD_D2) |       \
 +                                     PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DM) |  \
 +                                     PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DP) |  \
 +                                     PIN_PUPDR_PULLUP(GPIOA_SWDIO) |        \
 +                                     PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOA_PIN15))
 +#define VAL_GPIOA_ODR               (PIN_ODR_HIGH(GPIOA_ARD_A0) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_A1) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D1) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D0) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_A2) |           \
 +                                     PIN_ODR_LOW(GPIOA_LED_GREEN) |         \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D12) |          \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D11) |          \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D7) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D8) |           \
 +                                     PIN_ODR_HIGH(GPIOA_ARD_D2) |           \
 +                                     PIN_ODR_HIGH(GPIOA_OTG_FS_DM) |        \
 +                                     PIN_ODR_HIGH(GPIOA_OTG_FS_DP) |        \
 +                                     PIN_ODR_HIGH(GPIOA_SWDIO) |            \
 +                                     PIN_ODR_HIGH(GPIOA_SWCLK) |            \
 +                                     PIN_ODR_HIGH(GPIOA_PIN15))
 +#define VAL_GPIOA_AFRL              (PIN_AFIO_AF(GPIOA_ARD_A0, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_A1, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D1, 7) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D0, 7) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_A2, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_LED_GREEN, 0) |      \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D12, 0) |        \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D11, 0))
 +#define VAL_GPIOA_AFRH              (PIN_AFIO_AF(GPIOA_ARD_D7, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D8, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_ARD_D2, 0) |         \
 +                                     PIN_AFIO_AF(GPIOA_OTG_FS_DM, 10) |     \
 +                                     PIN_AFIO_AF(GPIOA_OTG_FS_DP, 10) |     \
 +                                     PIN_AFIO_AF(GPIOA_SWDIO, 0) |          \
 +                                     PIN_AFIO_AF(GPIOA_SWCLK, 0) |          \
 +                                     PIN_AFIO_AF(GPIOA_PIN15, 0))
 +
 +/*
 + * GPIOB setup:
 + *
 + * PB0  - ARD_A3                    (analog).
 + * PB1  - PIN1                      (input pullup).
 + * PB2  - PIN2                      (input pullup).
 + * PB3  - SWO ARD_D3                (alternate 0).
 + * PB4  - ARD_D5                    (input pullup).
 + * PB5  - ARD_D4                    (input pullup).
 + * PB6  - ARD_D10                   (input pullup).
 + * PB7  - PIN7                      (input pullup).
 + * PB8  - ARD_D15 ARD_A5_ALT        (input pullup).
 + * PB9  - ARD_D14 ARD_A4_ALT        (input pullup).
 + * PB10 - ARD_D6                    (input pullup).
 + * PB11 - PIN11                     (input pullup).
 + * PB12 - PIN12                     (input pullup).
 + * PB13 - PIN13                     (input pullup).
 + * PB14 - PIN14                     (input pullup).
 + * PB15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOB_MODER             (PIN_MODE_ANALOG(GPIOB_ARD_A3) |        \
 +                                     PIN_MODE_INPUT(GPIOB_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOB_PIN2) |           \
 +                                     PIN_MODE_ALTERNATE(GPIOB_SWO) |        \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D5) |         \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D4) |         \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D10) |        \
 +                                     PIN_MODE_INPUT(GPIOB_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D15) |        \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D14) |        \
 +                                     PIN_MODE_INPUT(GPIOB_ARD_D6) |         \
 +                                     PIN_MODE_INPUT(GPIOB_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOB_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOB_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOB_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOB_PIN15))
 +#define VAL_GPIOB_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOB_ARD_A3) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_SWO) |        \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D5) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D4) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D10) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D15) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D14) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_ARD_D6) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
 +#define VAL_GPIOB_OSPEEDR           (PIN_OSPEED_HIGH(GPIOB_ARD_A3) |        \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOB_SWO) |           \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D5) |        \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D4) |        \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D10) |       \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D15) |       \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D14) |       \
 +                                     PIN_OSPEED_HIGH(GPIOB_ARD_D6) |        \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOB_PIN15))
 +#define VAL_GPIOB_PUPDR             (PIN_PUPDR_FLOATING(GPIOB_ARD_A3) |     \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOB_SWO) |          \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D5) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D4) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D10) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D15) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D14) |      \
 +                                     PIN_PUPDR_PULLUP(GPIOB_ARD_D6) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOB_PIN15))
 +#define VAL_GPIOB_ODR               (PIN_ODR_HIGH(GPIOB_ARD_A3) |           \
 +                                     PIN_ODR_HIGH(GPIOB_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOB_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOB_SWO) |              \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D5) |           \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D4) |           \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D10) |          \
 +                                     PIN_ODR_HIGH(GPIOB_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D15) |          \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D14) |          \
 +                                     PIN_ODR_HIGH(GPIOB_ARD_D6) |           \
 +                                     PIN_ODR_HIGH(GPIOB_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOB_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOB_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOB_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOB_PIN15))
 +#define VAL_GPIOB_AFRL              (PIN_AFIO_AF(GPIOB_ARD_A3, 0) |         \
 +                                     PIN_AFIO_AF(GPIOB_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOB_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOB_SWO, 0) |            \
 +                                     PIN_AFIO_AF(GPIOB_ARD_D5, 0) |         \
 +                                     PIN_AFIO_AF(GPIOB_ARD_D4, 0) |         \
 +                                     PIN_AFIO_AF(GPIOB_ARD_D10, 0) |        \
 +                                     PIN_AFIO_AF(GPIOB_PIN7, 0))
 +#define VAL_GPIOB_AFRH              (PIN_AFIO_AF(GPIOB_ARD_D15, 0) |        \
 +                                     PIN_AFIO_AF(GPIOB_ARD_D14, 0) |        \
 +                                     PIN_AFIO_AF(GPIOB_ARD_D6, 0) |         \
 +                                     PIN_AFIO_AF(GPIOB_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOB_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOB_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOB_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOB_PIN15, 0))
 +
 +/*
 + * GPIOC setup:
 + *
 + * PC0  - ARD_A5                    (analog).
 + * PC1  - ARD_A4                    (analog).
 + * PC2  - PIN2                      (input pullup).
 + * PC3  - PIN3                      (input pullup).
 + * PC4  - PIN4                      (input pullup).
 + * PC5  - PIN5                      (input pullup).
 + * PC6  - PIN6                      (input pullup).
 + * PC7  - ARD_D9                    (input pullup).
 + * PC8  - PIN8                      (input pullup).
 + * PC9  - PIN9                      (input pullup).
 + * PC10 - PIN10                     (input pullup).
 + * PC11 - PIN11                     (input pullup).
 + * PC12 - PIN12                     (input pullup).
 + * PC13 - BUTTON                    (input floating).
 + * PC14 - PIN14                     (input pullup).
 + * PC15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOC_MODER             (PIN_MODE_ANALOG(GPIOC_ARD_A5) |        \
 +                                     PIN_MODE_ANALOG(GPIOC_ARD_A4) |        \
 +                                     PIN_MODE_INPUT(GPIOC_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOC_ARD_D9) |         \
 +                                     PIN_MODE_INPUT(GPIOC_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOC_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOC_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOC_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOC_BUTTON) |         \
 +                                     PIN_MODE_INPUT(GPIOC_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOC_PIN15))
 +#define VAL_GPIOC_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOC_ARD_A5) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_ARD_A4) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_ARD_D9) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_BUTTON) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
 +#define VAL_GPIOC_OSPEEDR           (PIN_OSPEED_HIGH(GPIOC_ARD_A5) |        \
 +                                     PIN_OSPEED_HIGH(GPIOC_ARD_A4) |        \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_ARD_D9) |        \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOC_BUTTON) |        \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOC_PIN15))
 +#define VAL_GPIOC_PUPDR             (PIN_PUPDR_FLOATING(GPIOC_ARD_A5) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOC_ARD_A4) |     \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_ARD_D9) |       \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN12) |        \
 +                                     PIN_PUPDR_FLOATING(GPIOC_BUTTON) |     \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOC_PIN15))
 +#define VAL_GPIOC_ODR               (PIN_ODR_HIGH(GPIOC_ARD_A5) |           \
 +                                     PIN_ODR_HIGH(GPIOC_ARD_A4) |           \
 +                                     PIN_ODR_HIGH(GPIOC_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOC_ARD_D9) |           \
 +                                     PIN_ODR_HIGH(GPIOC_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOC_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOC_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOC_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOC_BUTTON) |           \
 +                                     PIN_ODR_HIGH(GPIOC_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOC_PIN15))
 +#define VAL_GPIOC_AFRL              (PIN_AFIO_AF(GPIOC_ARD_A5, 0) |         \
 +                                     PIN_AFIO_AF(GPIOC_ARD_A4, 0) |         \
 +                                     PIN_AFIO_AF(GPIOC_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_ARD_D9, 0))
 +#define VAL_GPIOC_AFRH              (PIN_AFIO_AF(GPIOC_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOC_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOC_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOC_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOC_BUTTON, 0) |         \
 +                                     PIN_AFIO_AF(GPIOC_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOC_PIN15, 0))
 +
 +/*
 + * GPIOD setup:
 + *
 + * PD0  - PIN0                      (input pullup).
 + * PD1  - PIN1                      (input pullup).
 + * PD2  - PIN2                      (input pullup).
 + * PD3  - PIN3                      (input pullup).
 + * PD4  - PIN4                      (input pullup).
 + * PD5  - PIN5                      (input pullup).
 + * PD6  - PIN6                      (input pullup).
 + * PD7  - PIN7                      (input pullup).
 + * PD8  - PIN8                      (input pullup).
 + * PD9  - PIN9                      (input pullup).
 + * PD10 - PIN10                     (input pullup).
 + * PD11 - PIN11                     (input pullup).
 + * PD12 - PIN12                     (input pullup).
 + * PD13 - PIN13                     (input pullup).
 + * PD14 - PIN14                     (input pullup).
 + * PD15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOD_MODER             (PIN_MODE_INPUT(GPIOD_PIN0) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOD_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOD_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOD_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOD_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOD_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOD_PIN15))
 +#define VAL_GPIOD_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
 +#define VAL_GPIOD_OSPEEDR           (PIN_OSPEED_HIGH(GPIOD_PIN0) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOD_PIN15))
 +#define VAL_GPIOD_PUPDR             (PIN_PUPDR_PULLUP(GPIOD_PIN0) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOD_PIN15))
 +#define VAL_GPIOD_ODR               (PIN_ODR_HIGH(GPIOD_PIN0) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOD_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOD_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOD_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOD_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOD_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOD_PIN15))
 +#define VAL_GPIOD_AFRL              (PIN_AFIO_AF(GPIOD_PIN0, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN7, 0))
 +#define VAL_GPIOD_AFRH              (PIN_AFIO_AF(GPIOD_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOD_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOD_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOD_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOD_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOD_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOD_PIN15, 0))
 +
 +/*
 + * GPIOE setup:
 + *
 + * PE0  - PIN0                      (input pullup).
 + * PE1  - PIN1                      (input pullup).
 + * PE2  - PIN2                      (input pullup).
 + * PE3  - PIN3                      (input pullup).
 + * PE4  - PIN4                      (input pullup).
 + * PE5  - PIN5                      (input pullup).
 + * PE6  - PIN6                      (input pullup).
 + * PE7  - PIN7                      (input pullup).
 + * PE8  - PIN8                      (input pullup).
 + * PE9  - PIN9                      (input pullup).
 + * PE10 - PIN10                     (input pullup).
 + * PE11 - PIN11                     (input pullup).
 + * PE12 - PIN12                     (input pullup).
 + * PE13 - PIN13                     (input pullup).
 + * PE14 - PIN14                     (input pullup).
 + * PE15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOE_MODER             (PIN_MODE_INPUT(GPIOE_PIN0) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOE_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOE_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOE_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOE_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOE_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOE_PIN15))
 +#define VAL_GPIOE_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
 +#define VAL_GPIOE_OSPEEDR           (PIN_OSPEED_HIGH(GPIOE_PIN0) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOE_PIN15))
 +#define VAL_GPIOE_PUPDR             (PIN_PUPDR_PULLUP(GPIOE_PIN0) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOE_PIN15))
 +#define VAL_GPIOE_ODR               (PIN_ODR_HIGH(GPIOE_PIN0) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOE_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOE_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOE_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOE_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOE_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOE_PIN15))
 +#define VAL_GPIOE_AFRL              (PIN_AFIO_AF(GPIOE_PIN0, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN7, 0))
 +#define VAL_GPIOE_AFRH              (PIN_AFIO_AF(GPIOE_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOE_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOE_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOE_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOE_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOE_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOE_PIN15, 0))
 +
 +/*
 + * GPIOF setup:
 + *
 + * PF0  - PIN0                      (input pullup).
 + * PF1  - PIN1                      (input pullup).
 + * PF2  - PIN2                      (input pullup).
 + * PF3  - PIN3                      (input pullup).
 + * PF4  - PIN4                      (input pullup).
 + * PF5  - PIN5                      (input pullup).
 + * PF6  - PIN6                      (input pullup).
 + * PF7  - PIN7                      (input pullup).
 + * PF8  - PIN8                      (input pullup).
 + * PF9  - PIN9                      (input pullup).
 + * PF10 - PIN10                     (input pullup).
 + * PF11 - PIN11                     (input pullup).
 + * PF12 - PIN12                     (input pullup).
 + * PF13 - PIN13                     (input pullup).
 + * PF14 - PIN14                     (input pullup).
 + * PF15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOF_MODER             (PIN_MODE_INPUT(GPIOF_PIN0) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOF_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOF_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOF_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOF_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOF_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOF_PIN15))
 +#define VAL_GPIOF_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOF_PIN0) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
 +#define VAL_GPIOF_OSPEEDR           (PIN_OSPEED_HIGH(GPIOF_PIN0) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOF_PIN15))
 +#define VAL_GPIOF_PUPDR             (PIN_PUPDR_PULLUP(GPIOF_PIN0) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOF_PIN15))
 +#define VAL_GPIOF_ODR               (PIN_ODR_HIGH(GPIOF_PIN0) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOF_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOF_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOF_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOF_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOF_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOF_PIN15))
 +#define VAL_GPIOF_AFRL              (PIN_AFIO_AF(GPIOF_PIN0, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN7, 0))
 +#define VAL_GPIOF_AFRH              (PIN_AFIO_AF(GPIOF_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOF_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOF_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOF_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOF_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOF_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOF_PIN15, 0))
 +
 +/*
 + * GPIOG setup:
 + *
 + * PG0  - PIN0                      (input pullup).
 + * PG1  - PIN1                      (input pullup).
 + * PG2  - PIN2                      (input pullup).
 + * PG3  - PIN3                      (input pullup).
 + * PG4  - PIN4                      (input pullup).
 + * PG5  - PIN5                      (input pullup).
 + * PG6  - PIN6                      (input pullup).
 + * PG7  - PIN7                      (input pullup).
 + * PG8  - PIN8                      (input pullup).
 + * PG9  - PIN9                      (input pullup).
 + * PG10 - PIN10                     (input pullup).
 + * PG11 - PIN11                     (input pullup).
 + * PG12 - PIN12                     (input pullup).
 + * PG13 - PIN13                     (input pullup).
 + * PG14 - PIN14                     (input pullup).
 + * PG15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOG_MODER             (PIN_MODE_INPUT(GPIOG_PIN0) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOG_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOG_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOG_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOG_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOG_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOG_PIN15))
 +#define VAL_GPIOG_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
 +#define VAL_GPIOG_OSPEEDR           (PIN_OSPEED_HIGH(GPIOG_PIN0) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOG_PIN15))
 +#define VAL_GPIOG_PUPDR             (PIN_PUPDR_PULLUP(GPIOG_PIN0) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOG_PIN15))
 +#define VAL_GPIOG_ODR               (PIN_ODR_HIGH(GPIOG_PIN0) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOG_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOG_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOG_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOG_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOG_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOG_PIN15))
 +#define VAL_GPIOG_AFRL              (PIN_AFIO_AF(GPIOG_PIN0, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN7, 0))
 +#define VAL_GPIOG_AFRH              (PIN_AFIO_AF(GPIOG_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOG_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOG_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOG_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOG_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOG_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOG_PIN15, 0))
 +
 +/*
 + * GPIOH setup:
 + *
 + * PH0  - OSC_IN                    (input floating).
 + * PH1  - OSC_OUT                   (input floating).
 + * PH2  - PIN2                      (input pullup).
 + * PH3  - PIN3                      (input pullup).
 + * PH4  - PIN4                      (input pullup).
 + * PH5  - PIN5                      (input pullup).
 + * PH6  - PIN6                      (input pullup).
 + * PH7  - PIN7                      (input pullup).
 + * PH8  - PIN8                      (input pullup).
 + * PH9  - PIN9                      (input pullup).
 + * PH10 - PIN10                     (input pullup).
 + * PH11 - PIN11                     (input pullup).
 + * PH12 - PIN12                     (input pullup).
 + * PH13 - PIN13                     (input pullup).
 + * PH14 - PIN14                     (input pullup).
 + * PH15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOH_MODER             (PIN_MODE_INPUT(GPIOH_OSC_IN) |         \
 +                                     PIN_MODE_INPUT(GPIOH_OSC_OUT) |        \
 +                                     PIN_MODE_INPUT(GPIOH_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOH_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOH_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOH_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOH_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOH_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOH_PIN15))
 +#define VAL_GPIOH_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOH_OSC_IN) |     \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_OSC_OUT) |    \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
 +#define VAL_GPIOH_OSPEEDR           (PIN_OSPEED_HIGH(GPIOH_OSC_IN) |        \
 +                                     PIN_OSPEED_HIGH(GPIOH_OSC_OUT) |       \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOH_PIN15))
 +#define VAL_GPIOH_PUPDR             (PIN_PUPDR_FLOATING(GPIOH_OSC_IN) |     \
 +                                     PIN_PUPDR_FLOATING(GPIOH_OSC_OUT) |    \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOH_PIN15))
 +#define VAL_GPIOH_ODR               (PIN_ODR_HIGH(GPIOH_OSC_IN) |           \
 +                                     PIN_ODR_HIGH(GPIOH_OSC_OUT) |          \
 +                                     PIN_ODR_HIGH(GPIOH_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOH_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOH_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOH_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOH_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOH_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOH_PIN15))
 +#define VAL_GPIOH_AFRL              (PIN_AFIO_AF(GPIOH_OSC_IN, 0) |         \
 +                                     PIN_AFIO_AF(GPIOH_OSC_OUT, 0) |        \
 +                                     PIN_AFIO_AF(GPIOH_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN7, 0))
 +#define VAL_GPIOH_AFRH              (PIN_AFIO_AF(GPIOH_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOH_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOH_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOH_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOH_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOH_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOH_PIN15, 0))
 +
 +/*
 + * GPIOI setup:
 + *
 + * PI0  - PIN0                      (input pullup).
 + * PI1  - PIN1                      (input pullup).
 + * PI2  - PIN2                      (input pullup).
 + * PI3  - PIN3                      (input pullup).
 + * PI4  - PIN4                      (input pullup).
 + * PI5  - PIN5                      (input pullup).
 + * PI6  - PIN6                      (input pullup).
 + * PI7  - PIN7                      (input pullup).
 + * PI8  - PIN8                      (input pullup).
 + * PI9  - PIN9                      (input pullup).
 + * PI10 - PIN10                     (input pullup).
 + * PI11 - PIN11                     (input pullup).
 + * PI12 - PIN12                     (input pullup).
 + * PI13 - PIN13                     (input pullup).
 + * PI14 - PIN14                     (input pullup).
 + * PI15 - PIN15                     (input pullup).
 + */
 +#define VAL_GPIOI_MODER             (PIN_MODE_INPUT(GPIOI_PIN0) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN1) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN2) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN3) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN4) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN5) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN6) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN7) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN8) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN9) |           \
 +                                     PIN_MODE_INPUT(GPIOI_PIN10) |          \
 +                                     PIN_MODE_INPUT(GPIOI_PIN11) |          \
 +                                     PIN_MODE_INPUT(GPIOI_PIN12) |          \
 +                                     PIN_MODE_INPUT(GPIOI_PIN13) |          \
 +                                     PIN_MODE_INPUT(GPIOI_PIN14) |          \
 +                                     PIN_MODE_INPUT(GPIOI_PIN15))
 +#define VAL_GPIOI_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOI_PIN0) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN1) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN2) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN3) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN4) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN5) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN6) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN7) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN8) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN9) |       \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN10) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN11) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN12) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN13) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN14) |      \
 +                                     PIN_OTYPE_PUSHPULL(GPIOI_PIN15))
 +#define VAL_GPIOI_OSPEEDR           (PIN_OSPEED_HIGH(GPIOI_PIN0) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN1) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN2) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN3) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN4) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN5) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN6) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN7) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN8) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN9) |          \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN10) |         \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN11) |         \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN12) |         \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN13) |         \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN14) |         \
 +                                     PIN_OSPEED_HIGH(GPIOI_PIN15))
 +#define VAL_GPIOI_PUPDR             (PIN_PUPDR_PULLUP(GPIOI_PIN0) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN1) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN2) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN3) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN4) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN5) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN6) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN7) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN8) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN9) |         \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN10) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN11) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN12) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN13) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN14) |        \
 +                                     PIN_PUPDR_PULLUP(GPIOI_PIN15))
 +#define VAL_GPIOI_ODR               (PIN_ODR_HIGH(GPIOI_PIN0) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN1) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN2) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN3) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN4) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN5) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN6) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN7) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN8) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN9) |             \
 +                                     PIN_ODR_HIGH(GPIOI_PIN10) |            \
 +                                     PIN_ODR_HIGH(GPIOI_PIN11) |            \
 +                                     PIN_ODR_HIGH(GPIOI_PIN12) |            \
 +                                     PIN_ODR_HIGH(GPIOI_PIN13) |            \
 +                                     PIN_ODR_HIGH(GPIOI_PIN14) |            \
 +                                     PIN_ODR_HIGH(GPIOI_PIN15))
 +#define VAL_GPIOI_AFRL              (PIN_AFIO_AF(GPIOI_PIN0, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN1, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN2, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN3, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN4, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN5, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN6, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN7, 0))
 +#define VAL_GPIOI_AFRH              (PIN_AFIO_AF(GPIOI_PIN8, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN9, 0) |           \
 +                                     PIN_AFIO_AF(GPIOI_PIN10, 0) |          \
 +                                     PIN_AFIO_AF(GPIOI_PIN11, 0) |          \
 +                                     PIN_AFIO_AF(GPIOI_PIN12, 0) |          \
 +                                     PIN_AFIO_AF(GPIOI_PIN13, 0) |          \
 +                                     PIN_AFIO_AF(GPIOI_PIN14, 0) |          \
 +                                     PIN_AFIO_AF(GPIOI_PIN15, 0))
 +
 +
 +#if !defined(_FROM_ASM_)
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +  void boardInit(void);
 +#ifdef __cplusplus
 +}
 +#endif
 +#endif /* _FROM_ASM_ */
 +
 +#endif /* _BOARD_H_ */
 diff --git a/os/hal/boards/ST_NUCLEO64_F410RB/board.mk b/os/hal/boards/ST_NUCLEO64_F410RB/board.mk new file mode 100644 index 000000000..2e848ea5e --- /dev/null +++ b/os/hal/boards/ST_NUCLEO64_F410RB/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files.
 +BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F410RB/board.c
 +
 +# Required include directories
 +BOARDINC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F410RB
 diff --git a/os/hal/boards/ST_NUCLEO64_F410RB/cfg/board.chcfg b/os/hal/boards/ST_NUCLEO64_F410RB/cfg/board.chcfg new file mode 100644 index 000000000..ea8e69015 --- /dev/null +++ b/os/hal/boards/ST_NUCLEO64_F410RB/cfg/board.chcfg @@ -0,0 +1,1193 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- STM32F4xx board Template --> +<board +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +  xsi:noNamespaceSchemaLocation="http://www.chibios.org/xml/schema/boards/stm32f4xx_board.xsd"> +  <configuration_settings> +    <templates_path>resources/gencfg/processors/boards/stm32f4xx/templates</templates_path> +    <output_path>..</output_path> +    <hal_version>3.0.x</hal_version> +  </configuration_settings> +  <board_name>STMicroelectronics NUCLEO64-F410RB</board_name> +  <board_id>ST_NUCLEO64_F410RB</board_id> +  <board_functions></board_functions> +  <subtype>STM32F410Rx</subtype> +  <clocks +    HSEFrequency="0" +    HSEBypass="false" +    LSEFrequency="0" +    LSEBypass="false" +    VDD="300" /> +  <ports> +    <GPIOA> +      <pin0 +        ID="ARD_A0" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin1 +        ID="ARD_A1" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin2 +        ID="ARD_D1 USART_TX" +        Type="PushPull" +        Level="High" +        Speed="High" +        Resistor="Floating" +        Mode="Alternate" +        Alternate="7" /> +      <pin3 +        ID="ARD_D0 USART_RX" +        Type="PushPull" +        Level="High" +        Speed="High" +        Resistor="Floating" +        Mode="Alternate" +        Alternate="7" /> +      <pin4 +        ID="ARD_A2" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin5 +        ID="LED_GREEN ARD_D13" +        Type="PushPull" +        Level="Low" +        Speed="High" +        Resistor="Floating" +        Mode="Output" +        Alternate="0" /> +      <pin6 +        ID="ARD_D12" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="ARD_D11" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="ARD_D7" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="ARD_D8" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="ARD_D2" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="OTG_FS_DM" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Alternate" +        Alternate="10" /> +      <pin12 +        ID="OTG_FS_DP" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Alternate" +        Alternate="10" /> +      <pin13 +        ID="SWDIO" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Alternate" +        Alternate="0" /> +      <pin14 +        ID="SWCLK" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullDown" +        Mode="Alternate" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOA> +    <GPIOB> +      <pin0 +        ID="ARD_A3" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="SWO ARD_D3" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Alternate" +        Alternate="0" /> +      <pin4 +        ID="ARD_D5" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="ARD_D4" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="ARD_D10" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="ARD_D15 ARD_A5_ALT" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="ARD_D14 ARD_A4_ALT" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="ARD_D6" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOB> +    <GPIOC> +      <pin0 +        ID="ARD_A5" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin1 +        ID="ARD_A4" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Analog" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="ARD_D9" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="BUTTON" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOC> +    <GPIOD> +      <pin0 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOD> +    <GPIOE> +      <pin0 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOE> +    <GPIOF> +      <pin0 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOF> +    <GPIOG> +      <pin0 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOG> +    <GPIOH> +      <pin0 +        ID="OSC_IN" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="OSC_OUT" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="Floating" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOH> +    <GPIOI> +      <pin0 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin1 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin2 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin3 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin4 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin5 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin6 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin7 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin8 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin9 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin10 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin11 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin12 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin13 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin14 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +      <pin15 +        ID="" +        Type="PushPull" +        Level="High" +        Speed="Maximum" +        Resistor="PullUp" +        Mode="Input" +        Alternate="0" /> +    </GPIOI> +  </ports> +</board> diff --git a/os/hal/ports/STM32/STM32F4xx/hal_lld.c b/os/hal/ports/STM32/STM32F4xx/hal_lld.c index 7f02aaa30..bbfbad2b4 100644 --- a/os/hal/ports/STM32/STM32F4xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32F4xx/hal_lld.c @@ -114,9 +114,12 @@ static void hal_lld_backup_domain_init(void) {  void hal_lld_init(void) {
    /* Reset of all peripherals. AHB3 is not reseted because it could have
 -     been initialized in the board initialization file (board.c).*/
 +     been initialized in the board initialization file (board.c) and AHB2 is not
 +     present in STM32F410. */
    rccResetAHB1(~0);
 +#if !defined(STM32F410xx)
    rccResetAHB2(~0);
 +#endif
    rccResetAPB1(~RCC_APB1RSTR_PWRRST);
    rccResetAPB2(~0);
 diff --git a/os/hal/ports/STM32/STM32F4xx/hal_lld.h b/os/hal/ports/STM32/STM32F4xx/hal_lld.h index 1fa6159b9..90e00c520 100644 --- a/os/hal/ports/STM32/STM32F4xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F4xx/hal_lld.h @@ -98,6 +98,12 @@  #elif defined(STM32F401xE)
  #define PLATFORM_NAME           "STM32F401xE High Performance with DSP and FPU"
 +#elif defined(STM32F410Cx)
 +#define PLATFORM_NAME           "STM32F410Cx High Performance with DSP and FPU"
 +
 +#elif defined(STM32F410Rx)
 +#define PLATFORM_NAME           "STM32F410Rx High Performance with DSP and FPU"
 +
  #elif defined(STM32F411xE)
  #define PLATFORM_NAME           "STM32F411xE High Performance with DSP and FPU"
 @@ -252,6 +258,26 @@  #define STM32_SPII2S_MAX        42000000
  #endif
 +#if defined(STM32F410xx)
 +#define STM32_SYSCLK_MAX        100000000
 +#define STM32_HSECLK_MAX        26000000
 +#define STM32_HSECLK_BYP_MAX    50000000
 +#define STM32_HSECLK_MIN        4000000
 +#define STM32_HSECLK_BYP_MIN    1000000
 +#define STM32_LSECLK_MAX        32768
 +#define STM32_LSECLK_BYP_MAX    1000000
 +#define STM32_LSECLK_MIN        32768
 +#define STM32_PLLIN_MAX         2100000
 +#define STM32_PLLIN_MIN         950000
 +#define STM32_PLLVCO_MAX        432000000
 +#define STM32_PLLVCO_MIN        100000000
 +#define STM32_PLLOUT_MAX        100000000
 +#define STM32_PLLOUT_MIN        24000000
 +#define STM32_PCLK1_MAX         50000000
 +#define STM32_PCLK2_MAX         100000000
 +#define STM32_SPII2S_MAX        50000000
 +#endif
 +
  #if defined(STM32F411xx)
  #define STM32_SYSCLK_MAX        100000000
  #define STM32_HSECLK_MAX        26000000
 @@ -850,7 +876,7 @@  #error "invalid VDD voltage specified"
  #endif
 -#elif defined(STM32F411xx)
 +#elif defined(STM32F410xx) || defined(STM32F411xx)
  #if (STM32_VDD >= 270) && (STM32_VDD <= 360)
  #define STM32_0WS_THRESHOLD         30000000
  #define STM32_1WS_THRESHOLD         64000000
 @@ -1202,7 +1228,7 @@  #endif
  #define STM32_OVERDRIVE_REQUIRED    FALSE
 -#elif defined(STM32F411xx)
 +#elif defined(STM32F410xx) || defined(STM32F411xx)
  #if STM32_SYSCLK <= 64000000
  #define STM32_VOS                   STM32_VOS_SCALE3
  #elif STM32_SYSCLK <= 84000000
 diff --git a/os/hal/ports/STM32/STM32F4xx/stm32_registry.h b/os/hal/ports/STM32/STM32F4xx/stm32_registry.h index 78f389b38..ecff41099 100644 --- a/os/hal/ports/STM32/STM32F4xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32F4xx/stm32_registry.h @@ -49,6 +49,11 @@  #define STM32F401xx
  #define STM32F4XX
 +#elif defined(STM32F410Cx) || defined(STM32F410Rx)
 +#define STM32F410C_410Rx
 +#define STM32F410xx
 +#define STM32F4XX
 +
  #elif defined(STM32F411xE)
  #define STM32F411xx
  #define STM32F4XX
 @@ -1731,6 +1736,267 @@  #endif /* defined(STM32F401xx) */
  /*===========================================================================*/
 +/* STM32F410Cx, STM32F410Rx.                                                 */
 +/*===========================================================================*/
 +#if defined(STM32F410C_410Rx)
 +/* ADC attributes.*/
 +#define STM32_ADC_HANDLER                   Vector88
 +#define STM32_ADC_NUMBER                    18
 +
 +#define STM32_HAS_ADC1                      TRUE
 +#define STM32_ADC1_DMA_MSK                  (STM32_DMA_STREAM_ID_MSK(2, 0) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 4))
 +#define STM32_ADC1_DMA_CHN                  0x00000000
 +
 +#define STM32_HAS_ADC2                      FALSE
 +#define STM32_HAS_ADC3                      FALSE
 +#define STM32_HAS_ADC4                      FALSE
 +
 +#define STM32_HAS_SDADC1                    FALSE
 +#define STM32_HAS_SDADC2                    FALSE
 +#define STM32_HAS_SDADC3                    FALSE
 +
 +/* CAN attributes.*/
 +#define STM32_HAS_CAN1                      FALSE
 +#define STM32_HAS_CAN2                      FALSE
 +
 +/* DAC attributes.*/
 +#define STM32_HAS_DAC1_CH1                  TRUE
 +#define STM32_DAC1_CH1_DMA_MSK              (STM32_DMA_STREAM_ID_MSK(1, 5))
 +#define STM32_DAC1_CH1_DMA_CHN              0x00700000
 +
 +#define STM32_HAS_DAC1_CH2                  FALSE
 +#define STM32_HAS_DAC2_CH1                  FALSE
 +#define STM32_HAS_DAC2_CH2                  FALSE
 +
 +/* DMA attributes.*/
 +#define STM32_ADVANCED_DMA                  TRUE
 +#define STM32_DMA_CACHE_HANDLING            FALSE
 +
 +#define STM32_HAS_DMA1                      TRUE
 +#define STM32_DMA1_CH0_HANDLER              Vector6C
 +#define STM32_DMA1_CH1_HANDLER              Vector70
 +#define STM32_DMA1_CH2_HANDLER              Vector74
 +#define STM32_DMA1_CH3_HANDLER              Vector78
 +#define STM32_DMA1_CH4_HANDLER              Vector7C
 +#define STM32_DMA1_CH5_HANDLER              Vector80
 +#define STM32_DMA1_CH6_HANDLER              Vector84
 +#define STM32_DMA1_CH7_HANDLER              VectorFC
 +#define STM32_DMA1_CH0_NUMBER               11
 +#define STM32_DMA1_CH1_NUMBER               12
 +#define STM32_DMA1_CH2_NUMBER               13
 +#define STM32_DMA1_CH3_NUMBER               14
 +#define STM32_DMA1_CH4_NUMBER               15
 +#define STM32_DMA1_CH5_NUMBER               16
 +#define STM32_DMA1_CH6_NUMBER               17
 +#define STM32_DMA1_CH7_NUMBER               47
 +
 +#define STM32_HAS_DMA2                      TRUE
 +#define STM32_DMA2_CH0_HANDLER              Vector120
 +#define STM32_DMA2_CH1_HANDLER              Vector124
 +#define STM32_DMA2_CH2_HANDLER              Vector128
 +#define STM32_DMA2_CH3_HANDLER              Vector12C
 +#define STM32_DMA2_CH4_HANDLER              Vector130
 +#define STM32_DMA2_CH5_HANDLER              Vector150
 +#define STM32_DMA2_CH6_HANDLER              Vector154
 +#define STM32_DMA2_CH7_HANDLER              Vector158
 +#define STM32_DMA2_CH0_NUMBER               56
 +#define STM32_DMA2_CH1_NUMBER               57
 +#define STM32_DMA2_CH2_NUMBER               58
 +#define STM32_DMA2_CH3_NUMBER               59
 +#define STM32_DMA2_CH4_NUMBER               60
 +#define STM32_DMA2_CH5_NUMBER               68
 +#define STM32_DMA2_CH6_NUMBER               69
 +#define STM32_DMA2_CH7_NUMBER               70
 +
 +/* ETH attributes.*/
 +#define STM32_HAS_ETH                       FALSE
 +
 +/* EXTI attributes.*/
 +#define STM32_EXTI_NUM_LINES                23
 +#define STM32_EXTI_IMR_MASK                 0x00000000U
 +
 +/* GPIO attributes.*/
 +#define STM32_HAS_GPIOA                     TRUE
 +#define STM32_HAS_GPIOB                     TRUE
 +#define STM32_HAS_GPIOC                     TRUE
 +#define STM32_HAS_GPIOD                     FALSE
 +#define STM32_HAS_GPIOE                     FALSE
 +#define STM32_HAS_GPIOH                     TRUE
 +#define STM32_HAS_GPIOF                     FALSE
 +#define STM32_HAS_GPIOG                     FALSE
 +#define STM32_HAS_GPIOI                     FALSE
 +#define STM32_HAS_GPIOJ                     FALSE
 +#define STM32_HAS_GPIOK                     FALSE
 +#define STM32_GPIO_EN_MASK                  (RCC_AHB1ENR_GPIOAEN |          \
 +                                             RCC_AHB1ENR_GPIOBEN |          \
 +                                             RCC_AHB1ENR_GPIOCEN |          \
 +                                             RCC_AHB1ENR_GPIOHEN)
 +
 +/* I2C attributes.*/
 +#define STM32_HAS_I2C1                      TRUE
 +#define STM32_I2C1_RX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(1, 0) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 5))
 +#define STM32_I2C1_RX_DMA_CHN               0x00100001
 +#define STM32_I2C1_TX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(1, 7) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 6))
 +#define STM32_I2C1_TX_DMA_CHN               0x11000000
 +
 +#define STM32_HAS_I2C2                      TRUE
 +#define STM32_I2C2_RX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(1, 2) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 3))
 +#define STM32_I2C2_RX_DMA_CHN               0x00007700
 +#define STM32_I2C2_TX_DMA_MSK               STM32_DMA_STREAM_ID_MSK(1, 7)
 +#define STM32_I2C2_TX_DMA_CHN               0x70000000
 +
 +#define STM32_HAS_I2C3                      FALSE
 +
 +#define STM32_HAS_I2C4                      FALSE
 +#define STM32_I2C4_RX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(1, 0)) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 3))
 +#define STM32_I2C4_RX_DMA_CHN               0x00002007
 +#define STM32_I2C4_TX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(1, 7)) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 1))
 +#define STM32_I2C4_TX_DMA_CHN               0x00040020
 +
 +/* RTC attributes.*/
 +#define STM32_HAS_RTC                       TRUE
 +#define STM32_RTC_HAS_SUBSECONDS            TRUE
 +#define STM32_RTC_HAS_PERIODIC_WAKEUPS      TRUE
 +#define STM32_RTC_NUM_ALARMS                2
 +#define STM32_RTC_HAS_INTERRUPTS            FALSE
 +
 +/* SDIO attributes.*/
 +#define STM32_HAS_SDIO                      FALSE
 +
 +/* SPI attributes.*/
 +#define STM32_HAS_SPI1                      TRUE
 +#define STM32_SPI1_SUPPORTS_I2S             FALSE
 +#define STM32_SPI1_RX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(2, 0) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 2))
 +#define STM32_SPI1_RX_DMA_CHN               0x00000303
 +#define STM32_SPI1_TX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(2, 2) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 3))
 +#define STM32_SPI1_TX_DMA_CHN               0x00003200
 +
 +#define STM32_HAS_SPI2                      TRUE
 +#define STM32_SPI2_SUPPORTS_I2S             TRUE
 +#define STM32_SPI2_I2S_FULLDUPLEX           TRUE
 +#define STM32_SPI2_RX_DMA_MSK               STM32_DMA_STREAM_ID_MSK(1, 3)
 +#define STM32_SPI2_RX_DMA_CHN               0x00000000
 +#define STM32_SPI2_TX_DMA_MSK               STM32_DMA_STREAM_ID_MSK(1, 4)
 +#define STM32_SPI2_TX_DMA_CHN               0x00000000
 +
 +#define STM32_HAS_SPI5                      TRUE
 +#define STM32_SPI5_SUPPORTS_I2S             TRUE
 +#define STM32_SPI5_RX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(2, 3) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 5))
 +#define STM32_SPI5_RX_DMA_CHN               0x00702000
 +#define STM32_SPI5_TX_DMA_MSK               (STM32_DMA_STREAM_ID_MSK(2, 4) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 6))
 +#define STM32_SPI5_TX_DMA_CHN               0x07020000
 +
 +#define STM32_HAS_SPI3                      FALSE
 +#define STM32_HAS_SPI4                      FALSE
 +#define STM32_HAS_SPI6                      FALSE
 +
 +/* TIM attributes.*/
 +#define STM32_TIM_MAX_CHANNELS              4
 +
 +#define STM32_HAS_TIM1                      TRUE
 +#define STM32_TIM1_IS_32BITS                FALSE
 +#define STM32_TIM1_CHANNELS                 4
 +
 +#define STM32_HAS_TIM5                      TRUE
 +#define STM32_TIM5_IS_32BITS                TRUE
 +#define STM32_TIM5_CHANNELS                 4
 +
 +#define STM32_HAS_TIM6                      TRUE
 +#define STM32_TIM6_IS_32BITS                FALSE
 +#define STM32_TIM6_CHANNELS                 0
 +
 +#define STM32_HAS_TIM9                      TRUE
 +#define STM32_TIM9_IS_32BITS                FALSE
 +#define STM32_TIM9_CHANNELS                 2
 +
 +#define STM32_HAS_TIM11                     TRUE
 +#define STM32_TIM11_IS_32BITS               FALSE
 +#define STM32_TIM11_CHANNELS                1
 +
 +#define STM32_HAS_TIM2                      FALSE
 +#define STM32_HAS_TIM3                      FALSE
 +#define STM32_HAS_TIM4                      FALSE
 +#define STM32_HAS_TIM7                      FALSE
 +#define STM32_HAS_TIM8                      FALSE
 +#define STM32_HAS_TIM10                     FALSE
 +#define STM32_HAS_TIM12                     FALSE
 +#define STM32_HAS_TIM13                     FALSE
 +#define STM32_HAS_TIM14                     FALSE
 +#define STM32_HAS_TIM15                     FALSE
 +#define STM32_HAS_TIM16                     FALSE
 +#define STM32_HAS_TIM17                     FALSE
 +#define STM32_HAS_TIM18                     FALSE
 +#define STM32_HAS_TIM19                     FALSE
 +#define STM32_HAS_TIM20                     FALSE
 +#define STM32_HAS_TIM21                     FALSE
 +#define STM32_HAS_TIM22                     FALSE
 +
 +/* USART attributes.*/
 +#define STM32_HAS_USART1                    TRUE
 +#define STM32_USART1_RX_DMA_MSK             (STM32_DMA_STREAM_ID_MSK(2, 2) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 5))
 +#define STM32_USART1_RX_DMA_CHN             0x00400400
 +#define STM32_USART1_TX_DMA_MSK             STM32_DMA_STREAM_ID_MSK(2, 7)
 +#define STM32_USART1_TX_DMA_CHN             0x40000000
 +
 +#define STM32_HAS_USART2                    TRUE
 +#define STM32_USART2_RX_DMA_MSK             (STM32_DMA_STREAM_ID_MSK(1, 5) |\
 +                                             STM32_DMA_STREAM_ID_MSK(1, 7))
 +#define STM32_USART2_RX_DMA_CHN             0x60400000
 +#define STM32_USART2_TX_DMA_MSK             STM32_DMA_STREAM_ID_MSK(1, 6)
 +#define STM32_USART2_TX_DMA_CHN             0x04000000
 +
 +#define STM32_HAS_USART3                    FALSE
 +#define STM32_HAS_UART4                     FALSE
 +#define STM32_HAS_UART5                     FALSE
 +
 +#define STM32_HAS_USART6                    TRUE
 +#define STM32_USART6_RX_DMA_MSK             (STM32_DMA_STREAM_ID_MSK(2, 1) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 2))
 +#define STM32_USART6_RX_DMA_CHN             0x00000550
 +#define STM32_USART6_TX_DMA_MSK             (STM32_DMA_STREAM_ID_MSK(2, 6) |\
 +                                             STM32_DMA_STREAM_ID_MSK(2, 7))
 +#define STM32_USART6_TX_DMA_CHN             0x55000000
 +
 +#define STM32_HAS_UART7                     FALSE
 +#define STM32_HAS_UART8                     FALSE
 +#define STM32_HAS_LPUART1                   FALSE
 +
 +/* USB attributes.*/
 +#define STM32_HAS_USB                       FALSE
 +#define STM32_HAS_OTG1                      FALSE
 +#define STM32_HAS_OTG2                      FALSE
 +
 +/* IWDG attributes.*/
 +#define STM32_HAS_IWDG                      TRUE
 +#define STM32_IWDG_IS_WINDOWED              FALSE
 +
 +/* LTDC attributes.*/
 +#define STM32_HAS_LTDC                      FALSE
 +
 +/* DMA2D attributes.*/
 +#define STM32_HAS_DMA2D                     FALSE
 +
 +/* FSMC attributes.*/
 +#define STM32_HAS_FSMC                      FALSE
 +
 +/* CRC attributes.*/
 +#define STM32_HAS_CRC                       TRUE
 +#define STM32_CRC_PROGRAMMABLE              FALSE
 +
 +#endif /* defined(STM32F410C_410Rx) */
 +
 +/*===========================================================================*/
  /* STM32F411xE.                                                              */
  /*===========================================================================*/
  #if defined(STM32F411xx)
 | 
