解析STM32 ADC采集传感器数据误差高达500的原因
硬件:芯片:stm32F103C8T6最小系统,传感器:滑动变阻器
模数转换类型:12位逐次逼近型adc(0~4095)
现象:当变阻器滑动到最小处时,adc检测返回数据仍然有500(常规下应该小于100左右),
当变阻器没达到最大处时(大概四分之三),adc返回数据已经达到了4095,再调大变阻器数据不变。
原因:adc校准写在了adc上电启动函数前面,应该先上电adc,再adc校准
解决方法:检查启动函数(ADC_Cmd())和校准的顺序,改成先上电,后校准
//ADC先上电(写在前面)
ADC_Cmd(ADC1,ENABLE);
//ADC校准(写在后面)
ADC_ResetCalibration(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_GetResetCalibrationStatus(ADC1)) == SET);
ADC_StartCalibration(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_GetCalibrationStatus(ADC1)) == SET);