使用或不使用 "Use Flash Loader" IAR 调试 STM32L151xD

Debug STM32L151xD with or without "Use Flash Loader" IAR

我在使用 IAR 6.50.6 在 STM32L151xD 上调试各种固件时遇到了一个奇怪的行为。

我发现使用 Use Flash Loader 刷入 FW 检查一切顺利。在那之后,如果我尝试在同一设备上刷入另一个未选中 Use Flash Loader 的固件,刷入过程会很顺利,但我无法调试,IAR 会显示一系列验证错误,例如

Verify error at address 0x08000000, target byte: 0xD0, byte in file: 0xC8 

我知道闪存加载器从主机读取应用程序二进制映像,解压缩映像,然后将映像写入闪存。

如果我 check/uncheck 在 IAR 上尝试调试会怎样?

不引人注目的 Use Flash Loader 选项对将应用程序编程到目标设备的方式有重大影响:

  • 如果选中 Use Flash Loader,IAR 调试器会将一个微型 flash loader 应用程序加载到 RAM 中目标 MCU 进而能够将用户应用程序编程到目标闪存中。闪存加载器应用程序通常专门针对 MCU 设备系列(如 STM32L1)实现,因为每个设备(系列)都有其特定的闪存需要编程方式(解锁机制、时序等)。 IAR workbench 附带了大量适用于所有支持设备的闪存加载程序。请参阅 IAR C-SPY Debugging Guide 中的 Flash 加载程序 一章,了解有关闪存加载程序机制的更详细说明。

  • 如果未选中 Use Flash Loader,IAR 调试器将依赖调试探针来对目标 MCU 的闪存进行编程。这取决于特定的调试器(驱动程序),它是否能够对特定设备进行编程。 根据我的经验,流行的 Segger J-Link debug probes are able to program nearly all ST STM32 MCU devices without Use Flash Loader, while the IAR i-Jet 调试探针缺乏这种能力 - 仅举出两个探针。

遗憾的是,当配置的调试器无法对特定目标 MCU 进行编程时,IAR EWARM 调试器不会发出警告(或错误)消息。相反,它似乎假设编程成功了。只有启用选项验证下载,调试器才会检查用户应用程序是否已成功刷入目标。

在您的情况下,下载验证失败,设备为空白,因为您的调试探针显然无法在没有闪存加载器的情况下对目标 MCU 闪存进行编程。您需要为所有项目中的调试探针启用 Use Flash Loader