Problem with USART communication in low-level

The normal printf() function loaded in avr-gcc programs does not support floating point (to save space.)
See Strange problem with "sprintf" - Programming Questions - Arduino Forum

This has nothing to do with the "low level" drivers, which handle essentially only "chars", and your initial messages attempting to put floats (or even ints) directly into uart registers were very wrong. Formatting/converting various data types for printing (printf/sprintf/etc) and actually sending the resulting characters to the USART are two different tasks.