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

Posted

技术标签:

【中文标题】stm32l0:执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错【英文标题】:stm32l0: Failed to execute MI command. Error erasing flash with vFlashErase packet 【发布时间】:2016-12-19 06:57:58 【问题描述】:

我正在使用带有 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

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

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

谢谢 边

【问题讨论】:

我在运行一些我完全不熟悉的代码时遇到了类似的问题(我自己还没有编写)。如果我正确理解您的问题,这是否意味着我正在运行的代码中有一些错误?你找到解决方案了吗? 【参考方案1】:

在我的情况下 (stm32f429) 更改此选项有助于:

【讨论】:

【参考方案2】:

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

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

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

source [find interface/stlink-v2.cfg]

在我的例子中,项目向导创建了一个引用 stlink-v2-1 的模板。将其更改为上述解决了问题。

更新:

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

$ ps aux | grep openocd

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

【讨论】:

以上是关于stm32l0:执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错的主要内容,如果未能解决你的问题,请参考以下文章

ARM:使用 stm32l0 nucleo 在几秒钟后自动擦除闪存

Stm32L0 内部EEPROM使用

在 STM32L0 上进入低功耗模式以使用 USART1

STM32L0系列超低功耗MCU可替换产品

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

stm32L0工程建立(HAL+IAR,无cubemx)