Semihosting != ITM_Sendchar()
ITM_Sendchar() nutzt die ITM periepherie um daten zu senden (ähnlich wie
ein UART nur viel besser :) )
Dafür brauchst du einen SWD Debugger (JTAG kann dies nicht). Der ST-Link
auf dem STM32F7 Discovery kann dies zwar aber dafür müsstest du noch
einen Pin vom F7 mit dem ST-Link verbinden. Ich glaube Out-of-the box
ist dieser nicht verbunden. Außerdem brauchst du einen SWO viewer. Z.B.
openocd oder das eigene ST-Link Utility.
Du kannst ITM_Sendchar direkt aufrufen oder du überschreibst die
"_write()" methode aus der system lib, dann werden alle printf aufrufe
an ITM gesendet
Semihosting nutzt die Debugger peripherie und systemcalls. Es ist
bidirektional.
Im Grunde machst du bei jedem printf eines semihosting aufrufs einen
kompletten break, d.h. die CPU wird angehalten, anschließend werden
systemcalls an den PC gesendet oder SystemCalls vom PC empfangen und
verarbeitet. Also im Beispiel des printf wird es nicht auf dem F7
ausgeführt sondern auf deinem PC!
Achtung dies bedeutet auch das theoretisch ein STM32 mit semihosting mal
eben deine festplatte formatieren könnte :) oder einfach mal ein paar
programme auf dem PC starten :)