RISC-V技术论坛
直播中

刘丰标

8年用户 1163经验值
私信 关注
[问答]

使用VScode的PIO开发GD32VF103,但是串口无法打印浮点数怎么解决?

我最近在使用VScode的PIO开发GD32V,使用的是longan的模板,但是我将串口输出重定义到printf函数中,发现无法使用%f输出浮点数,想问问应该怎么配置,我看到的一种说法是在makefile文件中增加允许浮点输出的参数,但是我在VScode的PIO下找不到这个文件,想问问大家应该怎么办可以使用printf的%f输出浮点数

回帖(1)

回头太晚

2025-11-7 17:28:34

要在VSCode的PlatformIO环境中解决GD32VF103串口无法打印浮点数的问题,请按以下步骤操作:


根本原因


RISC-V工具链默认禁用了printf()的浮点支持以节省代码空间,需手动启用浮点格式符(%f)功能。




解决方案:修改PlatformIO配置




  1. 打开 platformio.ini 文件



    • 在项目根目录找到并打开此配置文件




  2. 添加链接器参数
    在对应的环境配置(如 [env:longan])中添加以下配置:


    build_flags = 
       -Wl,-u,_printf_float       # 强制链接器包含浮点打印支持

    完整配置示例:


    [env:longan]
    platform = gd32v
    board = longan
    framework = gd32vf103-sdk
    build_flags =
       -Wl,-u,_printf_float



  3. 保存并重新编译



    • 保存文件后,PlatformIO会自动重新编译项目






验证串口重定向代码


确保你的printf()重定向正确(通常在main.c中):


#include 

// 串口发送函数示例(根据实际串口修改)
void _putchar(char c) {
    usart_data_transmit(USART0, c);
    while (usart_flag_get(USART0, USART_FLAG_TBE) == RESET);
}

// 重定向系统输出
int _write(int fd, char* buf, int size) {
    for (int i = 0; i < size; i++) {
        _putchar(buf[i]);
    }
    return size;
}



测试浮点输出


printf("Float test: %.2fn", 3.14159f);  // 应能正常输出



注意事项




  1. 代码体积增加



    • 启用浮点支持会增加约1-3KB的Flash占用(具体取决于工具链版本)

    • 若空间紧张,考虑使用整数替代方案(如放大100倍转整数)




  2. 硬件浮点支持



    • GD32VF103本身支持硬件单精度浮点单元(FPU)

    • 此配置仅解决打印问题,计算不受影响




  3. 清理编译缓存
    修改后若无效,请执行:



    • PlatformIO侧边栏  ? 图标 → Clean Build Files

    • 重新编译





无需修改Makefile,PlatformIO通过platformio.ini统一管理构建参数。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分