2. 配置板级支持

任务目标

为nRF52840DK开发板创建一个Zephyr项目,完成板级支持配置,包括板级定义(board definition)和引脚映射(pin mapping),使项目能够正确识别目标板并编译生成可烧录固件。

环境依赖

本案例需要已安装Zephyr SDK(≥0.16)和west工具,并已通过west init和west update完成Zephyr主仓库及模块同步。nRF52840DK的板级定义已包含在Zephyr主仓库中(boards/arm/nrf52840dk_nrf52840),无需额外安装。

项目结构与配置

创建项目目录nrf52840_board_config,包含以下文件:

nrf52840_board_config/
├── CMakeLists.txt
├── prj.conf
├── src/
│   └── main.c
└── boards/
    └── nrf52840dk_nrf52840.overlay

关键完整代码

CMakeLists.txt — 声明项目并关联Zephyr构建系统:

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

target_sources(app PRIVATE src/main.c)

prj.conf — 启用GPIO驱动(引脚映射所需):

CONFIG_GPIO=y
CONFIG_SERIAL=y

src/main.c — 验证板级定义与引脚映射是否生效:

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

/* 从设备树获取LED0的GPIO规格 */
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

void main(void)
{
    int ret;

    printk("Board: %s\n", CONFIG_BOARD);
    printk("LED0 pin: %d\n", led0.pin);

    if (!device_is_ready(led0.port)) {
        printk("GPIO device not ready\n");
        return;
    }

    ret = gpio_pin_configure_dt(&led0, GPIO_OUTPUT_ACTIVE);
    if (ret < 0) {
        printk("Failed to configure LED0\n");
        return;
    }

    /* 点亮LED0,验证引脚映射正确 */
    gpio_pin_set_dt(&led0, 1);
    printk("LED0 configured and turned on\n");

    while (1) {
        k_sleep(K_MSEC(500));
        gpio_pin_toggle_dt(&led0);
    }
}

boards/nrf52840dk_nrf52840.overlay — 自定义引脚映射(将LED0映射到P0.13,即DK板上的绿色LED):

/ {
    aliases {
        led0 = &led0_green;
    };

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

构建与烧录

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

west build -b nrf52840dk_nrf52840

烧录固件到开发板:

west flash

验证方法与判定标准

  1. 构建验证:执行west build后,终端输出以Generating files开始并以Build complete结束,且无错误信息,说明板级定义被正确识别。
  2. 运行验证:烧录后打开串口终端(如screen /dev/ttyACM0 115200),应看到以下输出:
Board: nrf52840dk_nrf52840
LED0 pin: 13
LED0 configured and turned on
  1. 硬件验证:开发板上的绿色LED(LED0)以0.5秒间隔闪烁,证明引脚映射配置正确且GPIO驱动正常工作。

常见问题

  • 构建报错“Board not found”:确认-b参数为nrf52840dk_nrf52840,且Zephyr仓库已完整同步。
  • LED不亮:检查overlay中GPIO引脚号是否正确(nRF52840DK绿色LED连接P0.13),并确认CONFIG_GPIO=y已启用。
  • 串口无输出:确认CONFIG_SERIAL=y已配置,且串口终端波特率与Zephyr默认一致(115200)。