从“STM32F030F4P6多通道ADC DMA采样数值为4095问题总结”(https://bbs.eeworld.com.cn/thread-1108176-1-1.html)过来的,遇到了类似的问题。
以下是解决过程,希望帮助遇到类似问题的小伙伴:
感谢博主分享经验,最近在使用32的ad也遇到了这样的问题,首先是在stm32f103c8t6上进行测试,没有问题,adc可以正常读取,然后把代码移植到stm32f103zet6,程序就出现了类似的问题,要么是0,要么是4095,悬空时值是随机的,一旦想要去读取需要的电压时就出现问题,一度怀疑人生,后来查看了博主上边给的链接(原文连接 https://bbs.eeworld.com.cn/thread-464556-1-1.html ),里边的条评论是“问题解决了 硬件设计时在VDDA引脚上的供电与VDDC不一致 VDDC用的是3.3V VDDA用的是2.5V 导致内部的模拟电路不稳定 将VDDA换成3.3V就OK了”,仔细看了看两颗芯片的引脚,发现确实在ad的参考电平上有些不同,随后又查看这些个引脚的用法(参考1:https://blog.csdn.net/m0_38106923/article/details/103488569 参考2:https://blog.csdn.net/guoguo123a/article/details/121997746),于是做出了一个违背祖宗的决定,将zet6板子上的verf+与板子上的vcc3.3短接,ad采集正确!!!(稍有些噪声,估计是vcc3.3电平不稳,参考野火的原理图,VDDA与verf+短接,而VDDA是由vcc3.3经过磁珠以及一些电容滤波后得到的)