本文面向零基础新手,目标是让你不用猜、不用自己整理,按照步骤一步一步完成 STM32 电源电压采集与掉电告警模块

一、项目简介

用 ADC + 分压 + 滤波实现电源状态监控,适合电池和工业控制板。

这不是一篇只讲概念的文章,而是一篇可以直接照着做的项目教程。你会看到每一步要点哪里、填什么参数、做完以后看什么现象,以及失败时优先检查哪里。

【此处配图:STM32 电源电压采集与掉电告警模块 项目最终效果图】

二、章节跳转目录

  1. 项目简介
  2. 前置准备
  3. 项目实现逻辑
  4. 详细操作步骤
  5. 参数设置表
  6. 新手易错点
  7. 常见问题 FAQ
  8. 底部总结
  9. 温馨提示

三、前置准备

1. 硬件准备

  1. 开发板或目标设备:根据项目选择 STM32、ESP32、传感器模块或上位机电脑。
  2. 连接工具:常见是 USB 数据线、ST-Link、USB 转串口、杜邦线。
  3. 调试工具:串口助手、万用表、逻辑分析仪或示波器按项目需要准备。

【此处配图:硬件连接前的桌面准备图】

2. 软件准备

  1. VSCode 或 Keil:用于打开工程和编辑代码。
  2. Git:用于保存版本,避免改坏后回不去。
  3. Python / CMake / SDK:如果项目涉及脚本、C++ 或云端连接,再安装对应工具。
  4. 串口助手:推荐先用 115200 波特率调试。

【此处配图:软件工具安装列表截图】

3. 文件夹准备

在电脑上新建一个英文路径文件夹,例如:

ext D:\EmbeddedProjects\power-monitor-stm32

不要使用中文路径、空格路径、微信下载目录或桌面临时目录。

四、项目实现逻辑

这个项目可以拆成 4 个阶段:

  1. 先搭建最小工程:确保能编译、能运行、能输出日志。
  2. 再接入核心功能:比如传感器、协议、云端、串口或上位机。
  3. 然后加错误处理:给每个等待动作加超时,给每个失败结果加日志。
  4. 最后整理成模板:补 README、接线图、参数表和测试记录。

【此处配图:项目实现流程图】

五、详细操作步骤

步骤 1:创建项目文件夹

操作流程:

  1. 打开资源管理器。
  2. 进入 D:\EmbeddedProjects。
  3. 右键空白处,点击 新建 -> 文件夹
  4. 文件夹名称填写:power-monitor-stm32。

需要填写或设置的参数:

  • 文件夹名称:power-monitor-stm32
  • 路径:D:\EmbeddedProjects\power-monitor-stm32

做完以后看什么:

你应该能看到一个空文件夹,后续所有代码、截图、日志都放在这里。

避坑提醒:

不要把项目放在中文路径里,很多编译器和脚本工具会因此报错。

【此处配图:新建项目文件夹截图】

步骤 2:建立最小工程

操作流程:

  1. 如果是 MCU 项目,打开 CubeMX 或已有模板工程。
  2. 如果是 Python 项目,打开 VSCode,选择 File -> Open Folder,打开刚才的文件夹。
  3. 如果是 C++ 项目,新建 src、include、 ests 三个文件夹。
  4. 新建 README.md,写下项目名称和目标。

需要填写或设置的参数:

  • 工程名:power-monitor-stm32
  • 串口波特率:115200
  • 编译模式:Debug

做完以后看什么:

工程能打开,目录结构清晰,至少有 README 和源码目录。

避坑提醒:

不要一开始就复制一大堆旧代码。先保证空工程能编译或脚本能运行。

【此处配图:最小工程目录截图】

步骤 3:加入日志输出

操作流程:

  1. MCU 项目中添加 LOGI、LOGE 这类日志宏。
  2. Python 项目中使用 print() 或 logging.info()。
  3. C++ 项目中先用 std::cout 输出关键状态。
  4. 第一条日志统一输出项目名和版本号。

需要填写或设置的参数:

  • 日志等级:INFO
  • 模块名称:Hardware
  • 第一条日志内容:STM32 电源电压采集与掉电告警模块 start

做完以后看什么:

程序启动后,你能在串口、终端或日志窗口看到启动信息。

避坑提醒:

没有日志就等于盲调。新手一定要先让程序“会说话”。

