当前位置: 首页 > article >正文

STM32 ADC实战:用一块电位器+OLED,5分钟搞定电压表(附完整代码)

STM32 ADC实战用一块电位器OLED5分钟搞定电压表附完整代码当你想测量某个引脚的电压值时STM32的ADC模块就是你的数字万用表。本文将带你用最简硬件一个电位器OLED屏幕和清晰代码快速实现可调电压的实时监测。无需复杂理论直接动手感受模拟信号到数字世界的转换魅力。1. 硬件准备与电路连接所需材料清单STM32F103C8T6核心板其他型号亦可10kΩ电位器0.96寸OLED显示屏I2C接口杜邦线若干电路连接示意图3.3V ────┬─────── OLED_VCC │ [10kΩ] │ Wiper ─── PA0 (ADC输入) │ GND ─────┴─────── OLED_GND电位器两端分别接3.3V和GND中间滑动端接STM32的PA0引脚ADC通道0。OLED的SCL、SDA分别接PB6、PB7电源接3.3V和GND。注意确保ADC输入电压不超过3.3V否则可能损坏芯片。电位器阻值建议选择1kΩ-50kΩ范围。2. 软件环境配置首先在STM32CubeIDE中新建工程配置关键参数ADC配置模式Independent mode数据对齐Right alignment扫描模式Disabled连续转换Disabled触发方式Software trigger采样时间55.5 cyclesI2C配置用于OLED标准模式(100kHz)无地址检测GPIO配置PA0设为模拟输入PB6(I2C1_SCL)、PB7(I2C1_SDA)设为复用开漏输出生成代码后添加OLED驱动库如SSD1306到项目。以下是关键初始化代码片段void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct {0}; // 72MHz HCLK配置 RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL9; HAL_RCC_OscConfig(RCC_OscInitStruct); RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1; HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2); }3. ADC数据采集实现ADC采集的核心在于原始值到实际电压的转换。STM32的12位ADC输出范围0-4095对应0-3.3V电压uint16_t Read_ADC(ADC_HandleTypeDef* hadc) { HAL_ADC_Start(hadc); if (HAL_ADC_PollForConversion(hadc, 10) HAL_OK) { return HAL_ADC_GetValue(hadc); } return 0; } float ADC_To_Voltage(uint16_t adcValue) { return (adcValue * 3.3f) / 4095.0f; }电压测量精度优化技巧多次采样取平均#define SAMPLE_TIMES 16 uint16_t Get_Stable_ADC(ADC_HandleTypeDef* hadc) { uint32_t sum 0; for (int i0; iSAMPLE_TIMES; i) { sum Read_ADC(hadc); HAL_Delay(1); } return sum / SAMPLE_TIMES; }参考电压校准若板载有REF引脚float vref 1.2f; // 内部参考电压典型值 float actual_vdd (vref * 4095) / adc_ref_value;4. OLED动态显示实现结合SSD1306驱动库创建电压显示界面void Show_Voltage(float voltage) { char str[16]; OLED_Clear(); // 标题 OLED_ShowString(0, 0, STM32 Voltmeter, 16); // 原始ADC值 OLED_ShowString(0, 2, ADC:, 16); sprintf(str, %4d, adc_value); OLED_ShowString(32, 2, str, 16); // 电压值 OLED_ShowString(0, 4, Voltage:, 16); sprintf(str, %5.2fV, voltage); OLED_ShowString(64, 4, str, 16); // 进度条 uint8_t len (uint8_t)(voltage * 30 / 3.3); OLED_DrawRectangle(0, 6, 127, 7); OLED_Fill(0, 6, len, 7, 1); OLED_Refresh(); }显示效果优化添加波动指示器←→表示稳定电压超限警告如3.0V时显示!最小/最大电压记录功能5. 完整代码整合主循环实现周期性采集与显示int main(void) { HAL_Init(); SystemClock_Config(); // 外设初始化 MX_GPIO_Init(); MX_I2C1_Init(); MX_ADC1_Init(); OLED_Init(); uint16_t adc_value; float voltage; while (1) { adc_value Get_Stable_ADC(hadc1); voltage ADC_To_Voltage(adc_value); Show_Voltage(voltage); HAL_Delay(200); // 控制刷新率 } }扩展功能实现按键控制采样速率电压变化趋势图通过串口输出数据到PC阈值报警功能如LED闪烁6. 常见问题排查ADC读数不稳定检查电源滤波在VDD与GND间加0.1μF电容增加采样时间可尝试239.5 cycles确保电位器接触良好OLED无显示确认I2C地址通常0x78或0x7A检查上拉电阻4.7kΩ到3.3V验证初始化时序正确电压测量偏差// 校准公式示例 float calibrated_voltage (raw_voltage * 3.3f) / 4095 * calibration_factor;实测中发现当旋转电位器时OLED上的电压值应平滑变化。如果出现跳变可尝试在PA0与GND之间添加100nF电容以滤除噪声。

