STM32CubeIDE只能刷一次,不能SWD调试

STM32CubeIDE can only flash once, no SWD debugging

几年来,我一直在使用 mbed 在线编译器创建 .bin 文件,然后使用 ST-LINK/V2 USB 加密狗在命令行中像这样刷新它们,一切都完美无缺:

st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000

今天我下载了适用于 Linux (Fedora 30) 的 STM32CubeIDE,并开始使用 maple mini (STM32F103CBT6) 学习本教程。

https://www.digikey.co.nz/en/maker/projects/getting-started-with-stm32-introduction-to-stm32cubeide/6a6c60a670c447abb90fd0fd78008697

构建项目并开始调试后 运行,我得到输出:

STMicroelectronics ST-LINK GDB server. Version 5.3.2
Copyright (c) 2019, STMicroelectronics. All rights reserved.

Starting server with the following options:
        Persistent Mode            : Disabled
        Logging Level              : 1
        Listen Port Number         : 61234
        Status Refresh Delay       : 15s
        Verbose Mode               : Disabled
        SWD Debug                  : Enabled

Waiting for debugger connection...
Debugger connected
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.2.0                  
      -------------------------------------------------------------------



Log output file:   /tmp/STM32CubeProgrammer_2ZxzGk.log
ST-LINK SN  : 34006B063058373138650943
ST-LINK FW  : V2J34S7
Voltage     : 3.21V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x410
Device name : STM32F101/F102/F103 Medium-density
Flash size  : 64 KBytes
Device type : MCU
Device CPU  : Cortex-M3



Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_Q2zZSF.srec
  File          : ST-LINK_GDB_server_Q2zZSF.srec
  Size          : 4648 Bytes
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 4]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.595



Verifying ...




Download verified successfully 


Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Error! Failed to read target status 
Debugger connection lost.
Shutting down...

之后我无法再启动调试会话,因为我得到了这个:

我可以看到 LED 按预期闪烁,所以我知道程序实际上已经闪到板上了。但是我无法使用 STM32CubeIDE 做任何进一步的事情,当我尝试像以前一样通过命令行刷新时,现在也不起作用:

[root@localhost Downloads]# st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000 
st-flash 1.5.1-38-gc3577b5
2020-03-24T13:51:09 INFO common.c: Loading device parameters....
2020-03-24T13:51:09 WARN common.c: Invalid flash type, please check device declaration
  core status: unknown
Unknown memory region

幸运的是,我可以 return 通过使用 ST-Link UTILITY(在 Windows 上)并在连接前按住重置按钮,然后进行完全擦除,作为此处提到:

http://www.kerrywong.com/2012/08/02/the-dreaded-cannot-connect-to-st-link-error-message/

但显然这不是完成任何生产性开发的可行情况。我做错了什么?

在 'Debug configurations' 对话框的 'Debugger' 选项卡中,我尝试将 'Interface' 设置为 SWD(实际上已经设置)并且我还尝试了 [=] 的所有选项41=],结果没有变化。

为什么总是这样?我纠结了几个小时,然后又花了 20 分钟用截图等尽可能简洁明了的问题,然后在发布两分钟后我找到了答案,通常是在另一个 SO 答案中,我不知何故在几个小时内从未见过搜索。我想我在 SO 上问过的一半问题都是这样结束的。

问题好像是,除非你声明要使用SWD,在什么管脚上,默认是不会启用的。因此,一旦闪现新程序,SWD 连接就会中断。我想 mbed 程序默认在标准引脚上保留了 SWD 的使用,所以这从来都不是问题。

无论如何要避免这种情况,请返回引出线和配置(双击项目资源管理器中的 .ioc 文件)。为 SWD 设置适当的引脚(在我的例子中为 PA13、PA14),然后在 'System Core' 下,单击 SYS 并将调试选项设置为 'Serial Wire'。

是的,那是正确的 iforce2d。 启用串行线调试后,您现在可以将新程序闪存到电路板(在 IDE 内),而无需先使用 ST-Link 实用程序擦除所有内容。

按照以下步骤操作:

  1. 将 BOOT0 引脚连接到高电平 (3.3v) – Blue Pill 板上有一个方便的跳线。 (不确定 maple mini)
  2. 按重置按钮。
  3. 构建并运行你的新程序(在STM32CubeIDE)。
  4. Return跳线归零。

一旦你在 STM32 中有一个启用了 SWD 引脚的程序,那么你将不再被“锁定”,因此你不需要在此之后再次使用 BOOT0(或复位)…

注意:调试配置(最适合我):Debug probe = ST-LINK (OpenOCD) ;重置模式 = 软件系统重置.

在我的案例 (STM32F429I-DISC) 中,我发现 SWD 中使用的其中一个引脚被我错误地分配给了另一个用途。我发布了它,调试开始工作。我刚刚找到了 ST 板的原理图并检查了哪些引脚用于 SWD。