【此处配图:串口或终端日志截图】

步骤 4:实现核心功能

操作流程:

  1. 根据本文项目目标,先写一个最小函数。
  2. 函数只做一件事,例如读取一次数据、发送一帧命令、解析一条消息。
  3. 在函数入口和失败位置打印日志。
  4. 单独运行这个函数,确认结果正确。

需要填写或设置的参数:

  • 超时时间:100ms 到 1000ms
  • 重试次数:3 次
  • 返回值:成功返回 0 或 true,失败返回错误码

做完以后看什么:

日志里应该能看到“开始执行 -> 执行成功”或明确错误码。

避坑提醒:

不要把初始化、读取、解析、上传全部写进一个大函数。新手越要拆小。

【此处配图:核心函数代码位置截图】

步骤 5:加入错误处理

操作流程:

  1. 找到所有可能失败的函数调用。
  2. 给每个函数返回值加判断。
  3. 失败时打印错误码。
  4. 等待外设或网络时必须加超时。

需要填写或设置的参数:

  • I2C/SPI/UART 超时:100ms
  • 网络连接超时:5000ms
  • 最大重试次数:3

做完以后看什么:

故障发生时,程序不会卡死,而是输出错误日志。

避坑提醒:

不要使用无限等待,例如一直 while(flag == 0),这会让设备看起来像死机。

【此处配图:错误处理代码截图】

步骤 6:做一次完整测试

操作流程:

  1. 重新编译或运行项目。
  2. 清空串口助手或终端窗口。
  3. 从上电或启动开始记录日志。
  4. 按项目目标执行一次完整流程。
  5. 把成功日志保存到 logs 文件夹。

需要填写或设置的参数:

  • 日志文件名:success_test_01.log
  • 测试次数:至少 3 次

做完以后看什么:

连续 3 次测试结果一致,没有随机失败。

避坑提醒:

只成功一次不算稳定。嵌入式项目至少要重复测试几次。

【此处配图:完整测试日志截图】

步骤 7:写 README

操作流程:

  1. 打开 README.md。
  2. 写清楚项目用途。
  3. 写清楚硬件接线。
  4. 写清楚软件版本。
  5. 写清楚如何编译、下载、运行。

需要填写或设置的参数:

ext 项目名称:STM32 电源电压采集与掉电告警模块 工程目录:D:\EmbeddedProjects\power-monitor-stm32 串口波特率:115200 测试状态:已完成最小功能验证

做完以后看什么:

别人拿到项目后,不问你也能按 README 跑起来。

避坑提醒:

README 不要等最后写。你现在觉得不会忘的东西,两周后很可能忘干净。

【此处配图:README 示例截图】

六、参数设置表

参数建议值说明
工程路径英文路径避免工具链出错
串口波特率115200新手最常用
编译模式Debug方便调试
超时时间100ms 到 1000ms防止卡死
重试次数3 次兼顾稳定性和速度

七、新手易错点

  1. 没有先跑通最小工程:一上来就加复杂功能,出错后很难定位。
  2. 路径使用中文:导致编译器、脚本或工具找不到文件。
  3. 没有日志:失败时不知道卡在哪里。
  4. 不检查返回值:函数明明失败了,程序还继续往后跑。
  5. 没有 README:项目过几天自己都不知道怎么运行。

八、常见问题 FAQ

Q1:我没有基础,可以直接照着做吗?

可以。你只要按顺序完成每一步,不要跳步骤。每一步都要看“做完以后看什么”。

Q2:我的开发板或电脑环境和教程不一样怎么办?

优先保持工程路径、串口波特率、日志格式一致。硬件引脚和芯片型号按你自己的板子修改。

Q3:编译失败怎么办?

先看第一条 error,把第一条 error 解决后再重新编译。不要同时改很多地方。

Q4:运行结果和教程不一致怎么办?

先保存日志,再检查接线、参数、路径和工具版本。不要凭感觉乱改。

九、底部总结

这个项目的关键不是一次写出完美代码,而是建立一套小白也能照着走的流程:建工程 -> 打日志 -> 做核心功能 -> 加错误处理 -> 完整测试 -> 写 README

十、温馨提示

如果你是刚入门的嵌入式工程师,请记住:每次只改一个地方,每完成一步就验证一次。 这样就算出错,也能快速知道问题从哪里开始。