STM32L053芯片有一个内部的参照电压,典型值是1.2V,在芯片内部连接到ADC1的通道17。可以通过采样该通道数值反推出电源VDD的电压大小。这个在电池供电或者在使用ADC采集电压使用外部参考电压时,如果外部电压变化,则采样的电压将也会发生改变,导致基准电压改变而导致ADC电压出现偏差。因此在该芯片上查看datasheet后得知,厂家已经在出厂时将类似于基准电压的值写在flash中。该值的环境:25°C, VDD = 3V时的情况,可以直接内存地址访问读取。
下面图中就是STM32L053的校准值内存地址。
//电压计算
#define VREFINT_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FF80078)) //
uint32_t ComputeVrefVdda(void)
{
uint32_t vdda;
vdda = (*VREFINT_CAL_ADDR);
vdda *= 3000;
vdda /= Vrefint_ADValue_ch17;//当前Vrefint通道17的采样值。
return(vdda);
}
原理就是下面等式:
*VREFINT_CAL_ADDR Vrefint_ADValue_ch17
1.2V = ------------------------------- * 3V = ------------------------------------- *VDDA
2^12 2^12
|