使用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
相关产品推荐
相关产品推荐