相关文章:

STM32 ADC实战:用一块电位器+OLED,5分钟搞定电压表(附完整代码)

STM32 ADC实战:用一块电位器OLED,5分钟搞定电压表(附完整代码) 当你想测量某个引脚的电压值时,STM32的ADC模块就是你的数字万用表。本文将带你用最简硬件(一个电位器OLED屏幕)和清晰代码&#x…...

YAITracker:基于MCP协议的AI原生项目管理平台部署与实战

1. 项目概述:一个为AI时代开发者量身定制的智能工单追踪器 如果你和我一样,日常开发工作已经离不开Cursor、Claude这类AI编程助手,甚至开始尝试协调多个AI智能体并行处理任务,那你肯定体会过一种割裂感:我们的编码效率…...

基于声学信号与CNN的3D打印故障实时检测系统

1. 项目概述3D打印技术近年来在制造业领域获得了广泛应用,但打印过程中的机械故障问题一直困扰着从业者。传统基于视觉或接触式传感器的监测方法存在成本高、部署复杂等局限性。我们团队开发了一套基于声学信号分析和卷积神经网络(CNN)的实时故障检测系统&#xff0…...

3分钟搞定!TegraRcmGUI:让Nintendo Switch注入变得像点外卖一样简单

3分钟搞定!TegraRcmGUI:让Nintendo Switch注入变得像点外卖一样简单 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 还在为复杂的Nin…...

Sunshine游戏串流终极指南:5步打造高性能个人游戏云

Sunshine游戏串流终极指南:5步打造高性能个人游戏云 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想在客厅电视上畅玩PC独占的3A大作?或是希望…...

Figma MCP 服务器:用 AI 助手无缝连接设计与开发工作流

1. 项目概述与核心价值 最近在探索如何将设计资产更无缝地融入开发流程时,我深度体验了 kingjethro999/figma-mcp 这个项目。简单来说,这是一个实现了 Figma Model Context Protocol (MCP) 服务器的开源工具。它的核心价值在于,为那些支持…...

基于全志V3s的DIY Spotify播放盒设计与实现

1. 项目概述:基于全志V3s的DIY Spotify播放盒 去年冬天,我在调试家里的音响系统时突然意识到一个问题:虽然手机能直接蓝牙连接音响,但每次播放都要手动操作,而且音质受限于手机的解码能力。于是萌生了制作一个专用网络…...

从抓包到出结果:一份给新手的Kali+Hashcat破解WiFi握手包避坑清单(附hc22000格式最新转换指南)

从抓包到破解:KaliHashcat实战避坑指南与hc22000格式详解 当你第一次尝试用Kali Linux抓取WiFi握手包并用Hashcat破解时,可能会遇到各种意想不到的问题。从抓包失败、格式转换错误到Hashcat运行速度不如预期,每个环节都可能让你卡壳数小时。本…...

FPGA加速Ising问题分解的混合架构设计与优化

