[STM32L4] CubeIDE 中的 sprintf 无法使用 %f。

[复制链接]
353|11
lvluoo 发表于 2025-9-26 11:08 | 显示全部楼层 |阅读模式
当我创建一个新项目并在链接器选项中添加 "-u _printf_float",并选择“使用 newlib-nano 的 printf 浮点支持 (-u _printf_float)”时,sprintf 仍然无法转换浮点值。

但当我导入一个 TrueStudio 项目(其中 sprintf 可以正常处理浮点数)时,在 CubeIDE 中也能正常工作。操作上,哪里有问题?

编译器设置:
mcpu=cortex-m4 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F446xx -DDEBUG -c -I../Inc -I../Drivers/CMSIS/Include -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb


连接设置
-mcpu=cortex-m4 -T"D:\HiDrive\STM32\workspace_1.0.0\printf\STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="${ProjName}.map" -Wl,--gc-sections -static -u _printf_float --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -u _printf_float -Wl,--start-group -lc -lm -Wl,--end-group

onlycook 发表于 2025-9-26 15:07 | 显示全部楼层
链接器选项的顺序可能影响优先级。
duo点 发表于 2025-9-26 16:08 | 显示全部楼层
-u _printf_float被重复了两次,可能导致冲突。
elephant00 发表于 2025-9-26 15:08 | 显示全部楼层
调整specs顺序,nano.specs在nosys.specs之前,因为后者可能覆盖前者的配置
flycamelaaa 发表于 2025-9-26 17:09 | 显示全部楼层
移除重复的-u _printf_float,保留一个。
jcky001 发表于 2025-9-26 18:10 | 显示全部楼层
可能链接器没有正确包含浮点支持。
onlycook 发表于 2025-9-26 18:11 | 显示全部楼层
检查TrueStudio项目的.cproject或.project文件,确认是否有额外的链接器标志
powerantone 发表于 2025-9-26 21:12 | 显示全部楼层
强制链接数学库,newlib-nano的浮点支持需要显式链接数学库,但可能被其他选项覆盖。
stormwind123 发表于 2025-9-26 19:13 | 显示全部楼层
在CubeIDE中确认工具链路径是否正确。
stormwind123 发表于 2025-9-26 19:13 | 显示全部楼层
在CubeIDE中确认工具链路径是否正确。
七毛钱 发表于 2025-9-26 22:14 | 显示全部楼层
可能需要升级一下CubeIDE版本到最新。
内政奇才 发表于 2025-9-26 18:45 | 显示全部楼层
将优化级别从-O0改为-Og,避免编译器过度优化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

85

帖子

0

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