从datasheet中可以看到内部基准出厂校准值储存在地址0x1ffff7ba~0x1ffff7bb
VREFINT_CAL.png
注意到该值是在VDDA=3.3V时测量得到.
读取校准值的过程是对该地址进行直接寻址:
#define VREFINT_CAL_ADR 0x1ffff7ba //定义地址
#define pVREFINT_CAL ((uint16_t*)VREFINT_CAL_ADR) //定义指针
uint16_t VrefInt = *pVREFINT_CAL; //读取
我读到的VrefInt 值为1521,换算成电压:(1521/4095)*3.3V=1.226V.
因为Vref连接到ADC的通道17,用ADC对其进行采样得到当前系统电压下的值为1696,当前VDDA标称值为3V.用以上参数可以计算实际VDDA电压,原理如下
3.3V系统下,Vref电压为:
当前系统下,Vref电压为:
显然,两个算式应该相等,于是可以得到:
参考手册252页中有本方法的计算,有印刷错误,其中的.3V应该为3.3V
用万用表测量值为2.97V
VDDA.png
可见该方法还是靠谱的.
网友评论