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输出,可以修改板级配置:
- 找到RIOT源码中Nucleo-F411RE的配置文件:
boards/nucleo-f411re/include/board.h - 找到
STDIO_UART_DEV的定义,默认是绑定到UART2的:#define STDIO_UART_DEV UART_DEV(2) - 把它改成UART1:
#define STDIO_UART_DEV UART_DEV(1) - 重新编译烧录即可。
额外注意:引脚确认
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
相关产品推荐
相关产品推荐

