diff --git a/boards/arm/stm32/nucleo-g431rb/README.txt b/boards/arm/stm32/nucleo-g431rb/README.txt index d706431c836..c6ec06edbd7 100644 --- a/boards/arm/stm32/nucleo-g431rb/README.txt +++ b/boards/arm/stm32/nucleo-g431rb/README.txt @@ -8,3 +8,62 @@ STATUS ====== 2020-06-12: The basic NSH configuration is now functional. + +Configurations +============== + + ihm16m1_f32 and ihm16m1_b16: + ---------------------------- + + These examples are dedicated for the X-NUCLEO-IHM16M1 expansion board + based on STSPIN830 driver for three-phase brushless DC motors. + + X-NUCLEO-IHM16M1 must be configured to work with FOC and 3-shunt + resistors. See ST documentation for details. + + Pin configuration for the X-NUCLEO-IHM16M1 (TIM1 configuration): + + Board Function Chip Function Chip Pin Number + ------------- ---------------- ----------------- + Phase U high TIM1_CH1 PA8 + Phase U enable GPIO_PB13 PB13 + Phase V high TIM1_CH2 PA9 + Phase V enable GPIO_PB14 PB14 + Phase W high TIM1_CH3 PA10 + Phase W enable GPIO_PB15 PB15 + EN_FAULT GPIO_PB12 PB12 + Current U GPIO_ADC1_IN2 PA1 + Current V GPIO_ADC1_IN12 PB1 + Current W GPIO_ADC1_IN15 PB0 + Temperature ? PC4 + VBUS GPIO_ADC1_IN1 PA0 + BEMF1 (NU) + BEMF2 (NU) + BEMF3 (NU) + LED + +3V3 (CN7_16) + GND (CN7_20) + GPIO_BEMF (NU) + ENCO_A/HALL_H1 + ENCO_B/HALL_H2 + ENCO_Z/HALL_H3 + GPIO1 (NU) + GPIO2 (NU) + GPIO3 (NU) + CPOUT (NU) + BKIN1 (NU) + POT GPIO_ADC1_IN8 PC2 + CURR_REF (NU) + DAC (NU) + + Current shunt resistance = 0.33 + Current sense gain = -1.53 (inverted current) + Vbus sense gain = 9.31k/(9.31k+169k) = 0.0522124390107 + Vbus min = 7V + Vbus max = 45V + Iout max = 1.5A RMS + + IPHASE_RATIO = 1/(R_shunt*gain) = -1.98 + VBUS_RATIO = 1/VBUS_gain = 16 + + For now only 3-shunt resistors configuration is supported. diff --git a/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_b16/defconfig b/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_b16/defconfig new file mode 100644 index 00000000000..e69c79c9a74 --- /dev/null +++ b/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_b16/defconfig @@ -0,0 +1,89 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ADC=y +CONFIG_ADC_FIFOSIZE=3 +CONFIG_ANALOG=y +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="nucleo-g431rb" +CONFIG_ARCH_BOARD_NUCLEO_G431RB=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="stm32" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32G431R=y +CONFIG_ARCH_INTERRUPTSTACK=1024 +CONFIG_ARCH_IRQBUTTONS=y +CONFIG_ARMV7M_LIBM=y +CONFIG_BOARD_LOOPSPERMSEC=8499 +CONFIG_BOARD_STM32_COMMON=y +CONFIG_BOARD_STM32_IHM16M1=y +CONFIG_BOARD_STM32_IHM16M1_POT=y +CONFIG_BOARD_STM32_IHM16M1_VBUS=y +CONFIG_BUILTIN=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEFAULT_SMALL=y +CONFIG_DEFAULT_TASK_STACKSIZE=1024 +CONFIG_EXAMPLES_FOC=y +CONFIG_EXAMPLES_FOC_ADC_MAX=4095 +CONFIG_EXAMPLES_FOC_ADC_VREF=3300 +CONFIG_EXAMPLES_FOC_CONTROL_STACKSIZE=2048 +CONFIG_EXAMPLES_FOC_FIXED16_INST=1 +CONFIG_EXAMPLES_FOC_HAVE_BUTTON=y +CONFIG_EXAMPLES_FOC_IPHASE_ADC=-160 +CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000 +CONFIG_EXAMPLES_FOC_PWM_FREQ=20000 +CONFIG_EXAMPLES_FOC_RAMP_ACC=1000000 +CONFIG_EXAMPLES_FOC_RAMP_DEC=1000000 +CONFIG_EXAMPLES_FOC_RAMP_THR=10000 +CONFIG_EXAMPLES_FOC_VBUS_ADC=y +CONFIG_EXAMPLES_FOC_VBUS_SCALE=16000 +CONFIG_EXAMPLES_FOC_VEL_ADC=y +CONFIG_INDUSTRY_FOC=y +CONFIG_INDUSTRY_FOC_FIXED16=y +CONFIG_INPUT=y +CONFIG_INPUT_BUTTONS=y +CONFIG_INPUT_BUTTONS_LOWER=y +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBM=y +CONFIG_MAX_TASKS=4 +CONFIG_MOTOR=y +CONFIG_MOTOR_FOC=y +CONFIG_MOTOR_FOC_TRACE=y +CONFIG_MQ_MAXMSGSIZE=5 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_RAM_SIZE=22528 +CONFIG_RAM_START=0x20000000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_START_DAY=14 +CONFIG_START_MONTH=10 +CONFIG_START_YEAR=2014 +CONFIG_STM32_ADC1_ANIOC_TRIGGER=1 +CONFIG_STM32_ADC1_DMA=y +CONFIG_STM32_ADC1_DMA_CFG=1 +CONFIG_STM32_ADC1_INJECTED_CHAN=3 +CONFIG_STM32_DMA1=y +CONFIG_STM32_DMA2=y +CONFIG_STM32_DMAMUX1=y +CONFIG_STM32_FOC=y +CONFIG_STM32_FOC_FOC0=y +CONFIG_STM32_JTAG_SW_ENABLE=y +CONFIG_STM32_TIM1_CH1MODE=0 +CONFIG_STM32_TIM1_CH2MODE=0 +CONFIG_STM32_TIM1_CH3MODE=0 +CONFIG_STM32_TIM1_MODE=2 +CONFIG_STM32_USART2=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=0 +CONFIG_USART2_SERIAL_CONSOLE=y +CONFIG_USART2_TXDMA=y +CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_f32/defconfig b/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_f32/defconfig new file mode 100644 index 00000000000..49584d6fadb --- /dev/null +++ b/boards/arm/stm32/nucleo-g431rb/configs/ihm16m1_f32/defconfig @@ -0,0 +1,89 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ADC=y +CONFIG_ADC_FIFOSIZE=3 +CONFIG_ANALOG=y +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="nucleo-g431rb" +CONFIG_ARCH_BOARD_NUCLEO_G431RB=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="stm32" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32G431R=y +CONFIG_ARCH_INTERRUPTSTACK=1024 +CONFIG_ARCH_IRQBUTTONS=y +CONFIG_ARMV7M_LIBM=y +CONFIG_BOARD_LOOPSPERMSEC=8499 +CONFIG_BOARD_STM32_COMMON=y +CONFIG_BOARD_STM32_IHM16M1=y +CONFIG_BOARD_STM32_IHM16M1_POT=y +CONFIG_BOARD_STM32_IHM16M1_VBUS=y +CONFIG_BUILTIN=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEFAULT_SMALL=y +CONFIG_DEFAULT_TASK_STACKSIZE=1024 +CONFIG_EXAMPLES_FOC=y +CONFIG_EXAMPLES_FOC_ADC_MAX=4095 +CONFIG_EXAMPLES_FOC_ADC_VREF=3300 +CONFIG_EXAMPLES_FOC_CONTROL_STACKSIZE=2048 +CONFIG_EXAMPLES_FOC_FLOAT_INST=1 +CONFIG_EXAMPLES_FOC_HAVE_BUTTON=y +CONFIG_EXAMPLES_FOC_IPHASE_ADC=-160 +CONFIG_EXAMPLES_FOC_NOTIFIER_FREQ=10000 +CONFIG_EXAMPLES_FOC_PWM_FREQ=20000 +CONFIG_EXAMPLES_FOC_RAMP_ACC=1000000 +CONFIG_EXAMPLES_FOC_RAMP_DEC=1000000 +CONFIG_EXAMPLES_FOC_RAMP_THR=10000 +CONFIG_EXAMPLES_FOC_VBUS_ADC=y +CONFIG_EXAMPLES_FOC_VBUS_SCALE=16000 +CONFIG_EXAMPLES_FOC_VEL_ADC=y +CONFIG_INDUSTRY_FOC=y +CONFIG_INDUSTRY_FOC_FLOAT=y +CONFIG_INPUT=y +CONFIG_INPUT_BUTTONS=y +CONFIG_INPUT_BUTTONS_LOWER=y +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBM=y +CONFIG_MAX_TASKS=4 +CONFIG_MOTOR=y +CONFIG_MOTOR_FOC=y +CONFIG_MOTOR_FOC_TRACE=y +CONFIG_MQ_MAXMSGSIZE=5 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_RAM_SIZE=22528 +CONFIG_RAM_START=0x20000000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_START_DAY=14 +CONFIG_START_MONTH=10 +CONFIG_START_YEAR=2014 +CONFIG_STM32_ADC1_ANIOC_TRIGGER=1 +CONFIG_STM32_ADC1_DMA=y +CONFIG_STM32_ADC1_DMA_CFG=1 +CONFIG_STM32_ADC1_INJECTED_CHAN=3 +CONFIG_STM32_DMA1=y +CONFIG_STM32_DMA2=y +CONFIG_STM32_DMAMUX1=y +CONFIG_STM32_FOC=y +CONFIG_STM32_FOC_FOC0=y +CONFIG_STM32_JTAG_SW_ENABLE=y +CONFIG_STM32_TIM1_CH1MODE=0 +CONFIG_STM32_TIM1_CH2MODE=0 +CONFIG_STM32_TIM1_CH3MODE=0 +CONFIG_STM32_TIM1_MODE=2 +CONFIG_STM32_USART2=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=0 +CONFIG_USART2_SERIAL_CONSOLE=y +CONFIG_USART2_TXDMA=y +CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/boards/arm/stm32/nucleo-g431rb/include/board.h b/boards/arm/stm32/nucleo-g431rb/include/board.h index d7049a2343a..030ba13d13d 100644 --- a/boards/arm/stm32/nucleo-g431rb/include/board.h +++ b/boards/arm/stm32/nucleo-g431rb/include/board.h @@ -242,4 +242,49 @@ #define ADC1_DMA_CHAN DMAMAP_DMA12_ADC1_0 /* DMA1 */ +/* USART2 */ + +#define DMACHAN_USART2_TX DMAMAP_DMA12_USART2TX_0 /* DMA1 */ +#define DMACHAN_USART2_RX DMAMAP_DMA12_USART2RX_0 /* DMA1 */ + +#ifdef CONFIG_BOARD_STM32_IHM16M1 + +/* Configuration specific for the X-NUCLEO-IHM16M1 expansion board with + * the STSPIN830 driver. + */ + +/* TIM1 configuration *******************************************************/ + +# define GPIO_TIM1_CH1OUT GPIO_TIM1_CH1OUT_1 /* TIM1 CH1 - PA8 - U high */ +# define GPIO_TIM1_CH2OUT GPIO_TIM1_CH2OUT_1 /* TIM1 CH2 - PA9 - V high */ +# define GPIO_TIM1_CH3OUT GPIO_TIM1_CH3OUT_1 /* TIM1 CH3 - PA10 - W high */ +# define GPIO_TIM1_CH4OUT 0 /* not used as output */ + +/* UVW ENABLE */ + +# define GPIO_FOC_EN_U (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN13) +# define GPIO_FOC_EN_V (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN14) +# define GPIO_FOC_EN_W (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN15) + +/* EN_FAULT */ + +# define GPIO_FOC_ENFAULT (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN12) + +/* Debug pins */ + +# define GPIO_FOC_DEBUG0 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8) +# define GPIO_FOC_DEBUG1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN9) +# define GPIO_FOC_DEBUG2 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN6) +# define GPIO_FOC_DEBUG3 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz| \ + GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN12) + +#endif /* CONFIG_BOARD_STM32_IHM16M1 */ + #endif /* __BOARDS_ARM_STM32_NUCLEO_G431RB_INCLUDE_BOARD_H */ diff --git a/boards/arm/stm32/nucleo-g431rb/src/Make.defs b/boards/arm/stm32/nucleo-g431rb/src/Make.defs index f55b633e59e..586119505d0 100644 --- a/boards/arm/stm32/nucleo-g431rb/src/Make.defs +++ b/boards/arm/stm32/nucleo-g431rb/src/Make.defs @@ -37,6 +37,7 @@ ifeq ($(CONFIG_LIB_BOARDCTL),y) CSRCS += stm32_appinit.c endif +ifneq ($(CONFIG_STM32_FOC),y) ifeq ($(CONFIG_PWM),y) CSRCS += stm32_pwm.c endif @@ -44,6 +45,11 @@ endif ifeq ($(CONFIG_ADC),y) CSRCS += stm32_adc.c endif +endif + +ifeq ($(CONFIG_BOARD_STM32_IHM16M1),y) +CSRCS += stm32_foc_ihm16m1.c +endif DEPPATH += --dep-path board VPATH += :board diff --git a/boards/arm/stm32/nucleo-g431rb/src/nucleo-g431rb.h b/boards/arm/stm32/nucleo-g431rb/src/nucleo-g431rb.h index 557c9536d9b..92154be09fb 100644 --- a/boards/arm/stm32/nucleo-g431rb/src/nucleo-g431rb.h +++ b/boards/arm/stm32/nucleo-g431rb/src/nucleo-g431rb.h @@ -131,4 +131,16 @@ int stm32_pwm_setup(void); int stm32_adc_setup(void); #endif +/**************************************************************************** + * Name: stm32_foc_setup + * + * Description: + * Initialize FOC peripheral for the board. + * + ****************************************************************************/ + +#ifdef CONFIG_STM32_FOC +int stm32_foc_setup(void); +#endif + #endif /* __BOARDS_ARM_STM32_NUCLEO_G431RB_SRC_NUCLEO_G431RB_H */ diff --git a/boards/arm/stm32/nucleo-g431rb/src/stm32_bringup.c b/boards/arm/stm32/nucleo-g431rb/src/stm32_bringup.c index 182ff7fef4c..7e7ad766030 100644 --- a/boards/arm/stm32/nucleo-g431rb/src/stm32_bringup.c +++ b/boards/arm/stm32/nucleo-g431rb/src/stm32_bringup.c @@ -102,6 +102,16 @@ int stm32_bringup(void) } #endif +#ifdef CONFIG_STM32_FOC + /* Initialize and register the FOC device - must be before ADC setup */ + + ret = stm32_foc_setup(); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: stm32_foc_setup failed: %d\n", ret); + } +#endif + #ifdef CONFIG_ADC /* Initialize ADC and register the ADC driver. */ diff --git a/boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c b/boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c new file mode 100644 index 00000000000..2d189346b19 --- /dev/null +++ b/boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c @@ -0,0 +1,183 @@ +/**************************************************************************** + * boards/arm/stm32/nucleo-g431rb/src/stm32_foc_ihm16m1.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "stm32_ihm16m1.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define CURRENT_SAMPLE_TIME ADC_SMPR_24p5 +#define VBUS_SAMPLE_TIME ADC_SMPR_640p5 +#define POT_SAMPLE_TIME ADC_SMPR_640p5 + +/* ADC1 channels used in this example */ + +#define ADC1_INJECTED (CONFIG_MOTOR_FOC_SHUNTS) + +#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS +# define IHM16M1_VBUS 1 +#else +# define IHM16M1_VBUS 0 +#endif + +#ifdef CONFIG_BOARD_STM32_IHM16M1_POT +# define IHM16M1_POT 1 +#else +# define IHM16M1_POT 0 +#endif + +#define ADC1_REGULAR (IHM16M1_VBUS + IHM16M1_POT) +#define ADC1_NCHANNELS (ADC1_INJECTED + ADC1_REGULAR) + +/* Check ADC1 configuration */ + +#if ADC1_INJECTED != CONFIG_STM32_ADC1_INJECTED_CHAN +# error +#endif + +#if CONFIG_STM32_ADC1_RESOLUTION != 0 +# error +#endif + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/* FOC ADC configration: + * - Current Phase V -> ADC1 INJ1 -> ADC1_IN2 (PA1) + * - Current Phase U -> ADC1 INJ2 -> ADC1_IN12 (PB1) + * - Current Phase W -> ADC1 INJ3 -> ADC1_IN15 (PB0) + * optional: + * - VBUS -> ADC1 REG -> ADC1_IN1 (PA0) + * - POT -> ADC1 REG -> ADC1_IN8 (PC2) + * + * TIM1 PWM configuration: + * - Phase U high -> TIM1_CH1 (PA8) + * - Phase V high -> TIM1_CH2 (PA9) + * - Phase W high -> TIM1_CH3 (PA10) + * + */ + +static uint8_t g_adc1_chan[] = +{ +#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS + 1, /* ADC1 REG - VBUS */ +#endif +#ifdef CONFIG_BOARD_STM32_IHM16M1_POT + 8, /* ADC1 REG - POT */ +#endif + 2, /* ADC1 INJ1 - PHASE 1 */ +#if CONFIG_MOTOR_FOC_SHUNTS == 3 + 12, /* ADC1 INJ2 - PHASE 2 */ + 15, /* ADC1 INJ3 - PHASE 3 */ +#endif +}; + +static uint32_t g_adc1_pins[] = +{ +#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS + GPIO_ADC1_IN1, +#endif +#ifdef CONFIG_BOARD_STM32_IHM16M1_POT + GPIO_ADC1_IN8, +#endif + GPIO_ADC1_IN2, +#if CONFIG_MOTOR_FOC_SHUNTS > 1 + GPIO_ADC1_IN12, +#endif +#if CONFIG_MOTOR_FOC_SHUNTS > 2 + GPIO_ADC1_IN15, +#endif +}; + +/* ADC1 sample time configuration */ + +static adc_channel_t g_adc1_stime[] = +{ +#ifdef CONFIG_BOARD_STM32_IHM16M1_VBUS + { + .channel = 1, + .sample_time = VBUS_SAMPLE_TIME + }, +#endif +#ifdef CONFIG_BOARD_STM32_IHM16M1_POT + { + .channel = 8, + .sample_time = POT_SAMPLE_TIME + }, +#endif + { + .channel = 2, + .sample_time = CURRENT_SAMPLE_TIME + }, +#if CONFIG_MOTOR_FOC_SHUNTS > 1 + { + .channel = 12, + .sample_time = CURRENT_SAMPLE_TIME + }, +#endif +#if CONFIG_MOTOR_FOC_SHUNTS > 2 + { + .channel = 15, + .sample_time = CURRENT_SAMPLE_TIME + }, +#endif +}; + +/* Board specific ADC configuration for FOC */ + +static struct stm32_foc_adc_s g_adc_cfg = +{ + .chan = g_adc1_chan, + .pins = g_adc1_pins, + .stime = g_adc1_stime, + .nchan = ADC1_NCHANNELS, + .regch = ADC1_REGULAR, + .intf = 1 +}; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_foc_setup + * + * Description: + * Initialize FOC driver. + * + * This function should be call by board_app_initialize(). + * + * Returned Value: + * 0 on success, a negated errno value on failure + * + ****************************************************************************/ + +int stm32_foc_setup(void) +{ + return board_ihm16m1_initialize(&g_adc_cfg); +}