1. 项目概述:FPGA加速Ising问题分解的混合架构 在当今计算密集型应用领域,组合优化问题(COPs)的求解一直是学术界和工业界关注的焦点。这类问题广泛存在于集成电路设计、物流调度、机器学习模型训练等场景,其计算复杂度…...

告别繁琐配置:用快马AI智能生成多平台软件安装包,效率提升十倍

告别繁琐配置:用快马AI智能生成多平台软件安装包,效率提升十倍 最近在开发一个员工考勤管理系统,功能包括员工信息录入、打卡记录、统计报表导出等。后端用Spring Boot,前端是Vue,数据库MySQL。开发完成后&#xff0c…...

用STM32F103C8T6的HAL库点亮WS2812:从CubeMX配置到流水灯效果的保姆级教程

STM32F103C8T6 HAL库驱动WS2812全彩灯带实战指南 第一次接触WS2812全彩LED时,我被它单线控制、无限级联的特性惊艳到了。这种只需要一根信号线就能控制数百个LED的器件,在智能家居、装饰照明和创意装置中应用广泛。本文将手把手教你如何使用STM32F103C8…...

如何快速修复ROG游戏本色彩问题:G-Helper简单实用的终极指南

如何快速修复ROG游戏本色彩问题:G-Helper简单实用的终极指南 【免费下载链接】g-helper Fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, ProArt, A…...

担心翻新/返修/二手?10款查看电脑所有硬件制造日期和使用时间的软件

AI模型:Deepseek 仅供参考。 10款查看电脑所有硬件制造日期和使用时间的软件 本文所有信息截至2026年5月,各软件版本以2025—2026年公开发布的稳定版为准。建议始终从各工具官网下载,避免第三方捆绑或篡改。 1. HWiNFO64 软件全名:HWiNFO64…...

如何在5分钟内免费下载Sketchfab 3D模型:Firefox终极解决方案

如何在5分钟内免费下载Sketchfab 3D模型:Firefox终极解决方案 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 你是否曾为Sketchfab上那些精美的3D模型而…...

Claude配置编辑器:可视化工具提升AI助手配置效率与规范性

1. 项目概述:一个专为Claude设计的配置编辑器最近在折腾AI助手Claude的时候,发现了一个挺有意思的开源工具——mrspot-dev/claude-settings-editor。简单来说,这是一个专门用来编辑Claude配置文件的图形化界面工具。如果你和我一样&#xff0…...

从需求到实车:手把手拆解一个基于AUTOSAR和Matlab的汽车车窗控制软件V模型开发全流程

从需求到实车:手把手拆解一个基于AUTOSAR和Matlab的汽车车窗控制软件V模型开发全流程 在汽车电子软件开发领域,V模型因其严格的阶段划分和测试验证机制,成为确保功能安全与可靠性的黄金标准。本文将以"车窗防夹控制"这一典型功能为…...

csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:[蓝桥杯青少年组国赛 2025] 第一题

csp信奥赛C高频考点专项训练之字符串 --【字符串基础】:[蓝桥杯青少年组国赛 2025] 第一题 题目描述 给你两个字符串 SSS 和 TTT。你需要找出 SSS 中有多少个连续子串,能够与字符串 TTT 相匹配。 匹配规则如下: 进行匹配的 SSS 的子串&…...

别再硬编码了!用Vue Router + el-menu动态生成后台管理系统左侧菜单(附完整代码)

Vue Router与el-menu深度整合:打造企业级动态菜单解决方案 后台管理系统开发中,左侧菜单栏的动态渲染是个高频痛点。想象一下这样的场景:每次新增功能模块都要手动修改菜单代码,不同角色看到的菜单项需要差异化展示,菜…...

动手抓波形:用逻辑分析仪实测PCI总线读时序,对照协议看信号变化

实战PCI总线时序分析:用逻辑分析仪捕捉读操作关键信号 在硬件开发与调试过程中,理解总线协议与实际信号波形之间的关系是一项核心技能。PCI总线作为曾经广泛使用的并行总线标准,其严谨的时序规范至今仍是学习总线协议的经典案例。本文将带您走…...

