在 STM32CubeIDE 中格式化浮点数
STM32F103。在 STM32CubeIDE 中格式化浮点数时遇到问题。我在项目设置中勾选了 “use newlib-nano to print floating numbers” 来打印浮点数。代码如下:char strP;uint16_t cx = 0;cx = snprintf(strP, 100, "%6.2f, %6.2f, %6.2f, %6.2f", 0.0115697104, -0.0796313286, -0.0220388453, -0.111881733);出现错误时,会打印:26815634999686289245754584189029181710324847797922429453525901675501503951146118153956426275383940846635237101275691881352391832390627762028461487571337216.00,0.00, -0.00,0.00"或:0.00 2.00 0.00 2.00已经测试过:[*]通过 STM32CubeIDE 将堆栈从 0x400 增加到 0x500。
[*]更改链接器脚本。
我也碰到过这个问题,后来发现不仅要勾选浮点支持,还得在 syscalls.c 中手动开启 _write,否则输出会出问题。 你的 snprintf 用法看起来没问题,建议你检查一下 use float with printf 那个选项是否和 -u _printf_float 一起加进了链接器参数。 改完堆栈之后有没有 clean 一下工程再重新 build?有时候老 build 文件会干扰结果。 用的是哪个 libc?如果是 nano 版本,需要确保编译器链接参数里有 -u _printf_float 和 -u _scanf_float。 我之前是把 newlib-nano 换成 full newlib 就没问题了,虽然体积大了点,但浮点打印稳。 可以试试用 sprintf 替代 snprintf 看看有没有不同效果,我有个项目就是 snprintf 打印 float 有问题,sprintf 就正常。 检查一下是否把 float 当成 double 传进去了,STM32F1 默认没有硬件浮点,容易出错。 用串口打印的时候,底层 _write() 实现正确吗?也可能是串口缓存没处理好导致数据打印异常。 有条件的话试试用 SEGGER RTT 代替 UART 来调试输出,我觉得它打印浮点数比串口稳定很多。 这几个浮点数建议先在调试模式下 Watch 一下变量值,确认是 printf 打印错还是前面数据本身有误 默认 是不支持浮点数格式化打印 的,启用浮点支持需要额外的链接选项和正确的库配置。
页:
[1]