If you can programmatically print characters out the JTAG UART by directing your program to write to the JTAG UART interface, that would tend to indicate that your hardware is probably configured alright. At least you do know what the base address is of the JTAG UART peripheral, but this doesn't prove that you have the IRQ from the JTAG UART connected to the Nios V processor.
I think you are correct to focus on the BSP configuration and see if there's anything out of order in that area that could explain what's going on when you printf. Fundamentally you need to have the JTAG UART configured as the peripheral that should connect to the stdin, stdout and stderr streams from the HAL library. And then depending on whether you selected reduced device drivers or regular drivers, there may be a need to have the IRQ from the JTAG UART connected in your Platform Designer system and properly represented in the BSP, or the system.h header.
Can you share the sequence that you use to create your BSP? It sounds like you may just be running niosv-bsp from the command line. If you could share some details about that, and also share your system.h and alt_sys_init.c that gets generated from the BSP generation flow, that may help shed some light on what's going on. If you can share the settings.bsp file that may be useful as well.