Конкретно printf() в конце концов вызывает write(), и тебе надо
переопределить write() так, как тебе надо. В библиотеке GNU ARM Embedded Tools, предоставляющей реализацию write(), могут находиться другие задействованные функции, тогда линкер будет ругаться, и тебе потребуется не только свою write() предоставить, но и несколько других системных функций (в общем случае они станут известны из анализа ругательств линкера).