stm32 printf float变量

use*_*807 4 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;
}
Run Code Online (Sandbox Code Playgroud)

功能usart_send_char( *ptr++ );按预期工作.但是当我打电话时:

printf("%s, %d, %3.2f\r\n", "asd", 777, 13.2 );
Run Code Online (Sandbox Code Playgroud)

我得到: asd, 777, 0.00 浮动变量未正确打印.

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
Run Code Online (Sandbox Code Playgroud)

二手compilator:

Sourcery CodeBench Lite 2014.05-28
Run Code Online (Sandbox Code Playgroud)

哪里弄错了?

Fra*_*eth 15

我没有使用Sourcery Codebench gcc用于STM32F4,但是使用GCC ARM嵌入式工具链,默认情况下不启用printf中的浮点支持.要启用,请添加-u _printf_float到LDFLAGS.


Lui*_*Lui 6

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

代码示例:

 int i = 132;
 printf("Result is: %d.%d", i/10, i%10);
Run Code Online (Sandbox Code Playgroud)


小智 6

在 STM 项目设置中添加命令 -u _printf_float 的位置的快照

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