前言
STM32 HAL库中有校准功能,即 HAL_ADCEx_Calibration_Start()函数。但RT-Thread系统 ADC设备驱动中并没有调用,这导致了读取到的ADC数值比正常值整体偏大一些。
解决方法
HAL_ADCEx_Calibration_Start()函数介绍写着必须在HAL_ADC_Stop()后或HAL_ADC_Start()前调用这个校准函数。
于是在RT-Thread工程中drivers/drv_adc.c文件中,HAL_ADC_Start()前增加下面两条语句。
/* stop ADC */
HAL_ADC_Stop(stm32_adc_handler);//新增
/* ADC automatic self-calibration */
HAL_ADCEx_Calibration_Start(stm32_adc_handler);//新增
/* start ADC */
HAL_ADC_Start(stm32_adc_handler);
经过测试,加入校准函数以后ADC的转换精度明显提升,没有出现整体漂移的现象。