Do you use RTOS? I have had the same effect. -u _printf_float seems only to work without RTOS.
The effect seems to be a faulty malloc heap overflow check in syscall.c
printf(“%f”) uses malloc. With RTOS, malloc does not return any memory and printf continues with a null pointer.
See this topic https://www.openstm32.org/forumthread353