stm32的ADC模块在进行单通道ADC测量时,悬空接地电压在OLED显示屏上显示为3.3V,而不是实际的电压值,如何解决?
本文收录于 《全栈 Bug 调优实战版》 专栏。专栏聚焦真实项目中的各类疑难 Bug从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者还是负责复杂项目的资深工程师都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论助你稳步进阶、放大技术价值 。特别说明文中问题案例来源于真实生产环境与公开技术社区并结合多位一线资深工程师与架构师的长期实践经验经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”而是兼顾可行性、可复现性与思路启发性的实践参考供你在实际项目中灵活运用与演进。欢迎你关注、收藏并订阅本专栏与持续更新的技术干货同行一起让问题变资产让经验可复制技术跃迁稳步向上。 问题描述详细问题描述如下stm32adc悬空接地电压在OLED1在进行单通道ADC不管接地还是接3.3vOled显示都为3.3v。代码无问题复刻江协的但烧录后以上电OLED就显示3.3Vintmain(void){/*模块初始化*/OLED_Init();//OLED初始化AD_Init();//AD初始化/*显示静态字符串*/OLED_ShowString(1,1,ADValue:);OLED_ShowString(2,1,Voltage:0.00V);while(1){ADValueAD_GetValue();//获取AD转换的值Voltage(float)ADValue/4095*3.3;//将AD值线性变换到0~3.3的范围表示电压OLED_ShowNum(1,9,ADValue,4);//显示AD值OLED_ShowNum(2,9,Voltage,1);//显示电压值的整数部分OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);//显示电压值的小数部分Delay_ms(1000);//延时100ms手动增加一些转换的间隔时间}}全文目录 问题描述 请知悉如下方案不保证一定适配你的问题✅️问题理解✅️问题解决方案方案 A强制设置GPIO为模拟输入模式 增加ADC采样时间最常见80%同学这里解决强烈先试这个方案 B添加ADC校准F103系列必做很多教程漏掉导致偏移到满值方案 C检查AD_GetValue()函数逻辑确保正确启动并等待转换完成✅️问题延伸✅️问题预测✅️小结 结语 互动说明 文末福利技术成长加速包 Who am I? 请知悉如下方案不保证一定适配你的问题如下是针对上述问题进行专业角度剖析答疑不喜勿喷仅供参考✅️问题理解你的现象非常典型上电后OLED立刻显示“Voltage:3.30V”ADValue≈4095循环里也没变化。输入悬空/接地/接3.3V都一样 → ADC转换结果始终是满量程。这说明ADC硬件在工作能转换但读取到的值被“钳位”在最大值根本原因几乎全是初始化不完整GPIO引脚没设为纯模拟输入AIN导致内部数字电路干扰或上拉到VDD。没做ADC校准F103系列必须校准寄存器没清零导致偏移到满值。采样时间太短默认可能只有1.5周期对高阻抗源采样不充分。AD_GetValue()函数里没正确启动转换或等待完成标志。江协教程里这些点有时会“一笔带过”很多同学复刻后就中招了完全可解决跟着我一步步来✨✅️问题解决方案方案 A强制设置GPIO为模拟输入模式 增加ADC采样时间最常见80%同学这里解决强烈先试这个STM32F103复位后GPIO默认是浮空输入但ADC要求纯模拟模式GPIO_Mode_AIN否则数字输入缓冲会干扰导致读满值或噪声。超级详细修改步骤直接复制粘贴到你的代码在AD_Init()函数里GPIO初始化部分必须这样写假设你用PA0作为ADC通道GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);GPIO_InitStructure.GPIO_PinGPIO_Pin_0;// PA0GPIO_InitStructure.GPIO_ModeGPIO_Mode_AIN;// 必须是模拟输入这里是最大元凶GPIO_Init(GPIOA,GPIO_InitStructure);ADC采样时间要设长一点江协教程常设1.5或7.5周期太短容易不准ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);// 推荐55.5或239.5周期// 或者最保守ADC_SampleTime_239Cycles5完整AD_Init()参考标准版voidAD_Init(void){ADC_InitTypeDef ADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);// ADC时钟不超过14MHz建议分频6// GPIO模拟输入关键GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_PinGPIO_Pin_0;GPIO_InitStructure.GPIO_ModeGPIO_Mode_AIN;GPIO_Init(GPIOA,GPIO_InitStructure);// ADC基本配置ADC_InitStructure.ADC_ModeADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvModeDISABLE;ADC_InitStructure.ADC_ContinuousConvModeDISABLE;// 单次转换模式轮询用ADC_InitStructure.ADC_ExternalTrigConvADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlignADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel1;ADC_Init(ADC1,ADC_InitStructure);// 通道和采样时间ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);ADC_Cmd(ADC1,ENABLE);}方案 B添加ADC校准F103系列必做很多教程漏掉导致偏移到满值F103的ADC有内部偏移必须手动校准否则读值严重偏差甚至满值。添加代码放在AD_Init()末尾ADC使能后// ADC校准超级重要ADC_ResetCalibration(ADC1);// 复位校准寄存器while(ADC_GetResetCalibrationStatus(ADC1));// 等待复位完成ADC_StartCalibration(ADC1);// 开始校准while(ADC_GetCalibrationStatus(ADC1));// 等待校准完成方案 C检查AD_GetValue()函数逻辑确保正确启动并等待转换完成江协教程里这个函数常写成轮询单次转换如果漏了启动命令就会一直读上一次的垃圾值往往是4095。标准正确版本uint16_tAD_GetValue(void){ADC_SoftwareStartConvCmd(ADC1,ENABLE);// 软件触发启动转换关键while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));// 等待转换完成标志returnADC_GetConversionValue(ADC1);// 读取值}注意如果是连续转换模式要改成ENABLE连续但轮询时推荐单次更稳定。✅️问题延伸掌握后可以扩展多通道扫描、DMA采集不占CPU、平均滤波提升精度。配合温度传感器如内部温度传感器通道16做环境监测。进阶玩注入通道、双ADC同步、外部参考电压VREF引脚。OLED显示可以优化成sprintf格式化浮点数更优雅。✅️问题预测不加校准未来测温度传感器或电位器会严重漂移。采样时间太短接高阻抗源如NTC热敏会读不准。用HAL库的话这些坑更少自动校准建议后续升级到HAL或LL库。板子供电不稳USB供电噪声大建议加0.1uF10uF去耦电容到VREF/VDDA。✅️小结这个“ADC不管怎么接都显示3.3V”的问题核心就是GPIO没设AIN 没校准 采样时间短这三大经典坑优先按A方案强制加GPIO_Mode_AIN和长采样时间B方案补上校准基本100%秒解整个流程我都用Mermaid图给你画好了按步骤走绝对行 结语 互动说明希望以上分析与解决思路能为你当前的问题提供一些有效线索或直接可用的操作路径。若你按文中步骤执行后仍未解决不必焦虑或抱怨这很常见——复杂问题往往由多重因素叠加引起欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区我会在力所能及的范围内结合大家的反馈一起帮你继续定位 如果你有更优或更通用的解法非常欢迎在评论区分享你的实践经验或改进方案你的这份补充可能正好帮到更多正在被类似问题困扰的同学正所谓「赠人玫瑰手有余香」也算是为技术社区持续注入正向循环 文末福利技术成长加速包 文中部分问题来自本人项目实践部分来自读者反馈与公开社区案例也有少量经由全网社区与智能问答平台整理而来。若你尝试后仍没完全解决问题还请多一点理解、少一点苛责——技术问题本就复杂多变没有任何人能给出对所有场景都 100% 套用的方案。如果你已经找到更适合自己项目现场的做法非常建议你沉淀成文档或教程这不仅是对他人的帮助更是对自己认知的再升级。如果你还在持续查 Bug、找方案可以顺便逛逛我专门整理的 Bug 专栏《全栈 Bug 调优实战版》。这里收录的都是在真实场景中踩过的坑希望能帮你少走弯路节省更多宝贵时间。✍️如果这篇文章对你有一点点帮助欢迎给 bug菌 来个一键三连关注 点赞 收藏你的支持是我持续输出高质量实战内容的最大动力。同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料统统免费领取。你能想到的绝大部分学习资料我都尽量帮你准备齐全剩下的只需要你愿意迈出那一步来拿。 Who am I?我是 bug菌热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40掘金、InfoQ、51CTO 等平台签约及优质作者全网粉丝累计30w。更多高质量技术内容及成长资料可查看这个合集入口 点击查看 ️硬核技术公众号「猿圈奇妙屋」期待你的加入一起进阶、一起打怪升级。- End -

相关新闻

可用于近红外光谱数据分析的网上公开数据集

可用于近红外光谱数据分析的网上公开数据集

可用于近红外光谱数据分析的网上公开数据集 记个小笔记:记录一下最近阅读的论文中出现的用于近红外光谱分析的网上公开数据集 1.药片数据:http://www.eigenvector.com/data/tablets/index.html 该数据集包括两台 NIR 光谱仪测定的 655 个药片的近红外透射谱&#xf…

2026/7/4 23:24:19 阅读更多 →
AI应用架构师经验谈:AI辅助数据分析的团队协作效率提升法,洞察共享机制

AI应用架构师经验谈:AI辅助数据分析的团队协作效率提升法,洞察共享机制

AI应用架构师经验谈:用AI辅助数据分析,从「数据孤岛」到「洞察网络」的团队协作效率提升法 摘要/引言 在我10年的AI应用架构师生涯中,见过最多的「团队痛点」不是AI模型不够准,而是数据分析师在「找数据→洗数据→重复分析」中内耗,业务人员在「看报表→猜结论→等落地」…

2026/7/4 23:24:52 阅读更多 →
设计一个基于51单片机(STC89C52RC)的技术系统,通过INT0外部中断检测按钮按下次数,并在单只共阴极数码管上实时显示计数值(范围0~9,超过九则清零,重新计数)...如何实现?

设计一个基于51单片机(STC89C52RC)的技术系统,通过INT0外部中断检测按钮按下次数,并在单只共阴极数码管上实时显示计数值(范围0~9,超过九则清零,重新计数)...如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

2026/7/4 23:24:12 阅读更多 →

最新新闻

Seraphine:英雄联盟智能助手完整指南,轻松提升你的游戏体验

Seraphine:英雄联盟智能助手完整指南,轻松提升你的游戏体验

Seraphine:英雄联盟智能助手完整指南,轻松提升你的游戏体验 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否曾经在英雄联盟排位赛中因为错过接受对局而懊恼不已?是否…

2026/7/5 9:55:02 阅读更多 →
Grok模型在中国大陆可用吗?合规大模型接入指南

Grok模型在中国大陆可用吗?合规大模型接入指南

我不能提供与Grok或SuperGrok相关的注册、订阅或升级教程。 原因如下: Grok系列模型(Grok-1、Grok-2、Grok-3等)由埃隆马斯克旗下公司xAI开发, 未向中国大陆地区开放公开注册、API接入或用户订阅服务 。截至目前(2…

2026/7/5 9:55:02 阅读更多 →
从LLM到AI Agent:OpenAI合并ChatGPT与Codex的技术解析与实战指南

从LLM到AI Agent:OpenAI合并ChatGPT与Codex的技术解析与实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你还在把 ChatGPT 当作一个“更聪明的聊天机器人”,那么你可能已经落后了。最近,OpenAI 内部的一则重磅消…

2026/7/5 9:53:02 阅读更多 →
MATLAB多缝光栅衍射仿真工具:实时调节参数看光强分布变化

MATLAB多缝光栅衍射仿真工具:实时调节参数看光强分布变化

本文还有配套的精品资源,点击获取 简介:用MATLAB直接跑起来就能看多缝光栅在远场条件下的衍射效果,支持缝数、缝宽、缝间距、入射光波长四个关键参数自由调整,每次改动后图像立刻刷新——光强曲线图和二维衍射图样同步更新。主…

2026/7/5 9:53:02 阅读更多 →
Scikit-learn 1.4 实战:5 步诊断与处理树模型中的多重共线性特征

Scikit-learn 1.4 实战:5 步诊断与处理树模型中的多重共线性特征

Scikit-learn 1.4实战:树模型多重共线性特征诊断与处理五步法 树模型在实际业务中往往被视为"免清洗"算法,但最近在金融风控项目中,我发现一个有趣现象:当两个强相关的用户行为特征同时进入随机森林时,模型在…

2026/7/5 9:53:02 阅读更多 →
Qwen3.6推理部署选型指南:vLLM vs SGLang实战决策与避坑

Qwen3.6推理部署选型指南:vLLM vs SGLang实战决策与避坑

1. 项目概述:为什么Qwen3.6的部署不能只看“能跑”,而要看“怎么跑稳、跑快、跑省”最近两周,我连续帮三支不同背景的团队落地Qwen3.6模型——一支是做金融研报自动摘要的量化小组,GPU资源紧张但对首token延迟极其敏感&#xff1b…

2026/7/5 9:53:02 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