你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 无法打印%f

[复制链接]
C_YANG_HEN 提问时间:2018-2-27 13:23 /
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2018-2-27 13:23
18个回答
nyszx 回答时间:2018-2-27 21:14:53
toofree 回答时间:2018-2-27 22:01:18
对IAR不熟,会一点。
用LCD习惯了,一般先sprintf到字符串,然后再printf打印字符串。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

C_YANG_HEN 回答时间:2018-2-28 09:43:05
感谢大家的回复。问题解决了。在IAR设置里,有对 printf 的设置,默认是不支持浮点数的。修改选项后便可。如下:
Image 1.png

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励,解决就好~

查看全部评分

C_YANG_HEN 回答时间:2018-2-28 09:45:19
toofree 发表于 2018-2-27 22:01
对IAR不熟,会一点。
用LCD习惯了,一般先sprintf到字符串,然后再printf打印字符串。 ...

先使用如下代码 sprintf 再打印字符串也是不可以的。输出结果为 %f * * * *

void printf_float(float a)
{
        char tmp[8]={0};
        int i;
        sprintf(tmp, "%f", a);
        for(i=0; i<8; i++)
                printf("%c", tmp);
        printf("\n");
}

问题解决了,见#13
C_YANG_HEN 回答时间:2018-2-28 09:46:22
nyszx 发表于 2018-2-27 21:14
附上官方地址吧:http://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f- ...

感谢,不过应该不是这个问题吧。我没用任何OS。

问题解决了,见#13
C_YANG_HEN 回答时间:2018-2-28 09:47:35
maxtch 发表于 2018-2-27 18:34
看来 IAR 的 printf 把打印浮点给精简掉了。这块代码的确是很占地方,我平时用 GCC + newlib 一般也是用去 ...

感谢你的提示,确实是 IAR 默认的 printf 输出不支持浮点,修改选项后便可。
C_YANG_HEN 回答时间:2018-2-28 09:48:01
pythonworld 发表于 2018-2-27 18:37
打印浮点数比较耗费内存,有些编译器需要加option,具体看看编译器的帮助。

感谢回复,确实需要修改 IAR 设置
xmstudio 回答时间:2018-2-28 10:49:30
拆开就可以了啊,没必要这么麻烦,把一个float拆成两个int类型的整数部分和小数部分,其中ADC_Final_Result是float型,ADC_Final_Result_d和ADC_Final_Result_f是uint16_t
  1.     ADC_Final_Result = ADC_Result_Sum * 3.358 / 4095 / 8;        //基准3.358V

  2.                   /* 因为sprintf不能输出float型变量,拆成两个int输出 */
  3.                   ADC_Final_Result_d = (uint16_t)ADC_Final_Result;        //整数部分
  4.                   ADC_Final_Result -= ADC_Final_Result_d;        //减去整数
  5.                   ADC_Final_Result_f = (uint16_t)(ADC_Final_Result * 1e03);        //保留三位小数
  6.                   sprintf(cBuffer, "Voltage = %d.%03dV", ADC_Final_Result_d, ADC_Final_Result_f);
  7.                   OLED_Print(cBuffer, 4);
复制代码


C_YANG_HEN 回答时间:2018-2-28 14:28:00
xmstudio 发表于 2018-2-28 10:49
拆开就可以了啊,没必要这么麻烦,把一个float拆成两个int类型的整数部分和小数部分,其中ADC_Final_Result ...

拆开是可以。
12
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版