我将 MDK-Lite 5.23 版与 STMicroelectronics STM32F072B-Disco“Discovery”板一起使用,并且我正在尝试使用 Discovery 示例提供的 Flash 示例。
我已经将此板和工具链用于其他示例,并且我编写了一些 SPI 和 GPIO 工作。IDE 的工作方式非常出色。但是,对于这个特定的项目,我可以构建代码并通过下载和使用重置按钮来运行它。一旦我使用 HAL_FLASHEx_Erase() 例程,我就无法在项目上使用调试器。执行该例程后,IDE 会弹出一个对话框“无法访问目标。关闭调试会话”。
就其价值而言,我知道这不是编程错误,因为如果我下载代码然后按重置按钮执行代码,它将起作用。我在 TI 板上使用了相同的调试器,它也能够对闪存进行编程并执行闪存例程。我很确定我不会擦除存储代码的闪存部分,所以不是那样。
如果我在 main.c 中跨过这条线
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
然后它删除调试会话。如果我改为进入同一行,然后跳过闪存擦除例程中的每个调用,那么它将起作用并最终跳出例程,我可以调试其余代码。