summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_dac.c66
1 files changed, 44 insertions, 22 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c
index 3ed7aa6762..e5133213d8 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;