10

I want to log out from stm32f405 via usart. In my syscall.c file i realize function to print via usart:

int _write(int file, char *ptr, int len)
{
    int todo;
    for (todo = 0; todo < len; todo++)
    {
    usart_send_char( *ptr++ );
    }
    return len;
}

Function usart_send_char( *ptr++ ); work as expected. But when i call:

printf("%s, %d, %3.2f\r\n", "asd", 777, 13.2 );

I get: asd, 777, 0.00 The float variable not printed correctly.

Makefile:

PROCESSOR = -mcpu=cortex-m4 -mthumb -mfloat-abi=softfp -mfpu=fpv4-sp-d16
CFLAGS += $(PROCESSOR) $(INCLUDES) $(STFLAGS) -Wall -fno-strict-aliasing $(C_PROFILE)
LDFLAGS = $(PROCESSOR) -Wl,-Map=$(PROG).map,--cref,--gc-sections

Used compilator:

Sourcery CodeBench Lite 2014.05-28

Where i am mistaken?

user3583807
  • 766
  • 1
  • 8
  • 26
  • 4
    You've got two correct answers. Please, vote for one of them and mark this question solved. – Bulkin Jan 29 '18 at 07:16

4 Answers4

24

I haven't used Sourcery Codebench gcc for STM32F4, but with the GCC ARM Embedded toolchain, floating point support in printf isn't enabled by default. To enable, add -u _printf_float to your LDFLAGS.

Frank Hunleth
  • 720
  • 4
  • 13
7
  1. I am not sure, but I think the mfloat-abi-flag must be set for the CFLAGS.
  2. STM32F4 has a FPU, so why do you use mfloat-abi=soft? Can't you use mfloat-abi=hard?
  3. If you don't need to calculate floatingpointvalue very often, you could do it in this way.

Code example:

 int i = 132;
 printf("Result is: %d.%d", i/10, i%10);
Lui
  • 159
  • 9
4

Snapshot of where you addd the command -u _printf_float in STM project settings

To enable the floats in sprintf, add -u _printf_float to your project as this picture indicate.

Waged
  • 372
  • 3
  • 14
0

The STM32cubeIDE has a checkbox for this capability but, apparently, it does the same thing as has been suggested: -u _printf_float. AND there's a separate one for _scanf_float. Right click on the project name and select "Properties" (at the bottom of the list).

Properties dialog box

noodle7
  • 21
  • 1
  • 4