1. Hello World 串口输出

Hello World 串口输出 学习卡片

任务目标

在 Zephyr RTOS 上完成最小可运行工程:配置 UART 外设,通过串口周期性输出 Hello World,以此验证开发环境、工具链与基础构建/烧录流程是否正常。

环境与依赖

  • Zephyr SDK(含 west、cmake、ninja)已安装并完成 west init / west update
  • 目标板:以 qemu_cortex_m3 为例(无需真实硬件即可验证);若使用真实开发板,替换为对应 board 名称即可
  • Zephyr 版本:v3.5.0 或更新(本案例代码兼容)

工程结构

hello_world/
├── CMakeLists.txt
├── prj.conf
└── src/
    └── main.c

关键完整代码

CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)

target_sources(app PRIVATE src/main.c)

prj.conf

CONFIG_SERIAL=y

src/main.c

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/uart.h>

#define SLEEP_MS 1000

int main(void)
{
    const struct device *uart_dev = DEVICE_DT_GET(DT_NODELABEL(uart0));

    if (!device_is_ready(uart_dev)) {
        return -1;
    }

    while (1) {
        const char msg[] = "Hello World\n";
        uart_poll_out(uart_dev, (unsigned char)msg[0]);  // 逐字符发送
        for (int i = 1; msg[i] != '\0'; i++) {
            uart_poll_out(uart_dev, (unsigned char)msg[i]);
        }
        k_msleep(SLEEP_MS);
    }
    return 0;
}

构建与运行

west build -b qemu_cortex_m3 -d build .
west build -d build -t run

若使用真实开发板,将 -b 参数替换为对应 board(如 nucleo_f103rb),并改用 west flash 烧录。

验证方法与通过条件

  • 执行 west build -d build -t run 后,QEMU 终端每 1 秒打印一次 Hello World,无编译错误、无链接错误
  • 若使用真实硬件,打开串口终端(波特率 115200,8N1),观察相同输出
  • 程序持续运行不崩溃,按 Ctrl+C 退出 QEMU 即视为通过

常见问题

  • 编译报错找不到 uart0:确认设备树中存在 uart0 节点;若使用其他板型,改用 DEVICE_DT_GET(DT_ALIAS(uart_0)) 或直接指定设备树节点
  • 无输出:检查 CONFIG_SERIAL=y 是否已启用;确认串口引脚配置与板卡实际连接一致