1

我买了一个便宜的“st-link v2 仿真程序员”和一个 Ebay 的 STM32f013C8T6。在 Windows 8 上使用 Atollic 和 MCU 的 SWD 接口,我能够上传和运行代码、设置断点和观察变量,但我不能在 ITM 或 SWV Trace 上使用 printf。

我还尝试使用 Nucleo stm32l152re 板的正版 ST-LINK v2,结果相同。

ST-LINK 与 MCU 的连接如下:

ST-LINK - 单片机:

SWDIO - SWDIO,接地 - 接地,SWCLK - SWCLK,3.3V - 3.3V

ebay ST-LINK 上未使用的引脚:RST、SWIM

正品 ST-LINK 上未使用的引脚:NRST、SWO

对此问题的任何建议将不胜感激,如果需要,我很乐意提供更多信息。

4

4 回答 4

2

尝试阅读为 ST-Link 克隆添加跟踪支持。必须在硬件级别修改常见的廉价 ST-Link 克隆,以公开 ITM 跟踪所依赖的 SWO 引脚。(然后,当然,您还必须连接该信号。)

我有两个不同的 ST-Link 克隆,它们都没有连接到 PA10 引脚,就像链接的文章中一样。

于 2018-06-03T15:15:31.333 回答
1

我知道这个问题很老了。我希望你找到了解决方案,但我仍然想投入两分钱,因为我遇到了同样的问题。

我的理解是,对于 SWV 功能,您需要连接 SWO 引脚。当您遇到此问题时,您是否能够查看异常跟踪日志或 printf 重定向以外的任何 SWV 功能?

鉴于这种认识,我正在修改我的硬件以支持 SWO 引脚以供将来使用。

于 2018-05-19T15:15:41.073 回答
0

我今天也遇到了同样的问题。我正在使用没有 SWO(SWV) 引脚的 STLink V2克隆,我找到了两个解决方案

  1. 其他人回答她时,克隆板的硬件修改在这里为 ST-Link 克隆添加跟踪支持

  2. 使用openOCD 的半主机技术:

    2.1 在调试配置中,从调试探针列表中选择“ST-LINK (OpenOCD)” ,如下所示debugger

    2.2 在启动选项卡中,向下滚动并在运行命令占位符中,键入“monitor arm semihosting enable”,如此处所示运行命令。2.3 点击应用,然后关闭调试配置。

    2.4 打开项目属性。从C/C++ Build中,打开Tool settings。从MCU GCC Linker中,选择Miscellaneous。在“其他标志”上,单击“添加”按钮并键入“-specs=rdimon.specs -lc -lrdimon”,如此处所示的参数

    2.5 单击应用,然后单击应用并关闭

    2.6 然后你需要排除syscalls.c。打开它的属性。从C/C++ Build中,选择Settings并选中Exclude source from build按钮,然后单击Apply and Close,如下所示Exclude syscalls.c

    2.7 最后一步是在任何printf之前,你应该调用initialise_monitor_handles(),它的原型应该被包括在内,如下所示,在构建并进入调试模式并点击resume之后,消息会打印在控制台本身上,如下所示打印

于 2021-02-04T14:15:10.423 回答
0

我假设您已经完成了 Atollic 在此链接中所说的内容?基本上,ITM 需要以下内容来重定向 printf()

应用程序应将 printf() 输出发送到 ITM 通道

JTAG 探头必须支持 SWV

调试器必须启用 SWV 跟踪并启用相应的 ITM 通道

尽管有您的供应商,我认为所有 ST-Link 都应该支持 printf 重定向。(否则,请使用 ST-Link 实用程序并更新您的 ST Link 固件)

希望这可以帮助。

于 2015-10-12T23:23:49.587 回答