(SOLVED)Mbed-os 6 SWO viewer

Hello,

Itried that I faced to same state like you wrote.
However on line 40 of .cpp
//May want to add initialisation stuff here
So I found an init code for Nucleo/H743ZI2 from this discussion - Feed Detail (st.com)

       *(__IO uint32_t*)(0x5C001004) |= 0x00700000; // DBGMCU_CR D3DBGCKEN D1DBGCKEN TRACECLKEN
     
      //UNLOCK FUNNEL
      *(__IO uint32_t*)(0x5C004FB0) = 0xC5ACCE55; // SWTF_LAR
      *(__IO uint32_t*)(0x5C003FB0) = 0xC5ACCE55; // SWO_LAR
     
      //SWO current output divisor register
      //This divisor value (0x000000C7) corresponds to 400Mhz
      //To change it, you can use the following rule
      // value = (CPU Freq/sw speed )-1
       *(__IO uint32_t*)(0x5C003010) = ((SystemCoreClock / 2000000) - 1); // SWO_CODR
     
      //SWO selected pin protocol register
       *(__IO uint32_t*)(0x5C0030F0) = 0x00000002; // SWO_SPPR
     
      //Enable ITM input of SWO trace funnel
       *(__IO uint32_t*)(0x5C004000) |= 0x00000001; // SWFT_CTRL
     
      //RCC_AHB4ENR enable GPIOB clock
       *(__IO uint32_t*)(0x580244E0) |= 0x00000002;
     
      // Configure GPIOB pin 3 as AF
       *(__IO uint32_t*)(0x58020400) = (*(__IO uint32_t*)(0x58020400) & 0xffffff3f) | 0x00000080;
     
      // Configure GPIOB pin 3 Speed
       *(__IO uint32_t*)(0x58020408) |= 0x00000080;
     
      // Force AF0 for GPIOB pin 3
       *(__IO uint32_t*)(0x58020420) &= 0xFFFF0FFF;

It is still same state with CubeProgrammer, but it looks good with ST-Link utility. I did not checked it according to any official documentation, so I do not know what could be wrong.

Also according to this duscussion, Mbed has SWO builded in, so you can try it without external library, like is descripted here by @hudakz. But It seems there is also the init required.

#include "mbed.h"
#include "SerialWireOutput.h"

DigitalOut  led1(LED1);

extern "C" void itm_init() {
       *(__IO uint32_t*)(0x5C001004) |= 0x00700000; // DBGMCU_CR D3DBGCKEN D1DBGCKEN TRACECLKEN
     
      //UNLOCK FUNNEL
      *(__IO uint32_t*)(0x5C004FB0) = 0xC5ACCE55; // SWTF_LAR
      *(__IO uint32_t*)(0x5C003FB0) = 0xC5ACCE55; // SWO_LAR
     
      //SWO current output divisor register
      //This divisor value (0x000000C7) corresponds to 400Mhz
      //To change it, you can use the following rule
      // value = (CPU Freq/sw speed )-1
       *(__IO uint32_t*)(0x5C003010) = ((SystemCoreClock / 2000000) - 1); // SWO_CODR
     
      //SWO selected pin protocol register
       *(__IO uint32_t*)(0x5C0030F0) = 0x00000002; // SWO_SPPR
     
      //Enable ITM input of SWO trace funnel
       *(__IO uint32_t*)(0x5C004000) |= 0x00000001; // SWFT_CTRL
     
      //RCC_AHB4ENR enable GPIOB clock
       *(__IO uint32_t*)(0x580244E0) |= 0x00000002;
     
      // Configure GPIOB pin 3 as AF
       *(__IO uint32_t*)(0x58020400) = (*(__IO uint32_t*)(0x58020400) & 0xffffff3f) | 0x00000080;
     
      // Configure GPIOB pin 3 Speed
       *(__IO uint32_t*)(0x58020408) |= 0x00000080;
     
      // Force AF0 for GPIOB pin 3
       *(__IO uint32_t*)(0x58020420) &= 0xFFFF0FFF;
 }

FileHandle* mbed::mbed_override_console(int)
{
    static SerialWireOutput swo;
    return &swo;
}

int main()
{
    printf("Hello, SWO!\r\n");
    thread_sleep_for(500);
    printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);  
    thread_sleep_for(500);
    while (true) {
        led1 = !led1;
        printf("blink\r\n");
        thread_sleep_for(500);
    }
}

My mbed_app.json content

{
    "requires": ["bare-metal"],
    "target_overrides": {
        "*": {
            "target.printf_lib": "std",
            "target.device_has_add": ["ITM"]
			
        }
    }
}

BR, Jan