stm32l0:无法执行 MI 命令。使用 vFlashErase 数据包擦除闪存时出错

bie*_*nle 5 eclipse stm32

我正在使用带有 AC6 STM32 工作台 (eclipse) 的 Nucleo STM32L031。

我编写我的应用程序并进入调试模式,一切正常,直到我在我的应用程序中添加另一个功能。我注意到当我删除/评论“ new_function ”时,软件可以再次进入调试模式。但是,当我将“ new_function ”添加到代码中并进行调试时,会发生错误并且无法进入调试模式。

Error: Error in final launch sequence
Failed to execute MI command:
load C:Project_STM32L031K6-Nucleo\\Debug\\Project.elf 

Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet
Run Code Online (Sandbox Code Playgroud)

该错误不仅发生在这个特定的“new_function”上,还会发生在其他函数上,例如由 STM32Cube 生成的 TIM21_Init()。

我试图搜索解决方案,但找不到。

谢谢边

bca*_*tle 3

这是 OpenOCD 问题,而不是您的代码问题。当调试器命令文件引用“stlink-v2-1”但我实际拥有的是“stlink-v2”时,我遇到了这个问题。我正在使用 STM32F0 Discovery 板。

我相信 Nucleo 板具有“stlink-v2-1”,因此您可能会遇到与我相反的问题。检查并确保“运行菜单 > 调试配置 > 调试器 > OpenOCD 设置”下的设置已设置为正确的调试器。

在此输入图像描述

如果正在使用调试配置文件(选择“使用默认脚本”或“使用本地脚本”选项),请打开该文件并查找如下行:

source [find interface/stlink-v2.cfg]
Run Code Online (Sandbox Code Playgroud)

就我而言,项目向导创建了一个引用 stlink-v2-1 的模板。将其更改为上面的内容解决了问题。

更新:

当 Eclipse 崩溃并让 OpenOCD 在后台运行时,我也遇到了这个问题。跑步

$ ps aux | grep openocd
Run Code Online (Sandbox Code Playgroud)

如果您看到 OpenOCD 实例在调试器未运行时正在运行,请将其终止。