ifo*_*e2d 6 stm32 gdbserver swd
几年来,我一直在使用 mbed 在线编译器来创建 .bin 文件,然后像这样在命令行中使用 ST-LINK/V2 USB 加密狗刷写它们,一切都完美无缺:
st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000
Run Code Online (Sandbox Code Playgroud)
今天我下载了 STM32CubeIDE for Linux (Fedora 30) 并开始学习本教程,使用 maple mini (STM32F103CBT6)。
构建项目并开始调试运行后,我得到输出:
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...
Run Code Online (Sandbox Code Playgroud)
之后,我无法再启动调试会话,因为我得到了这个:
我可以看到 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
Run Code Online (Sandbox Code Playgroud)
幸运的是,我可以通过使用 ST-Link UTILITY(在 Windows 上)并在连接之前按住重置按钮,然后进行完全擦除来返回我的起点,如下所述:
http://www.kerrywong.com/2012/08/02/the-dreaded-cannot-connect-to-st-link-error-message/
但显然,这对于完成任何富有成效的开发来说并不是一个可行的情况。我究竟做错了什么?
在“调试配置”对话框的“调试器”选项卡中,我尝试将“接口”设置为 SWD(实际上已经是这样),并且我还尝试了“重置行为”的所有选项,结果没有改变。
ifo*_*e2d 15
为什么总是出现这种情况?我为某事挣扎了几个小时,然后又花了 20 分钟用截图等方式提出尽可能简洁明了的问题,然后在发布后两分钟我找到了答案,通常是在另一个 SO 答案中,我不知何故在几个小时内从未见过搜索。我认为我在 SO 上提出的问题中有一半是这样结束的。
问题似乎是,除非您声明要使用 SWD 以及在哪些引脚上使用,否则默认情况下不会启用它。因此,一旦新程序刷新,SWD 连接就会失效。我猜默认情况下 mbed 程序会在标准引脚上保留 SWD 的使用,所以这从来都不是问题。
无论如何要避免这种情况,请返回引脚分配和配置(双击项目资源管理器中的 .ioc 文件)。为 SWD 设置适当的引脚(在我的情况下为 PA13、PA14),然后在“系统核心”下,单击 SYS 并将调试选项设置为“串行线”。