printf() & scanf() redirection is supported by the library (independent of the IDE).
The library defines a “weak” function called _write() to output the formatted string. If you create an AC6 project, it will include the file syscalls.c that redefines _write() to interate over the string and call __io_putchar(). CubeMX does not create a _write() function so nothing is output (the comments surrounding PUTCHAR_PRTOTYPE are misleading).
Since printf() passes a string to _write() and the HAL accepts a string, I suggest you create a version of _write() that passes the string to the HAL and eliminate the __io_putchar() routine.