You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nucleo-F072RB读取电位器值时printf输出异常问题

问题原因与解决方案

你的代码问题出在printf的浮点格式化支持未启用:Nucleo-F072RB搭载的Cortex-M0内核资源有限,mbed默认的printf实现为了节省Flash和RAM空间,关闭了浮点格式(%f)的解析支持,因此会直接输出格式字符串%f而非实际数值。

另外补充一个细节:mbed的AnalogIn类返回的是0.0到1.0之间的浮点值,对应开发板的参考电压(Nucleo-F072RB的参考电压是3.3V,不是5V),要得到实际电压需要将读取值乘以3.3。

解决方法

方法1:转换为整数输出(无需修改配置)

把浮点值转换成整数形式输出,绕过浮点格式化限制,代码修改如下:

#include "mbed.h"

AnalogIn myPot(PA_5);

float value = 0.0f;

int main()
{
    while(true)
    {
        value = myPot;
        // 转换为毫伏级整数,方便用%d输出
        int mv_voltage = value * 3300;
        // 格式化输出为X.XXX V的形式
        printf("%d.%03d V\n", mv_voltage / 1000, mv_voltage % 1000);
        thread_sleep_for(2000);
    }
}

方法2:开启浮点printf支持(需修改项目配置)

如果一定要使用%f格式,需要在项目的mbed_app.json文件中添加配置,启用浮点printf支持:

{
    "target_overrides": {
        "*": {
            "platform.printf-float": true
        }
    }
}

修改配置后,原代码可以正常输出浮点值,但注意要乘以3.3得到实际电压:

#include "mbed.h"

AnalogIn myPot(PA_5);

float value = 0.0f;

int main()
{
    while(true)
    {
        value = myPot * 3.3f; // 转换为实际电压值(3.3V参考)
        printf("%f V\n", value);
        thread_sleep_for(2000);
    }
}

内容的提问来源于stack exchange,提问作者Alexandre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:55:24