但是这个值有可能也是不准确的,那怎么办呢?ST 提供了一个方案:STM32 可以通过配置将 VREFINT 接入到 ADC 内部的通道,然后我们就可以测量 VREFINT 到底是多少。MCU 不同具体链接的 ADC 引脚也是不同的。下面是 STM32F4 芯片的参考手册的说明:
在 MCU 出厂测试的时候,ST 为我们提供了一个校准值,校准过程是在外部供 3.3V 电源,将采样内部参考的 ADC 值写入到 MCU 固定的内存中去的
这样我们就可以用 ADC 实际采样,得到 VREFINT 的采样值,然后使用上面的校准值进行计算即可! 关于使用内部参照电压的具体方法,只有部分芯片的参考手册中才能找到( 如下图是 STM32F0x ),其他 MCU 的参考手册都是很简单的几句说明。
更进一步,在计算其他通道的时候,我们就可以使用以上计算的 VDDA 来作为基准了!
需要特殊注意的是,在不同系列的芯片中,以上是有区别的,例如以下是 STM32L476 系列的
那么,VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA 这个公式是咋么来的的呢?下面我们以上 STM32L476 这个图为例来推导一下。
ST 通过配置将 VREFINT 连接到 ADC 后,则有:VREFINT = 3.0V * (VREFINT_CAL / 4095); VREFINT_CAL 就是校准条件下的 ADC 采样值 我们自己通过配置将 VREFINT 连接到 ADC:VREFINT = VDDA * (VREFINT_DATA / 4095); 因此,VDDA * (VREFINT_DATA / 4095) = 3.0 * (VREFINT_CAL / 4095); VDDA = 3.0V x VREFINT_CAL / VREFINT_DATA
|