diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c index 3ed7aa67622c3494837e2effb9ed8f9353eeeb48..e5133213d811db5e781c99f8e0367693de1f50ba 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c @@ -37,14 +37,45 @@ struct stm32_dac static struct stm32_dac stm32_dac_obj[sizeof(dac_config) / sizeof(dac_config[0])]; +static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel) +{ + rt_uint32_t stm32_channel = 0; + + switch (channel) + { + case 1: + stm32_channel = DAC_CHANNEL_1; + break; + case 2: + stm32_channel = DAC_CHANNEL_2; + break; + default: + RT_ASSERT(0); + break; + } + + return stm32_channel; +} + static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel) { + uint32_t dac_channel; DAC_HandleTypeDef *stm32_dac_handler; RT_ASSERT(device != RT_NULL); stm32_dac_handler = device->parent.user_data; #if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4) - HAL_DAC_Start(stm32_dac_handler, channel); + if ((channel <= 2) && (channel > 0)) + { + /* set stm32 dac channel */ + dac_channel = stm32_dac_get_channel(channel); + } + else + { + LOG_E("dac channel must be 1 or 2."); + return -RT_ERROR; + } + HAL_DAC_Start(stm32_dac_handler, dac_channel); #endif return RT_EOK; @@ -52,37 +83,28 @@ static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t chan static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel) { + uint32_t dac_channel; DAC_HandleTypeDef *stm32_dac_handler; RT_ASSERT(device != RT_NULL); stm32_dac_handler = device->parent.user_data; #if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4) - HAL_DAC_Stop(stm32_dac_handler, channel); + if ((channel <= 2) && (channel > 0)) + { + /* set stm32 dac channel */ + dac_channel = stm32_dac_get_channel(channel); + } + else + { + LOG_E("dac channel must be 1 or 2."); + return -RT_ERROR; + } + HAL_DAC_Stop(stm32_dac_handler, dac_channel); #endif return RT_EOK; } -static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel) -{ - rt_uint32_t stm32_channel = 0; - - switch (channel) - { - case 1: - stm32_channel = DAC_CHANNEL_1; - break; - case 2: - stm32_channel = DAC_CHANNEL_2; - break; - default: - RT_ASSERT(0); - break; - } - - return stm32_channel; -} - static rt_err_t stm32_set_dac_value(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value) { uint32_t dac_channel;