C++ 在stm32上使用调试器swo

C++ 在stm32上使用调试器swo,c++,c,stm32,jtag,C++,C,Stm32,Jtag,正如标题所示,我想在不使用st link UTIL的情况下使用swo在stm32F1设备上进行调试。我想我已经在芯片上闪现了通过swo发送消息的代码,但我无法与正确的端口建立连接,因为一些教程建议我使用putty和telnet端口2332。 有关我的配置的详细信息: 我的主服务器上的相关代码 int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len;

正如标题所示,我想在不使用st link UTIL的情况下使用swo在stm32F1设备上进行调试。我想我已经在芯片上闪现了通过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;
}

我已经看到了一些使用Eclipse配置或StLink UnLLS的教程,但是我有一个非常定制的工具链(我使用柯南、OBK-CMAP配置、OCB和Linux),目的是使用C++ 2017和Boost等库,所以我不能使用StLink UTILS。p> 您需要启用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
消息的解析器,因此即使在芯片上有正确的配置,当我打开端口与芯片通信时,我的终端也没有消息。希望我发现了这一点,所以在使用上述配置编译程序之后,我所要做的就是运行
openocd
,配置两个选项,分别是
f1
芯片的频率和
ITM
端口已打开(这是我的
.cfg
文件):


在另一个终端上,我从github
python3swo\u parser.py运行解析器脚本,尝试与rdimon链接。specs@KamilCuk半托管对于我的应用程序来说太慢了,如果我没有纠正你的观点,你能详细说明一下吗?@KamilCuk,它没有链接,它说我有一些秘密函数的多个定义(lseek
-specs=nosys.specs-specs=nano.specs-specs=rdimon.specs
你在使用整个存档吗?
-specs=nosys.specs-specs=nano.specs因为你链接了两次。谢谢。我对你的答案投了赞成票,因为它帮助很大,但这并没有说明如何连接到正确的端口,所以我将自己做一个回答,包括默认端口线4和5的openocd配置检查它是否连接。连接只是通过设置这些位,我认为这个确切的函数是在cmsis头文件
cmsis/Include/core_cm3.h:1698:26
中定义的,所以它是其他一些不起作用的东西
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);
}


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