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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版