Skip to content

Commit a8cd463

Browse files
authored
Merge pull request #3470 from Sunwancn/fix-adc-channel-bug
[drv_adc.c]Fixed ADC channel configuration bug for SMT32F0/L0/H7
2 parents 2e42ad8 + d211a27 commit a8cd463

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

bsp/stm32/libraries/HAL_Drivers/drv_adc.c

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,23 @@ static rt_uint32_t stm32_adc_get_channel(rt_uint32_t channel)
122122
case 15:
123123
stm32_channel = ADC_CHANNEL_15;
124124
break;
125+
#ifdef ADC_CHANNEL_16
125126
case 16:
126127
stm32_channel = ADC_CHANNEL_16;
127128
break;
129+
#endif
128130
case 17:
129131
stm32_channel = ADC_CHANNEL_17;
130132
break;
131-
#if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4)
133+
#ifdef ADC_CHANNEL_18
132134
case 18:
133135
stm32_channel = ADC_CHANNEL_18;
134136
break;
137+
#endif
138+
#ifdef ADC_CHANNEL_19
139+
case 19:
140+
stm32_channel = ADC_CHANNEL_19;
141+
break;
135142
#endif
136143
}
137144

@@ -150,10 +157,22 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch
150157

151158
rt_memset(&ADC_ChanConf, 0, sizeof(ADC_ChanConf));
152159

153-
#if defined(SOC_SERIES_STM32F1)
160+
#ifndef ADC_CHANNEL_16
161+
if (channel == 16)
162+
{
163+
LOG_E("ADC channel must not be 16.");
164+
return -RT_ERROR;
165+
}
166+
#endif
167+
168+
/* ADC channel number is up to 17 */
169+
#if !defined(ADC_CHANNEL_18)
154170
if (channel <= 17)
155-
#elif defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) \
156-
|| defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0)
171+
/* ADC channel number is up to 19 */
172+
#elif defined(ADC_CHANNEL_19)
173+
if (channel <= 19)
174+
/* ADC channel number is up to 18 */
175+
#else
157176
if (channel <= 18)
158177
#endif
159178
{
@@ -162,10 +181,11 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch
162181
}
163182
else
164183
{
165-
#if defined(SOC_SERIES_STM32F1)
184+
#if !defined(ADC_CHANNEL_18)
166185
LOG_E("ADC channel must be between 0 and 17.");
167-
#elif defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) \
168-
|| defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0)
186+
#elif defined(ADC_CHANNEL_19)
187+
LOG_E("ADC channel must be between 0 and 19.");
188+
#else
169189
LOG_E("ADC channel must be between 0 and 18.");
170190
#endif
171191
return -RT_ERROR;

0 commit comments

Comments
 (0)