diff options
| author | luhuadong <[email protected]> | 2020-08-12 02:09:52 +0800 |
|---|---|---|
| committer | luhuadong <[email protected]> | 2020-08-12 02:09:52 +0800 |
| commit | 25cafc9d42e606c22b445b0692a6809a6a55d25a (patch) | |
| tree | 04ab854f48c8b74248d786dc67e21f3a7d9af728 | |
| parent | 41aa8d4785568d2eda653050ac2050d7f2f0ed13 (diff) | |
[stm32] perform an automatic ADC calibration to improve the conversion accuracy using function HAL_ADCEx_Calibration_Start().
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_adc.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_adc.c b/bsp/stm32/libraries/HAL_Drivers/drv_adc.c index 030002dbe2..82e4250a52 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_adc.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_adc.c @@ -209,10 +209,12 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch #elif defined(SOC_SERIES_STM32MP1) ADC_ChanConf.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; #endif + #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) ADC_ChanConf.Offset = 0; #endif -#ifdef SOC_SERIES_STM32L4 + +#if defined(SOC_SERIES_STM32L4) ADC_ChanConf.OffsetNumber = ADC_OFFSET_NONE; ADC_ChanConf.SingleDiff = LL_ADC_SINGLE_ENDED; #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 ADC_ChanConf.SingleDiff = ADC_SINGLE_ENDED; /* ADC channel differential mode */ #endif HAL_ADC_ConfigChannel(stm32_adc_handler, &ADC_ChanConf); -#ifdef SOC_SERIES_STM32MP1 - /* Run the ADC linear calibration in single-ended mode */ - if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK) + + /* perform an automatic ADC calibration to improve the conversion accuracy */ +#if defined(SOC_SERIES_STM32L4) + if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_ChanConf.SingleDiff) != HAL_OK) + { + LOG_E("ADC calibration error!\n"); + return -RT_ERROR; + } +#elif defined(SOC_SERIES_STM32MP1) + /* Run the ADC linear calibration in single-ended mode */ + if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_ChanConf.SingleDiff) != HAL_OK) { LOG_E("ADC open linear calibration error!\n"); /* Calibration Error */ |
