From 9cf7536bf3e942e65d82952e44c3e903d51696b8 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 5 Aug 2012 09:30:51 +0000 Subject: [PATCH] git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4530 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- boards/ST_STM32F0_DISCOVERY/board.c | 52 +- boards/ST_STM32F0_DISCOVERY/board.h | 899 +++++++++++++----- boards/ST_STM32F0_DISCOVERY/board.mk | 4 +- boards/ST_STM32F0_DISCOVERY/cfg/board.chcfg | 11 + boards/ST_STM32F0_DISCOVERY/cfg/board.chxml | 665 +++++++++++++ readme.txt | 2 + .../config_wizard/META-INF/MANIFEST.MF | 2 +- .../boards/stm32f0xx/templates/board.h.ftl | 7 +- .../resources/gencfg/xml/stm32f0board.xml | 2 +- ...org.chibios.tools.eclipse.config_1.0.2.jar | Bin 1845778 -> 1845764 bytes 10 files changed, 1394 insertions(+), 250 deletions(-) create mode 100644 boards/ST_STM32F0_DISCOVERY/cfg/board.chcfg create mode 100644 boards/ST_STM32F0_DISCOVERY/cfg/board.chxml diff --git a/boards/ST_STM32F0_DISCOVERY/board.c b/boards/ST_STM32F0_DISCOVERY/board.c index 025050af4..97d3f80c9 100644 --- a/boards/ST_STM32F0_DISCOVERY/board.c +++ b/boards/ST_STM32F0_DISCOVERY/board.c @@ -21,34 +21,62 @@ #include "ch.h" #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. */ -#if HAL_USE_PAL || defined(__DOXYGEN__) const PALConfig pal_default_config = { - {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, - {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, - {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, - {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, - {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH} + {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, + VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, + {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, + VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, + {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, + VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, + {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, + VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, + {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, + VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, }; #endif -/* - * Early initialization code. - * This initialization must be performed just after stack setup and before - * any other initialization. +/** + * @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(); } -/* - * Board-specific initialization code. +#if HAL_USE_MMC_SPI || defined(__DOXYGEN__) +/** + * @brief MMC_SPI card detection. + */ +bool_t mmc_lld_is_card_inserted(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return TRUE; +} + +/** + * @brief MMC_SPI card write protection detection. + */ +bool_t 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/boards/ST_STM32F0_DISCOVERY/board.h b/boards/ST_STM32F0_DISCOVERY/board.h index 300821c14..fe34c8190 100644 --- a/boards/ST_STM32F0_DISCOVERY/board.h +++ b/boards/ST_STM32F0_DISCOVERY/board.h @@ -22,41 +22,30 @@ #define _BOARD_H_ /* - * Setup for STMicroelectronics STM32F0-Discovery board. + * Setup for ST STM32F0-Discovery board. */ /* * Board identifier. */ -#define BOARD_ST_STM32F0_DISCOVERY -#define BOARD_NAME "ST STM32F0-Discovery" +#define BOARD_BOARD_ST_STM32F0_DISCOVERY +#define BOARD_NAME "ST STM32F0-Discovery" + /* - * Board frequencies. - * NOTE: The both crystals are not fitted by default on the board but there - * the option to both mount an 8MHz HE crystal or drive HSE with an - * 8MHz clock from the on-board ST-Link. LSE can be optionally mounted - * too. + * Board oscillators-related settings. + * NOTE: LSE not fitted. + * NOTE: HSE not fitted. */ -#if defined(DISCOVERY_HSE_MOUNTED) && defined(DISCOVERY_HSE_DRIVEN) -#error "HSE OSC-IN cannot be both crystal equipped and externally driven" +#if !defined(STM32_LSECLK) +#define STM32_LSECLK 0 #endif -#if defined(DISCOVERY_LSE_MOUNTED) -#define STM32_LSECLK 32768 -#else -#define STM32_LSECLK 0 +#if !defined(STM32_HSECLK) +#define STM32_HSECLK 0 #endif -#if defined(DISCOVERY_HSE_MOUNTED) || defined(DISCOVERY_HSE_DRIVEN) -#define STM32_HSECLK 8000000 -#else -#define STM32_HSECLK 0 -#endif - -#if defined(DISCOVERY_HSE_DRIVEN) #define STM32_HSE_BYPASS -#endif /* * MCU type as defined in the ST header file stm32f0xx.h. @@ -66,10 +55,90 @@ /* * IO pins assignments. */ -#define GPIOA_BUTTON 0 +#define GPIOA_BUTTON 0 +#define GPIOA_PIN1 1 +#define GPIOA_PIN2 2 +#define GPIOA_PIN3 3 +#define GPIOA_PIN4 4 +#define GPIOA_PIN5 5 +#define GPIOA_PIN6 6 +#define GPIOA_PIN7 7 +#define GPIOA_PIN8 8 +#define GPIOA_PIN9 9 +#define GPIOA_PIN10 10 +#define GPIOA_PIN11 11 +#define GPIOA_PIN12 12 +#define GPIOA_SWDAT 13 +#define GPIOA_SWCLK 14 +#define GPIOA_PIN15 15 -#define GPIOC_LED4 8 -#define GPIOC_LED3 9 +#define GPIOB_PIN0 0 +#define GPIOB_PIN1 1 +#define GPIOB_PIN2 2 +#define GPIOB_PIN3 3 +#define GPIOB_PIN4 4 +#define GPIOB_PIN5 5 +#define GPIOB_PIN6 6 +#define GPIOB_PIN7 7 +#define GPIOB_PIN8 8 +#define GPIOB_PIN9 9 +#define GPIOB_PIN10 10 +#define GPIOB_PIN11 11 +#define GPIOB_PIN12 12 +#define GPIOB_PIN13 13 +#define GPIOB_PIN14 14 +#define GPIOB_PIN15 15 + +#define GPIOC_PIN0 0 +#define GPIOC_PIN1 1 +#define GPIOC_PIN2 2 +#define GPIOC_PIN3 3 +#define GPIOC_PIN4 4 +#define GPIOC_PIN5 5 +#define GPIOC_PIN6 6 +#define GPIOC_PIN7 7 +#define GPIOC_LED4 8 +#define GPIOC_LED3 9 +#define GPIOC_PIN10 10 +#define GPIOC_PIN11 11 +#define GPIOC_PIN12 12 +#define GPIOC_PIN13 13 +#define GPIOC_OSC32_IN 14 +#define GPIOC_OSC32_OUT 15 + +#define GPIOD_PIN0 0 +#define GPIOD_PIN1 1 +#define GPIOD_PIN2 2 +#define GPIOD_PIN3 3 +#define GPIOD_PIN4 4 +#define GPIOD_PIN5 5 +#define GPIOD_PIN6 6 +#define GPIOD_PIN7 7 +#define GPIOD_PIN8 8 +#define GPIOD_PIN9 9 +#define GPIOD_PIN10 10 +#define GPIOD_PIN11 11 +#define GPIOD_PIN12 12 +#define GPIOD_PIN13 13 +#define GPIOD_PIN14 14 +#define GPIOD_PIN15 15 + +#define GPIOF_OSC_IN 0 +#define GPIOF_OSC_OUT 1 +#define GPIOF_PIN2 2 +#define GPIOF_PIN3 3 +#define GPIOF_PIN4 4 +#define GPIOF_PIN5 5 +#define GPIOF_PIN6 6 +#define GPIOF_PIN7 7 +#define GPIOF_PIN8 8 +#define GPIOF_PIN9 9 +#define GPIOF_PIN10 10 +#define GPIOF_PIN11 11 +#define GPIOF_PIN12 12 +#define GPIOF_PIN13 13 +#define GPIOF_PIN14 14 +#define GPIOF_PIN15 15 /* * I/O ports initial setup, this configuration is established soon after reset @@ -80,233 +149,603 @@ #define PIN_MODE_OUTPUT(n) (1U << ((n) * 2)) #define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2)) #define PIN_MODE_ANALOG(n) (3U << ((n) * 2)) +#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_400K(n) (0U << ((n) * 2)) -#define PIN_OSPEED_2M(n) (1U << ((n) * 2)) -#define PIN_OSPEED_10M(n) (2U << ((n) * 2)) +#define PIN_OSPEED_2M(n) (0U << ((n) * 2)) +#define PIN_OSPEED_10M(n) (1U << ((n) * 2)) #define PIN_OSPEED_40M(n) (3U << ((n) * 2)) -#define PIN_PUDR_FLOATING(n) (0U << ((n) * 2)) -#define PIN_PUDR_PULLUP(n) (1U << ((n) * 2)) -#define PIN_PUDR_PULLDOWN(n) (2U << ((n) * 2)) +#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2)) +#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2)) +#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2)) #define PIN_AFIO_AF(n, v) ((v##U) << ((n % 8) * 4)) /* - * Port A setup. - * All input with pull-up except: - * PA0 - GPIOA_BUTTON (input floating). - * PA13 - JTMS/SWDAT (alternate 0). - * PA14 - JTCK/SWCLK (alternate 0). + * GPIOA setup: + * + * PA0 - BUTTON (input floating). + * PA1 - PIN1 (input pullup). + * PA2 - PIN2 (input pullup). + * PA3 - PIN3 (input pullup). + * PA4 - PIN4 (input pullup). + * PA5 - PIN5 (input pullup). + * PA6 - PIN6 (input pullup). + * PA7 - PIN7 (input pullup). + * PA8 - PIN8 (input pullup). + * PA9 - PIN9 (input pullup). + * PA10 - PIN10 (input pullup). + * PA11 - PIN11 (input pullup). + * PA12 - PIN12 (input pullup). + * PA13 - SWDAT (alternate 0). + * PA14 - SWCLK (alternate 0). + * PA15 - PIN15 (input pullup). */ #define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \ - PIN_MODE_INPUT(1) | \ - PIN_MODE_INPUT(2) | \ - PIN_MODE_INPUT(3) | \ - PIN_MODE_INPUT(4) | \ - PIN_MODE_INPUT(5) | \ - PIN_MODE_INPUT(6) | \ - PIN_MODE_INPUT(7) | \ - PIN_MODE_INPUT(8) | \ - PIN_MODE_INPUT(9) | \ - PIN_MODE_INPUT(10) | \ - PIN_MODE_INPUT(11) | \ - PIN_MODE_INPUT(12) | \ - PIN_MODE_ALTERNATE(13) | \ - PIN_MODE_ALTERNATE(14) | \ - PIN_MODE_INPUT(15)) -#define VAL_GPIOA_OTYPER 0x00000000 -#define VAL_GPIOA_OSPEEDR 0xFFFFFFFF -#define VAL_GPIOA_PUPDR (PIN_PUDR_FLOATING(GPIOA_BUTTON) | \ - PIN_PUDR_PULLUP(1) | \ - PIN_PUDR_PULLUP(2) | \ - PIN_PUDR_PULLUP(3) | \ - PIN_PUDR_PULLUP(4) | \ - PIN_PUDR_PULLUP(5) | \ - PIN_PUDR_PULLUP(6) | \ - PIN_PUDR_PULLUP(7) | \ - PIN_PUDR_PULLUP(8) | \ - PIN_PUDR_PULLUP(9) | \ - PIN_PUDR_PULLUP(10) | \ - PIN_PUDR_PULLUP(11) | \ - PIN_PUDR_PULLUP(12) | \ - PIN_PUDR_FLOATING(13) | \ - PIN_PUDR_FLOATING(14) | \ - PIN_PUDR_PULLUP(15)) -#define VAL_GPIOA_ODR 0xFFFFFFFF -#define VAL_GPIOA_AFRL 0x00000000 -#define VAL_GPIOA_AFRH 0x00000000 + PIN_MODE_INPUT(GPIOA_PIN1) | \ + PIN_MODE_INPUT(GPIOA_PIN2) | \ + PIN_MODE_INPUT(GPIOA_PIN3) | \ + PIN_MODE_INPUT(GPIOA_PIN4) | \ + PIN_MODE_INPUT(GPIOA_PIN5) | \ + PIN_MODE_INPUT(GPIOA_PIN6) | \ + PIN_MODE_INPUT(GPIOA_PIN7) | \ + PIN_MODE_INPUT(GPIOA_PIN8) | \ + PIN_MODE_INPUT(GPIOA_PIN9) | \ + PIN_MODE_INPUT(GPIOA_PIN10) | \ + PIN_MODE_INPUT(GPIOA_PIN11) | \ + PIN_MODE_INPUT(GPIOA_PIN12) | \ + PIN_MODE_ALTERNATE(GPIOA_SWDAT) | \ + PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \ + PIN_MODE_INPUT(GPIOA_PIN15)) +#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWDAT) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN15)) +#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_2M(GPIOA_BUTTON) | \ + PIN_OSPEED_2M(GPIOA_PIN1) | \ + PIN_OSPEED_2M(GPIOA_PIN2) | \ + PIN_OSPEED_2M(GPIOA_PIN3) | \ + PIN_OSPEED_2M(GPIOA_PIN4) | \ + PIN_OSPEED_2M(GPIOA_PIN5) | \ + PIN_OSPEED_2M(GPIOA_PIN6) | \ + PIN_OSPEED_2M(GPIOA_PIN7) | \ + PIN_OSPEED_2M(GPIOA_PIN8) | \ + PIN_OSPEED_2M(GPIOA_PIN9) | \ + PIN_OSPEED_2M(GPIOA_PIN10) | \ + PIN_OSPEED_2M(GPIOA_PIN11) | \ + PIN_OSPEED_2M(GPIOA_PIN12) | \ + PIN_OSPEED_40M(GPIOA_SWDAT) | \ + PIN_OSPEED_40M(GPIOA_SWCLK) | \ + PIN_OSPEED_40M(GPIOA_PIN15)) +#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN2) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN3) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN4) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN5) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN6) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN7) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN8) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN9) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN10) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN11) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN12) | \ + PIN_PUPDR_PULLUP(GPIOA_SWDAT) | \ + PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \ + PIN_PUPDR_PULLUP(GPIOA_PIN15)) +#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_BUTTON) | \ + PIN_ODR_HIGH(GPIOA_PIN1) | \ + PIN_ODR_HIGH(GPIOA_PIN2) | \ + PIN_ODR_HIGH(GPIOA_PIN3) | \ + PIN_ODR_HIGH(GPIOA_PIN4) | \ + PIN_ODR_HIGH(GPIOA_PIN5) | \ + PIN_ODR_HIGH(GPIOA_PIN6) | \ + PIN_ODR_HIGH(GPIOA_PIN7) | \ + PIN_ODR_HIGH(GPIOA_PIN8) | \ + PIN_ODR_HIGH(GPIOA_PIN9) | \ + PIN_ODR_HIGH(GPIOA_PIN10) | \ + PIN_ODR_HIGH(GPIOA_PIN11) | \ + PIN_ODR_HIGH(GPIOA_PIN12) | \ + PIN_ODR_HIGH(GPIOA_SWDAT) | \ + PIN_ODR_HIGH(GPIOA_SWCLK) | \ + PIN_ODR_HIGH(GPIOA_PIN15)) +#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_BUTTON, 0) | \ + PIN_AFIO_AF(GPIOA_PIN1, 0) | \ + PIN_AFIO_AF(GPIOA_PIN2, 0) | \ + PIN_AFIO_AF(GPIOA_PIN3, 0) | \ + PIN_AFIO_AF(GPIOA_PIN4, 0) | \ + PIN_AFIO_AF(GPIOA_PIN5, 0) | \ + PIN_AFIO_AF(GPIOA_PIN6, 0) | \ + PIN_AFIO_AF(GPIOA_PIN7, 0)) +#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \ + PIN_AFIO_AF(GPIOA_PIN9, 0) | \ + PIN_AFIO_AF(GPIOA_PIN10, 0) | \ + PIN_AFIO_AF(GPIOA_PIN11, 0) | \ + PIN_AFIO_AF(GPIOA_PIN12, 0) | \ + PIN_AFIO_AF(GPIOA_SWDAT, 0) | \ + PIN_AFIO_AF(GPIOA_SWCLK, 0) | \ + PIN_AFIO_AF(GPIOA_PIN15, 0)) /* - * Port B setup. - * All input with pull-up except: + * GPIOB setup: + * + * PB0 - PIN0 (input pullup). + * PB1 - PIN1 (input pullup). + * PB2 - PIN2 (input pullup). + * PB3 - PIN3 (input pullup). + * PB4 - PIN4 (input pullup). + * PB5 - PIN5 (input pullup). + * PB6 - PIN6 (input pullup). + * PB7 - PIN7 (input pullup). + * PB8 - PIN8 (input pullup). + * PB9 - PIN9 (input pullup). + * PB10 - PIN10 (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_INPUT(0) | \ - PIN_MODE_INPUT(1) | \ - PIN_MODE_INPUT(2) | \ - PIN_MODE_INPUT(3) | \ - PIN_MODE_INPUT(4) | \ - PIN_MODE_INPUT(5) | \ - PIN_MODE_INPUT(6) | \ - PIN_MODE_INPUT(7) | \ - PIN_MODE_INPUT(8) | \ - PIN_MODE_INPUT(9) | \ - PIN_MODE_INPUT(10) | \ - PIN_MODE_INPUT(11) | \ - PIN_MODE_INPUT(12) | \ - PIN_MODE_INPUT(13) | \ - PIN_MODE_INPUT(14) | \ - PIN_MODE_INPUT(15)) -#define VAL_GPIOB_OTYPER 0x00000000 -#define VAL_GPIOB_OSPEEDR 0xFFFFFFFF -#define VAL_GPIOB_PUPDR (PIN_PUDR_PULLUP(0) | \ - PIN_PUDR_PULLUP(1) | \ - PIN_PUDR_PULLUP(2) | \ - PIN_PUDR_PULLUP(3) | \ - PIN_PUDR_PULLUP(4) | \ - PIN_PUDR_PULLUP(5) | \ - PIN_PUDR_PULLUP(6) | \ - PIN_PUDR_PULLUP(7) | \ - PIN_PUDR_PULLUP(8) | \ - PIN_PUDR_PULLUP(9) | \ - PIN_PUDR_PULLUP(10) | \ - PIN_PUDR_PULLUP(11) | \ - PIN_PUDR_PULLUP(12) | \ - PIN_PUDR_PULLUP(13) | \ - PIN_PUDR_PULLUP(14) | \ - PIN_PUDR_PULLUP(15)) -#define VAL_GPIOB_ODR 0xFFFFFFFF -#define VAL_GPIOB_AFRL 0x00000000 -#define VAL_GPIOB_AFRH 0x00000000 +#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \ + PIN_MODE_INPUT(GPIOB_PIN1) | \ + PIN_MODE_INPUT(GPIOB_PIN2) | \ + PIN_MODE_INPUT(GPIOB_PIN3) | \ + PIN_MODE_INPUT(GPIOB_PIN4) | \ + PIN_MODE_INPUT(GPIOB_PIN5) | \ + PIN_MODE_INPUT(GPIOB_PIN6) | \ + PIN_MODE_INPUT(GPIOB_PIN7) | \ + PIN_MODE_INPUT(GPIOB_PIN8) | \ + PIN_MODE_INPUT(GPIOB_PIN9) | \ + PIN_MODE_INPUT(GPIOB_PIN10) | \ + 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_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \ + 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_2M(GPIOB_PIN0) | \ + PIN_OSPEED_2M(GPIOB_PIN1) | \ + PIN_OSPEED_40M(GPIOB_PIN2) | \ + PIN_OSPEED_40M(GPIOB_PIN3) | \ + PIN_OSPEED_40M(GPIOB_PIN4) | \ + PIN_OSPEED_2M(GPIOB_PIN5) | \ + PIN_OSPEED_2M(GPIOB_PIN6) | \ + PIN_OSPEED_2M(GPIOB_PIN7) | \ + PIN_OSPEED_2M(GPIOB_PIN8) | \ + PIN_OSPEED_2M(GPIOB_PIN9) | \ + PIN_OSPEED_2M(GPIOB_PIN10) | \ + PIN_OSPEED_2M(GPIOB_PIN11) | \ + PIN_OSPEED_2M(GPIOB_PIN12) | \ + PIN_OSPEED_2M(GPIOB_PIN13) | \ + PIN_OSPEED_2M(GPIOB_PIN14) | \ + PIN_OSPEED_2M(GPIOB_PIN15)) +#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN1) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN2) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN3) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN4) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN5) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN6) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN7) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN8) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN9) | \ + PIN_PUPDR_PULLUP(GPIOB_PIN10) | \ + 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_PIN0) | \ + PIN_ODR_HIGH(GPIOB_PIN1) | \ + PIN_ODR_HIGH(GPIOB_PIN2) | \ + PIN_ODR_HIGH(GPIOB_PIN3) | \ + PIN_ODR_HIGH(GPIOB_PIN4) | \ + PIN_ODR_HIGH(GPIOB_PIN5) | \ + PIN_ODR_HIGH(GPIOB_PIN6) | \ + PIN_ODR_HIGH(GPIOB_PIN7) | \ + PIN_ODR_HIGH(GPIOB_PIN8) | \ + PIN_ODR_HIGH(GPIOB_PIN9) | \ + PIN_ODR_HIGH(GPIOB_PIN10) | \ + 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_PIN0, 0) | \ + PIN_AFIO_AF(GPIOB_PIN1, 0) | \ + PIN_AFIO_AF(GPIOB_PIN2, 0) | \ + PIN_AFIO_AF(GPIOB_PIN3, 0) | \ + PIN_AFIO_AF(GPIOB_PIN4, 0) | \ + PIN_AFIO_AF(GPIOB_PIN5, 0) | \ + PIN_AFIO_AF(GPIOB_PIN6, 0) | \ + PIN_AFIO_AF(GPIOB_PIN7, 0)) +#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \ + PIN_AFIO_AF(GPIOB_PIN9, 0) | \ + PIN_AFIO_AF(GPIOB_PIN10, 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)) /* - * Port C setup. - * All input with pull-up except: - * PC8 - GPIOC_LED4 (output push-pull). - * PC9 - GPIOC_LED3 (output push-pull). - * PC13 - OSC32_OUT (input floating). - * PC14 - OSC32_IN (input floating). + * GPIOC setup: + * + * PC0 - PIN0 (input pullup). + * PC1 - PIN1 (input pullup). + * PC2 - PIN2 (input pullup). + * PC3 - PIN3 (input pullup). + * PC4 - PIN4 (input pullup). + * PC5 - PIN5 (input pullup). + * PC6 - PIN6 (input pullup). + * PC7 - PIN7 (input pullup). + * PC8 - LED4 (output pushpull maximum). + * PC9 - LED3 (output pushpull maximum). + * PC10 - PIN10 (input pullup). + * PC11 - PIN11 (input pullup). + * PC12 - PIN12 (input pullup). + * PC13 - PIN13 (input pullup). + * PC14 - OSC32_IN (input floating). + * PC15 - OSC32_OUT (input floating). */ -#define VAL_GPIOC_MODER (PIN_MODE_INPUT(0) | \ - PIN_MODE_INPUT(1) | \ - PIN_MODE_INPUT(2) | \ - PIN_MODE_INPUT(3) | \ - PIN_MODE_INPUT(4) | \ - PIN_MODE_INPUT(5) | \ - PIN_MODE_INPUT(6) | \ - PIN_MODE_INPUT(7) | \ +#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \ + PIN_MODE_INPUT(GPIOC_PIN1) | \ + 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_PIN7) | \ PIN_MODE_OUTPUT(GPIOC_LED4) | \ PIN_MODE_OUTPUT(GPIOC_LED3) | \ - PIN_MODE_INPUT(10) | \ - PIN_MODE_INPUT(11) | \ - PIN_MODE_INPUT(12) | \ - PIN_MODE_INPUT(13) | \ - PIN_MODE_INPUT(14) | \ - PIN_MODE_INPUT(15)) -#define VAL_GPIOC_OTYPER 0x00000000 -#define VAL_GPIOC_OSPEEDR 0xFFFFFFFF -#define VAL_GPIOC_PUPDR (PIN_PUDR_PULLUP(0) | \ - PIN_PUDR_PULLUP(1) | \ - PIN_PUDR_PULLUP(2) | \ - PIN_PUDR_PULLUP(3) | \ - PIN_PUDR_PULLUP(4) | \ - PIN_PUDR_PULLUP(5) | \ - PIN_PUDR_PULLUP(6) | \ - PIN_PUDR_PULLUP(7) | \ - PIN_PUDR_FLOATING(GPIOC_LED4) | \ - PIN_PUDR_FLOATING(GPIOC_LED3) | \ - PIN_PUDR_PULLUP(10) | \ - PIN_PUDR_PULLUP(11) | \ - PIN_PUDR_PULLUP(12) | \ - PIN_PUDR_PULLUP(13) | \ - PIN_PUDR_FLOATING(14) | \ - PIN_PUDR_FLOATING(15)) -#define VAL_GPIOC_ODR 0xFFFFFCFF -#define VAL_GPIOC_AFRL 0x00000000 -#define VAL_GPIOC_AFRH 0x00000000 + PIN_MODE_INPUT(GPIOC_PIN10) | \ + PIN_MODE_INPUT(GPIOC_PIN11) | \ + PIN_MODE_INPUT(GPIOC_PIN12) | \ + PIN_MODE_INPUT(GPIOC_PIN13) | \ + PIN_MODE_INPUT(GPIOC_OSC32_IN) | \ + PIN_MODE_INPUT(GPIOC_OSC32_OUT)) +#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \ + 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_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOC_LED4) | \ + PIN_OTYPE_PUSHPULL(GPIOC_LED3) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) | \ + PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT)) +#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_2M(GPIOC_PIN0) | \ + PIN_OSPEED_2M(GPIOC_PIN1) | \ + PIN_OSPEED_2M(GPIOC_PIN2) | \ + PIN_OSPEED_2M(GPIOC_PIN3) | \ + PIN_OSPEED_2M(GPIOC_PIN4) | \ + PIN_OSPEED_2M(GPIOC_PIN5) | \ + PIN_OSPEED_2M(GPIOC_PIN6) | \ + PIN_OSPEED_2M(GPIOC_PIN7) | \ + PIN_OSPEED_40M(GPIOC_LED4) | \ + PIN_OSPEED_40M(GPIOC_LED3) | \ + PIN_OSPEED_2M(GPIOC_PIN10) | \ + PIN_OSPEED_2M(GPIOC_PIN11) | \ + PIN_OSPEED_2M(GPIOC_PIN12) | \ + PIN_OSPEED_2M(GPIOC_PIN13) | \ + PIN_OSPEED_40M(GPIOC_OSC32_IN) | \ + PIN_OSPEED_40M(GPIOC_OSC32_OUT)) +#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \ + PIN_PUPDR_PULLUP(GPIOC_PIN1) | \ + 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_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOC_LED4) | \ + PIN_PUPDR_FLOATING(GPIOC_LED3) | \ + PIN_PUPDR_PULLUP(GPIOC_PIN10) | \ + PIN_PUPDR_PULLUP(GPIOC_PIN11) | \ + PIN_PUPDR_PULLUP(GPIOC_PIN12) | \ + PIN_PUPDR_PULLUP(GPIOC_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) | \ + PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT)) +#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \ + PIN_ODR_HIGH(GPIOC_PIN1) | \ + 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_PIN7) | \ + PIN_ODR_LOW(GPIOC_LED4) | \ + PIN_ODR_LOW(GPIOC_LED3) | \ + PIN_ODR_HIGH(GPIOC_PIN10) | \ + PIN_ODR_HIGH(GPIOC_PIN11) | \ + PIN_ODR_HIGH(GPIOC_PIN12) | \ + PIN_ODR_HIGH(GPIOC_PIN13) | \ + PIN_ODR_HIGH(GPIOC_OSC32_IN) | \ + PIN_ODR_HIGH(GPIOC_OSC32_OUT)) +#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \ + PIN_AFIO_AF(GPIOC_PIN1, 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_PIN7, 0)) +#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_LED4, 0) | \ + PIN_AFIO_AF(GPIOC_LED3, 0) | \ + PIN_AFIO_AF(GPIOC_PIN10, 0) | \ + PIN_AFIO_AF(GPIOC_PIN11, 0) | \ + PIN_AFIO_AF(GPIOC_PIN12, 0) | \ + PIN_AFIO_AF(GPIOC_PIN13, 0) | \ + PIN_AFIO_AF(GPIOC_OSC32_IN, 0) | \ + PIN_AFIO_AF(GPIOC_OSC32_OUT, 0)) /* - * Port D setup. - * All input with pull-up. + * 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(0) | \ - PIN_MODE_INPUT(1) | \ - PIN_MODE_INPUT(2) | \ - PIN_MODE_INPUT(3) | \ - PIN_MODE_INPUT(4) | \ - PIN_MODE_INPUT(5) | \ - PIN_MODE_INPUT(6) | \ - PIN_MODE_INPUT(7) | \ - PIN_MODE_INPUT(8) | \ - PIN_MODE_INPUT(9) | \ - PIN_MODE_INPUT(10) | \ - PIN_MODE_INPUT(11) | \ - PIN_MODE_INPUT(12) | \ - PIN_MODE_INPUT(13) | \ - PIN_MODE_INPUT(14) | \ - PIN_MODE_INPUT(15)) -#define VAL_GPIOD_OTYPER 0x00000000 -#define VAL_GPIOD_OSPEEDR 0xFFFFFFFF -#define VAL_GPIOD_PUPDR (PIN_PUDR_PULLUP(0) | \ - PIN_PUDR_PULLUP(1) | \ - PIN_PUDR_PULLUP(2) | \ - PIN_PUDR_PULLUP(3) | \ - PIN_PUDR_PULLUP(4) | \ - PIN_PUDR_PULLUP(5) | \ - PIN_PUDR_PULLUP(6) | \ - PIN_PUDR_PULLUP(7) | \ - PIN_PUDR_PULLUP(8) | \ - PIN_PUDR_PULLUP(9) | \ - PIN_PUDR_PULLUP(10) | \ - PIN_PUDR_PULLUP(11) | \ - PIN_PUDR_PULLUP(12) | \ - PIN_PUDR_PULLUP(13) | \ - PIN_PUDR_PULLUP(14) | \ - PIN_PUDR_PULLUP(15)) -#define VAL_GPIOD_ODR 0xFFFFFFFF -#define VAL_GPIOD_AFRL 0x00000000 -#define VAL_GPIOD_AFRH 0x00000000 +#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_2M(GPIOD_PIN0) | \ + PIN_OSPEED_2M(GPIOD_PIN1) | \ + PIN_OSPEED_2M(GPIOD_PIN2) | \ + PIN_OSPEED_2M(GPIOD_PIN3) | \ + PIN_OSPEED_2M(GPIOD_PIN4) | \ + PIN_OSPEED_2M(GPIOD_PIN5) | \ + PIN_OSPEED_2M(GPIOD_PIN6) | \ + PIN_OSPEED_2M(GPIOD_PIN7) | \ + PIN_OSPEED_2M(GPIOD_PIN8) | \ + PIN_OSPEED_2M(GPIOD_PIN9) | \ + PIN_OSPEED_2M(GPIOD_PIN10) | \ + PIN_OSPEED_2M(GPIOD_PIN11) | \ + PIN_OSPEED_2M(GPIOD_PIN12) | \ + PIN_OSPEED_2M(GPIOD_PIN13) | \ + PIN_OSPEED_2M(GPIOD_PIN14) | \ + PIN_OSPEED_2M(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)) /* - * Port F setup. - * All input with pull-up. + * GPIOF setup: + * + * PF0 - OSC_IN (input floating). + * PF1 - OSC_OUT (input floating). + * 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(0) | \ - PIN_MODE_INPUT(1) | \ - PIN_MODE_INPUT(2) | \ - PIN_MODE_INPUT(3) | \ - PIN_MODE_INPUT(4) | \ - PIN_MODE_INPUT(5) | \ - PIN_MODE_INPUT(6) | \ - PIN_MODE_INPUT(7) | \ - PIN_MODE_INPUT(8) | \ - PIN_MODE_INPUT(9) | \ - PIN_MODE_INPUT(10) | \ - PIN_MODE_INPUT(11) | \ - PIN_MODE_INPUT(12) | \ - PIN_MODE_INPUT(13) | \ - PIN_MODE_INPUT(14) | \ - PIN_MODE_INPUT(15)) -#define VAL_GPIOF_OTYPER 0x00000000 -#define VAL_GPIOF_OSPEEDR 0xFFFFFFFF -#define VAL_GPIOF_PUPDR (PIN_PUDR_PULLUP(0) | \ - PIN_PUDR_PULLUP(1) | \ - PIN_PUDR_PULLUP(2) | \ - PIN_PUDR_PULLUP(3) | \ - PIN_PUDR_PULLUP(4) | \ - PIN_PUDR_PULLUP(5) | \ - PIN_PUDR_PULLUP(6) | \ - PIN_PUDR_PULLUP(7) | \ - PIN_PUDR_PULLUP(8) | \ - PIN_PUDR_PULLUP(9) | \ - PIN_PUDR_PULLUP(10) | \ - PIN_PUDR_PULLUP(11) | \ - PIN_PUDR_PULLUP(12) | \ - PIN_PUDR_PULLUP(13) | \ - PIN_PUDR_PULLUP(14) | \ - PIN_PUDR_PULLUP(15)) -#define VAL_GPIOF_ODR 0xFFFFFFFF -#define VAL_GPIOF_AFRL 0x00000000 -#define VAL_GPIOF_AFRH 0x00000000 +#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_OSC_IN) | \ + PIN_MODE_INPUT(GPIOF_OSC_OUT) | \ + 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_OSC_IN) | \ + PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) | \ + 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_2M(GPIOF_OSC_IN) | \ + PIN_OSPEED_2M(GPIOF_OSC_OUT) | \ + PIN_OSPEED_2M(GPIOF_PIN2) | \ + PIN_OSPEED_2M(GPIOF_PIN3) | \ + PIN_OSPEED_2M(GPIOF_PIN4) | \ + PIN_OSPEED_2M(GPIOF_PIN5) | \ + PIN_OSPEED_2M(GPIOF_PIN6) | \ + PIN_OSPEED_2M(GPIOF_PIN7) | \ + PIN_OSPEED_2M(GPIOF_PIN8) | \ + PIN_OSPEED_2M(GPIOF_PIN9) | \ + PIN_OSPEED_2M(GPIOF_PIN10) | \ + PIN_OSPEED_2M(GPIOF_PIN11) | \ + PIN_OSPEED_2M(GPIOF_PIN12) | \ + PIN_OSPEED_2M(GPIOF_PIN13) | \ + PIN_OSPEED_2M(GPIOF_PIN14) | \ + PIN_OSPEED_2M(GPIOF_PIN15)) +#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) | \ + PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) | \ + 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_OSC_IN) | \ + PIN_ODR_HIGH(GPIOF_OSC_OUT) | \ + 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_OSC_IN, 0) | \ + PIN_AFIO_AF(GPIOF_OSC_OUT, 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)) + #if !defined(_FROM_ASM_) #ifdef __cplusplus diff --git a/boards/ST_STM32F0_DISCOVERY/board.mk b/boards/ST_STM32F0_DISCOVERY/board.mk index 144ae4963..b01198769 100644 --- a/boards/ST_STM32F0_DISCOVERY/board.mk +++ b/boards/ST_STM32F0_DISCOVERY/board.mk @@ -1,5 +1,5 @@ # List of all the board related files. -BOARDSRC = ${CHIBIOS}/boards/ST_STM32F0_DISCOVERY/board.c +BOARDSRC = ${CHIBIOS}/boards/BOARD_ST_STM32F0_DISCOVERY/board.c # Required include directories -BOARDINC = ${CHIBIOS}/boards/ST_STM32F0_DISCOVERY +BOARDINC = ${CHIBIOS}/boards/BOARD_ST_STM32F0_DISCOVERY diff --git a/boards/ST_STM32F0_DISCOVERY/cfg/board.chcfg b/boards/ST_STM32F0_DISCOVERY/cfg/board.chcfg new file mode 100644 index 000000000..11e9fa54e --- /dev/null +++ b/boards/ST_STM32F0_DISCOVERY/cfg/board.chcfg @@ -0,0 +1,11 @@ +# Automatically generated configuration project file. + +# Templates path in the configuration plugin resources, do not modify. +source=resources/gencfg/processors/boards/stm32f0xx/templates + +# XML configuration data file path relative to this configuration file. +xmlfile=board.chxml + +# Output directory path relative to directory containing this configuration +# file. +output=.. diff --git a/boards/ST_STM32F0_DISCOVERY/cfg/board.chxml b/boards/ST_STM32F0_DISCOVERY/cfg/board.chxml new file mode 100644 index 000000000..6679b29eb --- /dev/null +++ b/boards/ST_STM32F0_DISCOVERY/cfg/board.chxml @@ -0,0 +1,665 @@ + + + + ST STM32F0-Discovery + BOARD_ST_STM32F0_DISCOVERY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/readme.txt b/readme.txt index 870d22af9..d4cc72f3e 100644 --- a/readme.txt +++ b/readme.txt @@ -162,6 +162,8 @@ 3484947)(backported to 2.4.1). - FIX: Fixed various minor documentation errors (bug 3484942)(backported to 2.4.1). +- NEW: Added configuration wizard plugin under ./tools/eclipse/plugins. This + first version is able to configure the board files for STM32F0 and STM32F4. - NEW: Added USART6 support to the STM32 UARTv1 driver, contributed by Erik van der Zalm. - NEW: Added demo for Arduino Mega, contributed by Fabio Utzig. diff --git a/tools/eclipse/config_wizard/META-INF/MANIFEST.MF b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF index 8d3f5f45a..96de4cd14 100644 --- a/tools/eclipse/config_wizard/META-INF/MANIFEST.MF +++ b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF @@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.core.resources, org.eclipse.ui.ide Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Bundle-Vendor: chibios-org +Bundle-Vendor: chibios.org Bundle-ClassPath: ., lib/jdom-2.0.2.jar, lib/freemarker.jar, diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f0xx/templates/board.h.ftl b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f0xx/templates/board.h.ftl index 798161f83..30fda47df 100644 --- a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f0xx/templates/board.h.ftl +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f0xx/templates/board.h.ftl @@ -103,9 +103,8 @@ #define PIN_ODR_HIGH(n) (1U << (n)) #define PIN_OTYPE_PUSHPULL(n) (0U << (n)) #define PIN_OTYPE_OPENDRAIN(n) (1U << (n)) -#define PIN_OSPEED_400K(n) (0U << ((n) * 2)) -#define PIN_OSPEED_2M(n) (1U << ((n) * 2)) -#define PIN_OSPEED_10M(n) (2U << ((n) * 2)) +#define PIN_OSPEED_2M(n) (0U << ((n) * 2)) +#define PIN_OSPEED_10M(n) (1U << ((n) * 2)) #define PIN_OSPEED_40M(n) (3U << ((n) * 2)) #define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2)) #define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2)) @@ -208,7 +207,7 @@ ${line + ")"} [/#if] [#assign speed = pin.@Speed[0] /] [#if speed == "Minimum"] - [#assign out = "PIN_OSPEED_400K(" + port_name + "_" + name + ")" /] + [#assign out = "PIN_OSPEED_2M(" + port_name + "_" + name + ")" /] [#elseif speed == "Low"] [#assign out = "PIN_OSPEED_2M(" + port_name + "_" + name + ")" /] [#elseif speed == "High"] diff --git a/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f0board.xml b/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f0board.xml index 57ec5f9e5..7e4dd5459 100644 --- a/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f0board.xml +++ b/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f0board.xml @@ -120,7 +120,7 @@ ID="SWDAT" Type="PushPull" Speed="Maximum" - Resistor="Floating" + Resistor="PullUp" Level="High" Mode="Alternate" Alternate="0" /> diff --git a/tools/eclipse/plugins/org.chibios.tools.eclipse.config_1.0.2.jar b/tools/eclipse/plugins/org.chibios.tools.eclipse.config_1.0.2.jar index 6da515a9ab1ed0dae5dec5589968e01eb94a2492..3ecd62c5dd47fa896815875c8b145913e2d2869f 100644 GIT binary patch delta 6257 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 delta 6355 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 sqfo!@PvkC(V**nZaCm4!8pJ}$(jXo&RU!?Ws$=