历史上的今天
返回首页

历史上的今天

今天是:2025年04月23日(星期三)

正在发生

2018年04月23日 | STM32 无法通过 %f 打印浮点数

2018-04-23 来源:eechina

一、问题

使用 IAR 开发 STM32,发现无法通过 printf 重定向到串口打印出浮点数。代码如下: 
这里写图片描述

输出结果如下: 
这里写图片描述

可见,浮点数部分无法正常显示。

二、解决方法

这是由于 IAR 默认选择的 printf 库不支持浮点数的的输出。可在设置选项中修改。如下:默认使用 small,改为 auto 即可。 
这里写图片描述

三、备注

在不修改设置的情况下,尝试过如下两种代码解决。一种是通过 sprintf 将浮点数转换成字符串输出,另一种是分解整数和小数部分,分别输出。第一种方法也是不可行的,只有分解可以。

代码如下:


/*

* cyang 2018/2/27

* mcu printf float value

*/


#include


void printf_float(float a)

{

    char tmp[8]={0};

    int i;

    sprintf(tmp, "%f", a);

    for(i=0; i<8; i++)

        printf("%c", tmp[i]);

    printf("\n");

}


void PrintFloat(float value)

{

    int tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;

    tmp = (int)value;

    tmp1=(int)((value-tmp)*10)%10;

    tmp2=(int)((value-tmp)*100)%10;

    tmp3=(int)((value-tmp)*1000)%10;

    tmp4=(int)((value-tmp)*10000)%10;

    tmp5=(int)((value-tmp)*100000)%10;

    tmp6=(int)((value-tmp)*1000000)%10;

    printf("f-value=%d.%d%d%d%d%d%d\r\n",tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6);

}


int main(int argc, char const *argv[])

{

    /* code */

    float a = 2.354954;

    printf("a = %f\n", a);


    printf_float(a);

    PrintFloat(a);


    return 0;

}


推荐阅读

史海拾趣

Acmelux Taiwan Inc公司的发展小趣事

Acmelux Taiwan Inc公司自成立以来,一直致力于电子技术的研发与创新。早期,公司凭借一款具有独特功能的半导体产品,成功打破了市场的固有格局,赢得了众多客户的青睐。随着技术的不断迭代,Acmelux逐渐在芯片设计、封装测试等领域取得了突破,成为行业内的技术领军者。公司通过持续的研发投入,不仅巩固了现有市场地位,还积极拓展新的应用领域,为公司的长远发展奠定了坚实基础。

Gigarams Semiconductor Device Corp公司的发展小趣事
这可能是由于传感器精度不足、控制器算法不准确或驱动器性能不稳定等原因导致的。解决方案包括提高传感器精度、优化控制器算法和更换性能更稳定的驱动器。
Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

2000年3月,成都华微科技诞生。当时,集成电路设计行业刚刚起步,市场竞争激烈。然而,公司凭借对中国电子信息产业集团的坚定信任,以及对中国集成电路设计市场的深刻洞察,毅然决然地踏上了这条充满挑战的道路。初创期的华微科技,虽然规模较小,但团队成员都怀揣着对技术的热情和对未来的憧憬,为公司的长远发展奠定了坚实的基础。

Bourns公司的发展小趣事

Bourns公司的创立源自Marlan和Rosemary Bourns夫妇在自家车库中的创新努力。在1947年,这两位创始人成功研发出了创新的航天传感器,这一突破性的发明为飞行员提供了精确校正飞机垂直定位的方法。这一创新不仅解决了航空领域的关键问题,也为Bourns公司的诞生奠定了坚实的基础。

CET Technology公司的发展小趣事

CET Technology一直以来都高度重视产品质量和技术研发。为了保障产品的品质和可靠性,公司建立了完善的实验室体系,包括电磁兼容实验室、电气综合实验室等多个专业实验室。这些实验室配备了先进的实验仪器设备,为公司研发高品质产品提供了有力保障。近期,CET的实验室成功获得了CNAS实验室能力认证,这是对公司技术实力和质量管理水平的高度认可。此次认证将进一步提升CET在国际市场上的竞争力,为公司未来的发展奠定了坚实基础。

以上就是关于CET Technology公司在电子行业中的5个发展故事。这些故事展示了CET在技术创新、业务拓展、智慧化转型和品质保障等方面的努力和成果,也体现了公司在电子行业中的领先地位和影响力。

CTC Coils Ltd公司的发展小趣事

面对日益严峻的环境问题,CTC Coils Ltd公司积极响应国家绿色发展的号召,开始实施绿色环保战略。公司引进先进的生产设备和工艺,优化生产流程,减少能源消耗和废物排放。同时,公司还研发出了一系列环保型电感线圈产品,满足了市场对绿色电子产品的需求。

问答坊 | AI 解惑

这么久还是没什么进展。。跟预想的方案差的太远了。。表个态该死的nec

本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 两天了,竟然电机还没调完。。郁闷中。本来挺简单的电机驱动。。都是万恶的nec  …

查看全部问答>

使用RLDRAM控制器时的一点疑惑

在使用XILINX的RLDRAM控制器的时候,有一点不解的地方 控制器在用户接口一侧,数据宽度为72bit,地址为24位,其中低三位为bank地址 然而在系统接口一侧,数据宽度为36bit,地址为19+3=22位宽 这样在两端分别计算RLDRAM的容量,值是不一样的啊~~~ ...…

查看全部问答>

安全防范系统及设备介绍

安全监控系统 安全监控系统的全称为公共安全防范系统,是以保护人身财产安全、信息与通讯安全,达到损失预防与犯罪预防目的。 ㈠防盗报警安防系统 防盗报警系统是通过安装在防护现场的各种入侵探测器对所保护的区域进行人员活动的探测(入侵), ...…

查看全部问答>

怎样实现一个类似CRichViewEdit的控件

在EVC4.2下想实现一个窗口,可以显示多行文本,并且窗口有滚动条。本想创建一个CWnd,采用带滚动条的参数CWnd:CreateEx()来创建,可是创建出来的窗口都看不到滚动条。用CScrollView自己派生一个吧,析构函数是保护类型的,我在别的文件中还用不了( ...…

查看全部问答>

100PIN的FSMC接T6963液晶控制器

STM32F103VET接5V 240*128液晶 T6963控制器,现在屏上有显示,但是乱码。FSMC配置为8位数据宽度SRAM模式,数据地址非复用。NE1为片选,FSMC的A16为命令(状态)数据选择口线。所以我对写命令(读状态)地址:*((__IO uint8_t *)((uint32_t)0x6002 ...…

查看全部问答>

驱动编写问题

驱动如何编写,…

查看全部问答>

单片机发光二极管点亮实验

各位高手求助,小弟按照郭天祥的教材刚开始学习单片机,下面是点亮一个发光二极管实验,单片机控制二极管亮灭循环,但是实际运行时发现,一会是两个灯亮灭循环,一会是一个灯亮灭循环,不知道怎么搞的,求助各位了! #include <reg52.h>#defin ...…

查看全部问答>

LED开关电源的PCB设计技术

    在开关电源设计中PCB板的物理设计都是最后一个环节,如果设计方法不当,PCB可能会辐射过多的电磁干扰,造成电源工作不稳定,以下针对各个步骤中所需注意的事项进行分析…

查看全部问答>