2. 配置串口控制台输出
任务目标
在Zephyr项目中启用串口控制台(Console),使printk()输出重定向到UART,并验证开发板复位后能在串口终端看到启动日志与自定义输出。
环境依赖
- Zephyr SDK(v3.x+)与west工具链已安装
- 一块支持Zephyr的开发板(本文以
qemu_cortex_m3为例,无需真实硬件) - 串口终端工具(如minicom、PuTTY,真实硬件时需要)
实现步骤
Zephyr的串口控制台由CONFIG_CONSOLE与CONFIG_UART_CONSOLE两个Kconfig选项控制。默认情况下,printk()会通过控制台驱动输出。若使用真实开发板,需确认设备树中UART节点与chosen的zephyr,console属性匹配。
关键完整代码
创建项目目录console_demo,包含以下三个文件:
prj.conf
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_PRINTK=y
CMakeLists.txt
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(console_demo)
target_sources(app PRIVATE src/main.c)
src/main.c
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
void main(void)
{
printk("Console demo started\n");
printk("Board: %s\n", CONFIG_BOARD);
while (1) {
printk("Uptime: %lld ms\n", k_uptime_get());
k_sleep(K_SECONDS(1));
}
}
构建与运行
west build -b qemu_cortex_m3 -d build console_demo
west build -t run -d build
QEMU窗口将显示串口输出。若使用真实开发板,将-b参数替换为对应板型(如nucleo_f103rb),烧录后连接UART引脚(通常为USART1的TX/RX),在终端设置115200-8-N-1即可观察输出。
验证方法
运行后观察终端是否依次出现以下内容:
Console demo started
Board: qemu_cortex_m3
Uptime: 0 ms
Uptime: 1000 ms
Uptime: 2000 ms
...
每秒递增的Uptime输出证明控制台工作正常。若终端无输出,依次检查:
- 构建时是否启用
CONFIG_UART_CONSOLE(执行west build -t menuconfig确认) - 真实硬件时,确认UART引脚接线与终端波特率
- QEMU环境下,确认未使用
-nographic以外的重定向参数
常见问题
printk无输出但程序运行正常:检查CONFIG_PRINTK是否被意外关闭;部分板卡需额外设置CONFIG_SERIAL=y。
真实板卡乱码:核对开发板UART时钟配置与终端波特率是否匹配,Zephyr默认使用设备树中current-speed属性(通常为115200)。