Zephyr OS 入门与实战

第3课:第一个 Zephyr 程序 - Blinky 项目

3.1 创建 Blinky 项目(设备树 overlay 配置 LED)

1

创建项目目录结构

首先创建一个新的项目目录并初始化必要的文件:

mkdir blinky && cd blinky
mkdir -p src boards/arm
                
2

创建 CMakeLists.txt

在项目根目录下创建 CMakeLists.txt 文件:

# CMake 最低版本要求
cmake_minimum_required(VERSION 3.20.0)

# 查找 Zephyr 包
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

# 定义项目名称
project(blinky)

# 添加源代码目录
target_sources(app PRIVATE src/main.c)
                
3

创建设备树 overlay 文件

在 boards/arm 目录下创建设备树 overlay 文件(假设使用 nRF52840 DK 开发板):

// boards/arm/nrf52840dk_nrf52840.overlay
/ {
    aliases {
        led0 = &led0;
    };

    leds {
        compatible = "gpio-leds";
        led0: led_0 {
            gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
            label = "Green LED 0";
        };
    };
};
                

注意: 根据您的开发板型号和 LED 连接情况修改 gpios 参数。

4

编写主程序

创建 src/main.c 文件:

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS   1000

/* LED0 的设备树节点标识符 */
#define LED0_NODE DT_ALIAS(led0)

static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

void main(void)
{
    int ret;
    bool led_state = true;

    if (!device_is_ready(led.port)) {
        return;
    }

    ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
    if (ret < 0) {
        return;
    }

    while (1) {
        ret = gpio_pin_toggle_dt(&led);
        if (ret < 0) {
            return;
        }
        k_msleep(SLEEP_TIME_MS);
    }
}
                

3.2 理解 prj.conf Kconfig 文件作用

1

创建 prj.conf 文件

在项目根目录下创建 prj.conf 文件,配置必要的内核选项:

# 启用 GPIO 驱动
CONFIG_GPIO=y

# 启用设备树支持
CONFIG_DEVICE_TREE=y

# 启用系统时钟
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=32768

# 启用日志系统(可选)
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
                
2

Kconfig 文件详解

prj.conf 文件用于配置 Zephyr 内核和模块的功能,主要作用包括:

  • 启用/禁用内核功能模块(如 GPIO、I2C、SPI 等)
  • 配置系统参数(如时钟频率、堆栈大小等)
  • 设置默认日志级别
  • 选择硬件抽象层实现

提示: 可以使用 west build -t menuconfig 命令交互式地修改配置,修改后的配置会保存在 build/zephyr/.config 文件中。

3

常用配置选项

以下是一些常用的 Kconfig 配置选项:

# 启用串口控制台
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=y

# 启用 shell 支持
CONFIG_SHELL=y

# 设置主堆栈大小
CONFIG_MAIN_STACK_SIZE=2048

# 启用浮点运算支持
CONFIG_FPU=y

# 启用硬件调试
CONFIG_DEBUG=y
CONFIG_DEBUG_OPTIMIZATIONS=y
                

构建与运行

1

构建项目

在项目根目录下执行以下命令构建项目:

west build -b nrf52840dk_nrf52840
                

注意:nrf52840dk_nrf52840 替换为您实际使用的开发板名称。

2

烧录程序

构建完成后,使用以下命令烧录程序到开发板:

west flash
                
3

观察结果

程序烧录完成后,您应该能看到开发板上的 LED 以 1 秒的间隔闪烁。

客服小姐姐(优先添加)

客服小姐姐(优先添加)

客服微信

讲师微信(备用)