@@ -209,10 +209,12 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch
209
209
#elif defined(SOC_SERIES_STM32MP1 )
210
210
ADC_ChanConf .SamplingTime = ADC_SAMPLETIME_810CYCLES_5 ;
211
211
#endif
212
+
212
213
#if defined(SOC_SERIES_STM32F2 ) || defined(SOC_SERIES_STM32F4 ) || defined(SOC_SERIES_STM32F7 ) || defined(SOC_SERIES_STM32L4 )
213
214
ADC_ChanConf .Offset = 0 ;
214
215
#endif
215
- #ifdef SOC_SERIES_STM32L4
216
+
217
+ #if defined(SOC_SERIES_STM32L4 )
216
218
ADC_ChanConf .OffsetNumber = ADC_OFFSET_NONE ;
217
219
ADC_ChanConf .SingleDiff = LL_ADC_SINGLE_ENDED ;
218
220
#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
221
223
ADC_ChanConf .SingleDiff = ADC_SINGLE_ENDED ; /* ADC channel differential mode */
222
224
#endif
223
225
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 )
227
237
{
228
238
LOG_E ("ADC open linear calibration error!\n" );
229
239
/* Calibration Error */
0 commit comments