1. 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是否已启用;确认串口引脚配置与板卡实际连接一致