STM32 + VS Code 调试:解决 CCMRAM 导致的硬件死锁与 GDB 兼容性难题

利用vscode对STM32调试的通常流程是,GDB->OpenOCD->stlink驱动->stlink->芯片

CCM是F407系列的一块高速私有内存,只通过D-BUS与CPU直接相连。

GDB(即GNU Debugger),GDB原生为 Unix/Linux 桌面程序设计。在启动调试前,扫描可执行文件(.axf/.elf),并尝试将所有“已初始化数据段(RW Data)”同步到芯片的物理内存中,而这一步在单片机中通常是由于CPU上电自行完成。

如果你在程序里使用了CCM,照着传统的GDB的运行过程,GDB在调试开始时强行向CCM区域搬运数据,但是由于CCM只能由CPU访问,这就会触发HardFault(硬件死锁)。

解决方法是,不用GDB加载程序,只用GDB来调试,让CPU在上电后自己将数据从Flahs搬运。

只需要在.vscode目录下的launch.json文件添加

"loadFiles": [], // 阻止 GDB 自动下载

改用keil assistant或者其它方式进行下载即可成功绕过这个问题。

以下为launch.json的设置的全部参考

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "OpenOCD Debug (No Load)",
            "type": "cortex-debug",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "executable": "${workspaceFolder}/MDK-ARM/SigGen_Meas_System/SigGen_Meas_System.axf", // 指向 Keil 编译出的可执行文件
            "servertype": "openocd",
            "device": "STM32F407ZGT6", // 芯片型号
            
            "rtos": "", // 裸机填空,系统填上
            "liveWatch": {
                "enabled": true,      // 开启实时监控 (Live Watch)
                "samplesPerSecond": 4 // 实时刷新频率(次/秒)
            },
            "loadFiles": [], // 阻止 GDB 自动下载(用其它工具下载)
            "preLaunchCommands": [
                "monitor reset halt" // 强制复位芯片,确保单片机从头开始运行 Keil 的启动代码
            ],
            "interface": "swd",
            "configFiles": [
                "interface/stlink.cfg", // ST-LINK (原版失败可尝试 stlink-v2.cfg)
                "target/stm32f4x.cfg"   // F4 系列配置文件
            ],
            //"runToEntryPoint": "main",
            "svdFile": "D:/Keil/ARM/PACK/Keil/STM32F4xx_DFP/2.17.0/CMSIS/SVD/STM32F407.svd", //引用Keil Pack里的SVD文件
            "postLaunchCommands": [
                //模糊映射
                "set substitute-path C:/GitHub/ARM-software_CMSIS_5.DSPnew/CMSIS/DSP D:/Keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/DSP_Lib"
            ],
            "searchDir": [], // 若 OpenOCD 未加环境变量,填入 scripts 文件夹绝对路径
            "showDevDebugOutput": "none" // 调试报错时改 "raw" 以查看详细日志,平常none
        }
    ]
}

插件参考:Keil Assistant+Cortex-Debug+debug-tracker-vscode+MemoryView+Peripheral Viewer+RTOS Views

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值