当BAPI_ACC_DOCUMENT_POST搞不定时,试试SAP的“内部过账接口”:POSTING_INTERFACE_DOCUMENT实战教程

当BAPI_ACC_DOCUMENT_POST受限时:深入解析SAP内部过账接口POSTING_INTERFACE_DOCUMENT 在SAP财务模块开发中,BAPI_ACC_DOCUMENT_POST常被视为创建会计凭证的"标准答案",但资深ABAP开发者都知道,当遇到特殊总账标识&…...

Windows Server 2019/2022 部署 Redmine 5.0.0 生产环境指南:从安装到邮件通知全搞定

Windows Server 2019/2022 企业级 Redmine 5.0.0 生产环境部署实战 在企业级项目管理工具的选择中,Redmine以其开源灵活的特性成为许多技术团队的首选。不同于个人开发环境的简易部署,生产环境下的Redmine需要更高的稳定性、安全性和可维护性。本文将带您…...

在CentOS 7.6上,用Python 3.8和Docker 24.0.7搞定DataHub 0.12.0部署(保姆级避坑实录)

在CentOS 7.6上精准部署DataHub 0.12.0的全流程避坑指南 当你面对一台全新的CentOS 7.6服务器,想要部署DataHub 0.12.0时,可能会遇到各种意想不到的"坑"。本文将从零开始,带你一步步完成Python 3.8.18、Docker 24.0.7等特定版本的…...

番茄小说下载器完整教程:3分钟打造个人离线图书馆

番茄小说下载器完整教程:3分钟打造个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否在地铁上因为网络信号差而无法继续阅读小说?是…...

开源会话分析器实战:从数据埋点到自动化脚本优化

1. 项目概述与核心价值 最近在折腾一个很有意思的开源项目,叫 arkbuilder/open-claw-session-analyzer 。乍一看这个项目名,可能会觉得有点抽象,什么“Open Claw”、“Session Analyzer”,听起来像是某种数据分析工具。但如果你…...

告别商家固件依赖:手把手教你为全志H3开发板编译并移植Qt 5.12.9运行环境

全志H3开发板深度定制:从零构建Qt 5.12.9嵌入式运行环境实战指南 当开发板商家的预装系统无法满足项目需求时,真正的嵌入式开发者需要掌握自主构建完整软件栈的能力。本文将带你深入全志H3平台,从交叉编译环境搭建到Qt库深度裁剪&#xff0c…...

绝地求生玩家必看:罗技鼠标宏智能压枪配置指南

绝地求生玩家必看:罗技鼠标宏智能压枪配置指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为绝地求生(PUBG&…...

WeChatExporter终极指南:免费导出微信聊天记录的完整解决方案

WeChatExporter终极指南:免费导出微信聊天记录的完整解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机损坏而丢失重要的微信工作对话&a…...

Qt Creator里玩转多项目(.pro)开发:从独立应用到动态库,一个解决方案搞定所有子模块

Qt Creator多项目管理实战:从独立应用到动态库的完整解决方案 在复杂的软件开发中,单一项目往往难以满足产品需求。当你的产品需要同时包含GUI应用、后台服务和共享功能库时,如何高效管理这些模块间的依赖关系?Qt Creator的子项目…...

高效突破Steam创意工坊下载限制:WorkshopDL让跨平台玩家轻松获取模组

高效突破Steam创意工坊下载限制:WorkshopDL让跨平台玩家轻松获取模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾因平台限制而无法下载心仪的Steam创意…...

向量数据库 PGVector、Qdrant 与 Milvus

一、PGVector为什么推荐 PGVector 作为 RAG 的入门首选?理由很直接——你的项目大概率已经在用 PostgreSQL。 直接加一个扩展,不需要引入新的数据库组件,运维成本最低。DBA 会用 PG,就会维护 PGVector。这种“复用已有基础设施”的…...