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

macOS烧录stm32程序初步成功

完整总结:STM32H7 项目编译与烧录流程(macOS + OpenOCD/GDB)


1️⃣ 编译工程

在项目目录下执行 make,生成 ELF 文件(如 Blink.elf):

cd /Users/code/Stm32code/Blink/build
make clean   # 可选:清理旧文件
make         # 编译生成 Blink.elf

2️⃣ 启动 OpenOCD 调试服务

终端1:启动 OpenOCD 连接 STM32H7(ST-Link V2):

openocd -f interface/stlink.cfg -f target/stm32h7x.cfg

关键输出

Info : STLINK V2J17S4 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.226333
Info : Device: STM32H74x/75x
Info : flash size probed value 2048k
Info : Bank (0) size is 1024 kb, base address is 0x08000000

注意

  • 如果出现 Error: erase time-out or operation error sector 0,可能是 Flash 保护或时序问题(后续需处理)。

3️⃣ 使用 GDB 烧录程序

终端2:启动 GDB 并连接 OpenOCD:

arm-none-eabi-gdb -q /Users/code/Stm32code/Blink/build/Blink.elf
(gdb) target remote localhost:3333  # 连接OpenOCD
(gdb) monitor reset halt            # 复位并暂停CPU

首次烧录失败

(gdb) load
Error erasing flash with vFlashErase packet

解决方法

  1. 手动擦除 Flash
    (gdb) monitor flash erase_sector 0 0 7  # 擦除所有扇区
    
  2. 降低 ST-Link 时钟速度
    (gdb) monitor adapter speed 1000  # 1MHz
    
  3. 重新烧录
    (gdb) load  # 成功输出如下
    
    成功输出
    Loading section .isr_vector, size 0x298 lma 0x8000000
    Loading section .text, size 0x1468 lma 0x8000298...
    Start address 0x08001638, load size 5928
    Transfer rate: 5 KB/sec, 988 bytes/write.
    

4️⃣ 运行与调试
(gdb) monitor reset halt      # 确保复位
(gdb) continue                # 启动程序

验证

  • 检查硬件行为(如 LED 闪烁)。
  • 如需调试,可设置断点:
    (gdb) break main
    (gdb) continue
    

5️⃣ 关键问题与解决
  1. Flash 擦除失败

    • 原因:STM32H7 的 Flash 接口时序敏感或保护位未解除。
    • 解决
      • 手动擦除扇区:monitor flash erase_sector 0 0 7
      • 降低 ST-Link 速度:monitor adapter speed 1000
  2. HardFault 异常

    • 如果复位后卡在 HardFault,检查:
      • 向量表地址是否正确(应为 0x08000000)。
      • 时钟配置是否匹配硬件(H7 需设置正确的 Flash 等待周期)。
  3. OpenOCD 警告

    Warn : Prefer GDB command "target extended-remote :3333"
    
    • 可忽略,或改用 target extended-remote :3333(功能相同)。

完整流程图

make编译
终端1:启动OpenOCD
终端2:GDB连接OpenOCD
首次load失败?
手动擦除Flash+降速
重新load
烧录成功
复位并运行

最终建议

  1. 自动化脚本:将常用命令写入脚本(如 flash.sh):
    #!/bin/bash
    arm-none-eabi-gdb -ex "target remote :3333" -ex "monitor reset halt" -ex "load" -ex "monitor reset run" Blink.elf
    
  2. 备用烧录方式:直接使用 OpenOCD 命令(避免 GDB 交互):
    openocd -f interface/stlink.cfg -f target/stm32h7x.cfg -c "program Blink.elf verify reset exit"
    

通过此流程,可高效完成 STM32H7 的编译、烧录和调试。遇到问题时,优先检查 硬件连接Flash 擦除状态
附带几张图片

在这里插入图片描述

相关文章:

  • 海思3519V200 上基于 Qt 的 OpenCV 和 MySql 配置开发
  • Simple Factory(简单工厂)
  • 《软件工程》第 14 章 - 持续集成
  • C++——STL——unordered_map与unordered_set的使用以及使用哈希表封装unordered_map/set
  • DIY 自己的 MCP 服务-核心概念、基本协议、一个例子(Python)
  • ChatGPT 如何工作——提示工程、对话记忆与上下文管理解析
  • 最新Spring Security实战教程(十六)微服务间安全通信 - JWT令牌传递与校验机制
  • 从“无我”到“无生法忍”:解构执着的终极智慧
  • Godot的RichTextLabel富文本标签,鼠标拖拽滚动,方向键滚动,底部吸附,自动滚动
  • 时序模型上——ARIMA/MA/AR
  • OpenCV图像认知(二)
  • 编程中优秀大模型推荐:特点与应用场景深度分析
  • JAVA Apache POI实战:从基础Excel导出入门到高级功能拓展
  • java写一个简单的冒泡排序
  • vue实例 与组件实例
  • 视频存储开源方案
  • Flutter Web 3.0革命:用WebGPU实现浏览器端实时光追渲染,性能提升300%
  • 论文分享之Prompt优化
  • C++模板与字符串:从入门到精通
  • 什么是HTTP HTTP 和 HTTPS 的区别
  • 建立充电站需要多少钱/黑马教育培训官网
  • 响应式网站建设的未来发展6/常州网站推广
  • 如何制作淘客导购网站/成都网站快速排名软件
  • 大连地区做网站/在线资源搜索神器
  • 手机网站模板欣赏/2345网址大全
  • 重庆网站建设公司价格/短视频询盘获客系统