stm32 printf float变量

时间:2015-02-05 00:56:54

标签: printf stm32

我想通过usart从stm32f405注销。 在我的syscall.c文件中,我实现了通过usart打印的功能:

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

函数usart_send_char( *ptr++ );按预期工作。但是当我打电话时:

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

我得到:  asd, 777, 0.00 float变量未正确打印。

生成文件:

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

使用的编译器:

Sourcery CodeBench Lite 2014.05-28

我错的地方?

3 个答案:

答案 0 :(得分:12)

我没有为STM32F4使用Sourcery Codebench gcc,但是对于GCC ARM Embedded toolchain,默认情况下不启用printf中的浮点支持。要启用,请将-u _printf_float添加到LDFLAGS。

答案 1 :(得分:5)

  1. 我不确定,但我认为mfloat-abi-flag必须设置为 CFLAGS。
  2. STM32F4有一个FPU,为什么你用mfloat-abi = soft?你不能使用mfloat-abi = hard?
  3. 如果您不经常计算浮点值,可以这样做。
  4. 代码示例:

     int i = 132;
     printf("Result is: %d.%d", i/10, i%10);
    

答案 2 :(得分:0)

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

要在sprintf中启用浮点数,请如下图所示将-u _printf_float添加到您的项目中。