Skip to content

Commit 6442bc6

Browse files
authored
Merge pull request #3811 from luhuadong/develop
[stm32] perform an automatic ADC calibration using HAL_ADCEx_Calibration_Start()
2 parents 41aa8d4 + 25cafc9 commit 6442bc6

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

bsp/stm32/libraries/HAL_Drivers/drv_adc.c

+14-4
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,12 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch
209209
#elif defined(SOC_SERIES_STM32MP1)
210210
ADC_ChanConf.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
211211
#endif
212+
212213
#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4)
213214
ADC_ChanConf.Offset = 0;
214215
#endif
215-
#ifdef SOC_SERIES_STM32L4
216+
217+
#if defined(SOC_SERIES_STM32L4)
216218
ADC_ChanConf.OffsetNumber = ADC_OFFSET_NONE;
217219
ADC_ChanConf.SingleDiff = LL_ADC_SINGLE_ENDED;
218220
#elif defined(SOC_SERIES_STM32MP1)
@@ -221,9 +223,17 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch
221223
ADC_ChanConf.SingleDiff = ADC_SINGLE_ENDED; /* ADC channel differential mode */
222224
#endif
223225
HAL_ADC_ConfigChannel(stm32_adc_handler, &ADC_ChanConf);
224-
#ifdef SOC_SERIES_STM32MP1
225-
/* Run the ADC linear calibration in single-ended mode */
226-
if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
226+
227+
/* perform an automatic ADC calibration to improve the conversion accuracy */
228+
#if defined(SOC_SERIES_STM32L4)
229+
if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_ChanConf.SingleDiff) != HAL_OK)
230+
{
231+
LOG_E("ADC calibration error!\n");
232+
return -RT_ERROR;
233+
}
234+
#elif defined(SOC_SERIES_STM32MP1)
235+
/* Run the ADC linear calibration in single-ended mode */
236+
if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_ChanConf.SingleDiff) != HAL_OK)
227237
{
228238
LOG_E("ADC open linear calibration error!\n");
229239
/* Calibration Error */

0 commit comments

Comments
 (0)