步骤 1:创建 Python 脚本
在项目根目录下新建文件 copy_bin.py,内容如下:
Import("env")
import shutil
import os
def copy_bin_after_build(source, target, env):
try:
# 获取生成的 .bin 文件真实路径(核心代码)
build_dir = env.subst("$BUILD_DIR")
prog_name = env.subst("$PROGNAME")
bin_source = os.path.join(build_dir, f"{prog_name}.bin")
# 调试输出路径信息
print(f"Debug -> 原始路径: {bin_source}")
if not os.path.exists(bin_source):
raise FileNotFoundError(f".bin 文件未生成: {bin_source}")
# 复制到项目根目录
bin_dest = os.path.join(env["PROJECT_DIR"], os.path.basename(bin_source))
shutil.copy(bin_source, bin_dest)
print(f"✅ 成功复制到根目录: {os.path.basename(bin_dest)}")
except Exception as e:
print(f"❌ 错误: {str(e)}")
# 关键:绑定到构建完成后的动作(而非中间步骤)
env.AddPostAction("buildprog", copy_bin_after_build)
步骤 2:修改 platformio.ini
在配置文件中添加一行,调用脚本:
[env:rymcu_nebulapi_f103ve] ; 你的环境名称
platform = ststm32
board = ... ; 你的开发板型号
framework = stm32cube
; 添加此行,绑定编译完成后的动作
extra_scripts = post:copy_bin.py
步骤 3:重新编译
执行以下命令清理并编译:
pio run --target clean && pio run
验证结果
- 观察终端输出
如果成功,会看到以下信息:
Debug -> 原始路径: .pio/build/rymcu_nebulapi_f103ve/firmware.bin ✅ 成功复制到根目录: firmware.bin - 查看根目录文件
直接在 VS Code 资源管理器或终端中检查:
ls -l firmware.bin
原理说明
来自DeepSeek深度思考。