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

RIOT OS嵌入式平台stdout输出位置及UART1配置咨询

RIOT OS Nucleo-F411 printf/puts 输出定向到UART1的解决方案

嘿,刚上手RIOT OS遇到UART输出的问题太正常了,我来一步步帮你解决!

一、默认情况下,输出在哪里?

Nucleo-F411RE开发板的默认stdio输出是绑定到ST-Link虚拟串口的,也就是UART2(对应引脚PA2/TX、PA3/RX)。你只需要用USB线把开发板连到电脑,打开串口工具(比如minicom、screen或者Windows的串口助手),选择对应的COM口(波特率默认115200,8位数据位、无校验、1位停止位),就能看到hello-world的输出了。

二、如何将输出定向到UART1(TX/D1引脚)?

RIOT OS的stdio输出是通过stdio_uart模块管理的,我们可以通过两种方式修改它绑定的UART设备:

方法1:编译时通过命令行指定(临时生效)

在编译烧录的时候,直接添加UART_DEV=UART_DEV(1)参数,强制stdio使用UART1:

BOARD=nucleo-f411re make flash UART_DEV=UART_DEV(1)

这个方法适合临时测试,不需要修改任何配置文件。

方法2:修改板级配置文件(永久生效)

如果你希望每次编译这个板子都默认用UART1输出,可以修改板级配置:

  1. 找到RIOT源码中Nucleo-F411RE的配置文件:boards/nucleo-f411re/include/board.h
  2. 找到STDIO_UART_DEV的定义,默认是绑定到UART2的:
    #define STDIO_UART_DEV UART_DEV(2)
    
  3. 把它改成UART1:
    #define STDIO_UART_DEV UART_DEV(1)
    
  4. 重新编译烧录即可。

额外注意:引脚确认

Nucleo-F411RE的D1引脚对应PA9,也就是UART1的TX引脚。RIOT的stdio_uart模块会自动初始化对应UART的引脚,所以你不需要手动配置引脚模式,除非你的应用里有其他代码修改了这个引脚的功能。如果遇到引脚冲突,可以在应用代码里手动初始化:

#include "periph/gpio.h"

int main(void) {
    // 确保PA9被配置为UART1 TX引脚
    gpio_init(PA9, GPIO_OUT);
    // 或者用UART的引脚初始化函数(更推荐)
    uart_init(UART_DEV(1), 115200, NULL);
    
    puts("Hello World!");
    printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD);
    printf("This board features a(n) %s MCU.\n", RIOT_MCU);
    return 0;
}

三、验证输出

修改完成后,把串口工具的RX线接到开发板的D1(PA9)引脚,GND线对应接开发板GND,设置波特率115200,就能看到hello-world的输出内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:37:24