我买了一个便宜的“st-link v2仿真编程器”和Ebay的STM32f013C8T6。使用 Windows 8 上的 Atollic 和 MCU 的 SWD 接口,我可以上传和运行代码、设置断点和监视变量,但无法通过 ITM 或 SWV Trace 使用 printf。
我也尝试过使用 Nucleo stm32l152re 板的正版 ST-LINK v2,结果相同。
ST-LINK与MCU的连接如下:
ST-LINK - MCU:
SWDIO-SWDIO, 接地 - 接地, SWCLK-SWCLK, 3.3V - 3.3V
ebay ST-LINK 上未使用的引脚: 休息、游泳
正品 ST-LINK 上未使用的引脚: NRST、SWO
有关此事的任何建议将不胜感激,如果需要,我很乐意提供更多信息。
尝试阅读向 ST-Link 克隆添加跟踪支持。常见的廉价 ST-Link 克隆必须在硬件级别进行修改,以暴露 ITM 跟踪所依赖的 SWO 引脚。 (当然,您还必须连接该信号。)
我有两个不同的 ST-Link 克隆,两者都没有与 PA10 引脚连接,如链接文章中所示。
我知道这个问题很老了。我希望你找到了解决方案,但我仍然想投入我的两分钱,因为我遇到了同样的问题。
我的理解是,对于 SWV 功能,您需要连接 SWO 引脚。当您遇到此问题时,您是否能够查看异常跟踪日志或除 printf 重定向之外的任何 SWV 功能?
鉴于这一认识,我正在修改我的硬件以支持 SWO 引脚以供将来使用。
我想你已经按照Atollic在这个链接中所说的做了? 基本上,ITM 需要以下内容来重定向 printf()
应用程序应将 printf() 输出发送到 ITM 通道
JTAG探针必须支持SWV
调试器必须启用 SWV 跟踪并启用相应的 ITM 通道
尽管有您的供应商,我认为所有 ST-Link 都应该支持 printf 重定向。 (否则,请使用 ST-Link 实用程序并更新您的 ST Link 固件)
希望这有帮助。
我今天也遇到了同样的问题。我使用的是 STLink V2 clone,它没有 SWO(SWV) 引脚,我找到了两个解决方案:
克隆板的硬件修改,正如其他人在这里回答的那样,这是为 ST-Link 克隆添加跟踪支持。
的半主机技术:
调试配置中的2.1 从调试探针列表中选择“ST-LINK (OpenOCD)”,如下所示。
startup 选项卡中,向下滚动并在 Run Commands 占位符中,键入 “monitor arm semihosting enable”,如下所示。
应用然后关闭调试配置。
2.4 打开项目属性。从C/C++ Build,打开工具设置。从MCU GCC Linker中,选择Miscellaneous。在 Other flags 上,单击 Add 按钮并输入 "-specs=rdimon.specs -lc -lrdimon"
,如下所示。
应用,然后单击应用并关闭。
2.6 那么你需要排除syscalls.c
。打开它的属性。从 C/C++ Build,选择 Settings 并选中按钮 从构建中排除源,然后单击 Apply and Close,如下所示。
printf
之前,您应该调用
initialise_monitor_handles()
,并且应包含其原型,如下所示,构建并进入调试模式并点击resume后,消息将打印在控制台上本身如下所示。