diff --git a/boards/nucleo-f767zi/Kconfig b/boards/nucleo-f767zi/Kconfig index e6e98a1b10..320cd1b46d 100644 --- a/boards/nucleo-f767zi/Kconfig +++ b/boards/nucleo-f767zi/Kconfig @@ -15,6 +15,7 @@ config BOARD_NUCLEO_F767ZI select CPU_MODEL_STM32F767ZI # Put defined MCU peripherals here (in alphabetical order) + select HAS_PERIPH_ADC select HAS_PERIPH_DMA select HAS_PERIPH_I2C select HAS_PERIPH_RTC diff --git a/boards/nucleo-f767zi/Makefile.features b/boards/nucleo-f767zi/Makefile.features index 0ffc3877c3..041a056378 100644 --- a/boards/nucleo-f767zi/Makefile.features +++ b/boards/nucleo-f767zi/Makefile.features @@ -2,6 +2,7 @@ CPU = stm32 CPU_MODEL = stm32f767zi # Put defined MCU peripherals here (in alphabetical order) +FEATURES_PROVIDED += periph_adc FEATURES_PROVIDED += periph_dma FEATURES_PROVIDED += periph_eth FEATURES_PROVIDED += periph_i2c diff --git a/boards/nucleo-f767zi/include/periph_conf.h b/boards/nucleo-f767zi/include/periph_conf.h index 8358b2cdc6..c7625abae4 100644 --- a/boards/nucleo-f767zi/include/periph_conf.h +++ b/boards/nucleo-f767zi/include/periph_conf.h @@ -185,7 +185,28 @@ static const eth_conf_t eth_config = { }; #define ETH_DMA_ISR isr_dma2_stream0 +/** @} */ +/** + * @name ADC configuration + * + * Note that we do not configure all ADC channels, + * and not in the STM32F767ZI order. Instead, we + * just define 6 ADC channels, for the Nucleo + * Arduino header pins A0-A5 + * + * @{ + */ +static const adc_conf_t adc_config[] = { + {GPIO_PIN(PORT_A, 3), 0, 0}, + {GPIO_PIN(PORT_C, 0), 0, 1}, + {GPIO_PIN(PORT_C, 3), 0, 4}, + {GPIO_PIN(PORT_F, 3), 0, 8}, + {GPIO_PIN(PORT_F, 5), 0, 11}, + {GPIO_PIN(PORT_F, 10), 0, 10}, +}; + +#define ADC_NUMOF ARRAY_SIZE(adc_config) /** @} */ #ifdef __cplusplus diff --git a/cpu/stm32/include/periph/f7/periph_cpu.h b/cpu/stm32/include/periph/f7/periph_cpu.h index 401b6e2de0..f6497b77e4 100644 --- a/cpu/stm32/include/periph/f7/periph_cpu.h +++ b/cpu/stm32/include/periph/f7/periph_cpu.h @@ -32,6 +32,20 @@ extern "C" { */ #define STM32_BOOTLOADER_ADDR (0x1FF00000) +/** + * @brief Override the ADC resolution configuration + * @{ + */ +#define HAVE_ADC_RES_T +typedef enum { + ADC_RES_6BIT = 0x03000000, /**< ADC resolution: 6 bit */ + ADC_RES_8BIT = 0x02000000, /**< ADC resolution: 8 bit */ + ADC_RES_10BIT = 0x01000000, /**< ADC resolution: 10 bit */ + ADC_RES_12BIT = 0x00000000, /**< ADC resolution: 12 bit */ + ADC_RES_14BIT = 1, /**< ADC resolution: 14 bit (not supported) */ + ADC_RES_16BIT = 2 /**< ADC resolution: 16 bit (not supported)*/ +} adc_res_t; +/** @} */ #endif /* ndef DOXYGEN */ #ifdef __cplusplus diff --git a/cpu/stm32/periph/Makefile b/cpu/stm32/periph/Makefile index 9b171e154c..5184150cdd 100644 --- a/cpu/stm32/periph/Makefile +++ b/cpu/stm32/periph/Makefile @@ -11,7 +11,11 @@ endif # Select the specific implementation for `periph_adc` ifneq (,$(filter periph_adc,$(USEMODULE))) - SRC += adc_$(CPU_FAM).c + ifneq (,$(filter $(CPU_FAM),f4 f7)) + SRC += adc_f4_f7.c + else + SRC += adc_$(CPU_FAM).c + endif endif # Select the correct implementation for `periph_gpio` diff --git a/cpu/stm32/periph/adc_f4.c b/cpu/stm32/periph/adc_f4_f7.c similarity index 100% rename from cpu/stm32/periph/adc_f4.c rename to cpu/stm32/periph/adc_f4_f7.c