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
验证方法与判定标准
- 构建验证:执行
west build后,终端输出以Generating files开始并以Build complete结束,且无错误信息,说明板级定义被正确识别。 - 运行验证:烧录后打开串口终端(如
screen /dev/ttyACM0 115200),应看到以下输出:
Board: nrf52840dk_nrf52840
LED0 pin: 13
LED0 configured and turned on
- 硬件验证:开发板上的绿色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)。