macOS烧录stm32程序初步成功

06-02 1244阅读

完整总结: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 
    

    若烧录失败:

    (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
          • HardFault 异常:

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

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

      完整流程图


      最终建议

      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 擦除状态。

      附带几张图片

      macOS烧录stm32程序初步成功

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码