校准 STM32 ADC (VREFINT)

ite*_*ter 5 stm32 adc stm32f0

我正在尝试在 STM32F042 微控制器上读取 VDDA。我在 VDD 为 3.29V 时得到了意想不到的结果。我一定缺少一些基本的东西。

输出:

VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
VREFINT=1885; VREFINT_CAL=1524; VDDA=2668 mV
VREFINT=1913; VREFINT_CAL=1524; VDDA=2628 mV
VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
Run Code Online (Sandbox Code Playgroud)

adc_test.c:

VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
VREFINT=1885; VREFINT_CAL=1524; VDDA=2668 mV
VREFINT=1913; VREFINT_CAL=1524; VDDA=2628 mV
VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
VREFINT=1917; VREFINT_CAL=1524; VDDA=2623 mV
Run Code Online (Sandbox Code Playgroud)

数据表截图:

在此处输入图片说明

参考手册截图

请注意,这是指 .3V,但我认为这是一个错字,因为上面的数据表和下面更长的公式是指 3.3V,而 .3V 低于该部件的最低工作电压

在此处输入图片说明

ite*_*ter 0

答案(非常感谢@jasonharper)是缺少接地连接。Jason 对 OP 的评论是这个帖子中最好的智慧来源。我在这里发布了一个摘要,以便这个问题可以有一个可接受的答案。

该板经历了多次修改,在这次迭代中,我们忘记连接导热垫,这是该部件上唯一的接地连接。该芯片通过接地引脚上的 ESD 二极管接地。令我惊讶的是它竟然有效。我能够通过将接地 GPIO 配置为输出并将其设置为低电平来增加芯片的电流。