@@ -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