在stm32上使用调试器swo

Using debugger swo on stm32

正如标题所暗示的那样,我想在不使用 st-link utils.I 的情况下使用 swo 在 stm32F1 设备上进行调试 utils.I 我想我已经通过芯片上的 swo 发送消息了,但是我无法建立与正确端口的连接,因为某些教程建议我将 putty 与 telnet 端口 2332 一起使用。 关于我的配置的细节: 我主要的相关代码

    int _write(int file, char *ptr, int len)
{
    int DataIdx;
    for (DataIdx = 0; DataIdx < len; DataIdx++)
    {
        __io_putchar(*ptr++);
    }
    return len;
}

...

   int main(){
    while (1)
      {
        printf("Hi\n");
      }
}

我看过一些使用 eclipse 配置或 st-link 实用程序的教程,但我有一个非常自定义的工具链(我使用 conan、obko cmake 配置 https://github.com/ObKo/stm32-cmake、ocb 和 linux)使用 c++ 2017 和像 boost 这样的库的唯一目的是我不能使用 st-link 实用程序。

您需要启用 ITM 端口 0(或另一个端口),然后使用此端口输出字符。

当它工作时,你可以将它包装到 printf

uint32_t ITM_SendChar (uint32_t ch)
{
  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0) &&      /* ITM enabled */
      ((ITM->TER & 1) != 0)   )     /* ITM Port #0 enabled */
  {
    while (ITM->PORT[0].u32 == 0)
    {
      __NOP();
    }
    ITM->PORT[0].u8 = (uint8_t)ch;
  }
  return (ch);
}


我的配置问题是我的计算机上没有解析器来解析 ITM 消息,所以即使在我打开端口与芯片我的终端是空的消息。希望我找到了这个 very helpful parser on github 所以在使用上述配置编译程序后我所要做的就是 运行 openocd 配置两个关于 f1 芯片频率的选项和 ITM 端口打开的事实(这是我的 .cfg 文件):

source [find interface/stlink-v2.cfg]
source [find target/stm32f1x.cfg]
init
tpiu config internal - uart off 72000000
itm ports on

在另一个终端上,我 运行 从 github python3 swo_parser.py

编辑了解析器脚本