Skip to content

Commit ff469fe

Browse files
authored
Merge pull request #4360 from haocg9310/stm32DAC
fix stm32 drv_dac.c some bugs
2 parents c8056dc + 79ec889 commit ff469fe

File tree

1 file changed

+44
-22
lines changed

1 file changed

+44
-22
lines changed

bsp/stm32/libraries/HAL_Drivers/drv_dac.c

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,52 +37,74 @@ struct stm32_dac
3737

3838
static struct stm32_dac stm32_dac_obj[sizeof(dac_config) / sizeof(dac_config[0])];
3939

40+
static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel)
41+
{
42+
rt_uint32_t stm32_channel = 0;
43+
44+
switch (channel)
45+
{
46+
case 1:
47+
stm32_channel = DAC_CHANNEL_1;
48+
break;
49+
case 2:
50+
stm32_channel = DAC_CHANNEL_2;
51+
break;
52+
default:
53+
RT_ASSERT(0);
54+
break;
55+
}
56+
57+
return stm32_channel;
58+
}
59+
4060
static rt_err_t stm32_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel)
4161
{
62+
uint32_t dac_channel;
4263
DAC_HandleTypeDef *stm32_dac_handler;
4364
RT_ASSERT(device != RT_NULL);
4465
stm32_dac_handler = device->parent.user_data;
4566

4667
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
47-
HAL_DAC_Start(stm32_dac_handler, channel);
68+
if ((channel <= 2) && (channel > 0))
69+
{
70+
/* set stm32 dac channel */
71+
dac_channel = stm32_dac_get_channel(channel);
72+
}
73+
else
74+
{
75+
LOG_E("dac channel must be 1 or 2.");
76+
return -RT_ERROR;
77+
}
78+
HAL_DAC_Start(stm32_dac_handler, dac_channel);
4879
#endif
4980

5081
return RT_EOK;
5182
}
5283

5384
static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel)
5485
{
86+
uint32_t dac_channel;
5587
DAC_HandleTypeDef *stm32_dac_handler;
5688
RT_ASSERT(device != RT_NULL);
5789
stm32_dac_handler = device->parent.user_data;
5890

5991
#if defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F4)
60-
HAL_DAC_Stop(stm32_dac_handler, channel);
92+
if ((channel <= 2) && (channel > 0))
93+
{
94+
/* set stm32 dac channel */
95+
dac_channel = stm32_dac_get_channel(channel);
96+
}
97+
else
98+
{
99+
LOG_E("dac channel must be 1 or 2.");
100+
return -RT_ERROR;
101+
}
102+
HAL_DAC_Stop(stm32_dac_handler, dac_channel);
61103
#endif
62104

63105
return RT_EOK;
64106
}
65107

66-
static rt_uint32_t stm32_dac_get_channel(rt_uint32_t channel)
67-
{
68-
rt_uint32_t stm32_channel = 0;
69-
70-
switch (channel)
71-
{
72-
case 1:
73-
stm32_channel = DAC_CHANNEL_1;
74-
break;
75-
case 2:
76-
stm32_channel = DAC_CHANNEL_2;
77-
break;
78-
default:
79-
RT_ASSERT(0);
80-
break;
81-
}
82-
83-
return stm32_channel;
84-
}
85-
86108
static rt_err_t stm32_set_dac_value(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value)
87109
{
88110
uint32_t dac_channel;

0 commit comments

Comments
 (0)