一、问题
之前编写ADC初始化都只是增加了偏移校准,无论是官方例程还是正点原子的例程都是只使用了偏移校准,但是在使用STM32H7芯片的时候发现个别的板子会出现线性度极差的情况。
二、解决
1.在初始化程序中增加线性度校准的功能,这是HAL库有提供的,就一行程序非常简单。
HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
2.发现这个校准函数返回超时的错误,经查找发现是用的是比较旧的HAL库,库里面超时时间给的不够导致的。两种方法修改,第一就是更新最新的库,第二就是直接修改库里面的超时时间。
#define ADC_CALIBRATION_TIMEOUT (633600000U) /*!< ADC calibration time-out value */
这个宏定义是最新库里面给的超时时间,找到这个宏定义,修改为上面对应的值就可以了。