[其他ST产品] 如何在 printf 中使用 float?

[复制链接]
 楼主| yunfu1117 发表于 2025-5-14 11:00 | 显示全部楼层 |阅读模式
printf 中的 float 似乎不适用于在 stm32cubeide 中创建的新项目
我在 sw4stm32 中创建一个项目,可以正常,如果我导入 sw4stm32 项目到cubeide ,也可以正常工作,如果我在 cubeide 中创建新项目,就不起作用了
在所有情况下都使用选项 -u _printf_float,但在新的 cubeide 项目的情况下,此设置会以某种方式被忽略,并且包含错误的 prinf,在 mapfile 中可见
导入的项目../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard\libc_nano.a(lib_a-nano-vfprintf_float.o)
bad(新项目):../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard\libc_nano.a(lib_a-printf.o)
还没找到原因

公羊子丹 发表于 2025-5-24 09:05 | 显示全部楼层
CubeIDE 新建项目确实默认没启用 -u _printf_float,需要手动添加到 linker flags。
周半梅 发表于 2025-5-24 09:05 | 显示全部楼层
除了 -u _printf_float,建议也加上 -u _scanf_float,防止后续 scanf 用到 float 出问题。
帛灿灿 发表于 2025-5-24 09:06 | 显示全部楼层
看 map 文件的话,你说的那个 lib_a-printf.o 是不带浮点支持的,确实是问题点。
童雨竹 发表于 2025-5-24 09:07 | 显示全部楼层
检查下是不是用的是 nano printf,要么关掉 nano,要么加上 float 支持。
万图 发表于 2025-5-24 09:08 | 显示全部楼层
如果你是用 HAL 库,可以在 syscalls.c 里用 __io_putchar 配合 printf 实现,记得 linker 也要改。
Wordsworth 发表于 2025-5-24 09:08 | 显示全部楼层
我一般都在 C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> Miscellaneous 里加 -u _printf_float。
Bblythe 发表于 2025-5-24 09:09 | 显示全部楼层
还有一种方法是直接不用 printf,用 sprintf 转成字符串再输出,更可控。
Pulitzer 发表于 2025-5-24 09:10 | 显示全部楼层
建议在 STM32CubeIDE 中新建项目后,立刻复制导入项目的 linker flags 和 startup 文件,很多默认值不同。
Uriah 发表于 2025-5-24 09:11 | 显示全部楼层
printf 支持 float 很消耗空间,如果只是调试可以考虑临时用,用完就注释掉。
Clyde011 发表于 2025-5-24 09:12 | 显示全部楼层
可以对比 .ioc 文件和 .ld 文件,看看新旧两个项目里 CubeMX 或 linker script 哪些地方设置不同。
gaonaiweng 发表于 2025-5-31 17:59 | 显示全部楼层
新创建的 STM32CubeIDE 项目默认链接的是不带浮点支持的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部