第03章 开发环境搭建
约 921 字大约 3 分钟
2026-04-25
本项目软件层面使用 NCS(Nordic Connect SDK)v3.2.3 作为开发环境,基于 Zephyr RTOS。
Nordic 目前有三套开发环境:nRF5 SDK(已停止新功能开发)、nRF5 SDK for Mesh(维护模式)、Nordic Connect SDK(主力)。所有新芯片项目的技术选型都应选 NCS。
1 安装 NCS
NCS 的安装分为 VSCode 插件集成和 nrfutil 命令行安装两种方式。
方式1 通过 VSCode 安装扩展
第一步:安装 JLink 驱动 下载地址
第二步:VS Code 中安装扩展 nRF Connect for VS Code Extension Pack
第三步:打开扩展的侧边栏图标,点击 Install SDK 和 Install Toolchain 按照步骤进行后续流程。
方式2 命令行安装
winget install nrfutil依次执行:
nrfutil install sdk-manager
nrfutil sdk-manager config install-dir set "d:/ncs"
nrfutil sdk-manager install v3.2.3 --region cn完成后修改 VS Code 设置中的 toolchain 路径指向 NCS 安装目录。
2 创建工程
2.1 目录结构
led_strip/
├── boards/
│ └── atguigu/
│ └── mesh_led_strip/ # 自定义板级支持
│ ├── board.cmake
│ ├── board.yml
│ ├── Kconfig.mesh_led_strip
│ ├── mesh_led_strip-pinctrl.dtsi
│ ├── mesh_led_strip.dts
│ ├── mesh_led_strip.yaml
│ ├── mesh_led_strip_defconfig
│ └── pre_dt_board.cmake
├── src/
│ ├── effects/ # 灯效插件
│ │ ├── effect_api.h
│ │ ├── effect_registry.h
│ │ ├── effect_registry.c
│ │ ├── effect_solid.c
│ │ ├── effect_flow.c
│ │ ├── effect_breathe.c
│ │ ├── effect_rainbow.c
│ │ └── effects.ld
│ ├── led/ # 灯带输出层
│ │ ├── led_output.h
│ │ └── led_output.c
│ ├── mesh/ # BLE Mesh 层
│ │ ├── mesh_app.h
│ │ ├── mesh_app.c
│ │ ├── mesh_models.h
│ │ └── mesh_models.c
│ └── main.c # 应用入口
├── CMakeLists.txt
├── prj.conf
└── .gitignore2.2 创建板级支持包 (BSP)
在 VSCode NCS 扩展中使用 BSP 添加向导,或手动创建板级文件。
第 1 步:板级元信息
board.yml:
board:
name: mesh_led_strip
vendor: atguigu
socs:
- name: nrf52840mesh_led_strip.yaml:
identifier: mesh_led_strip/nrf52840
name: Mesh control board for led strip
vendor: atguigu
type: mcu
arch: arm
ram: 256
flash: 1024
toolchain:
- zephyr第 2 步:Kconfig 绑定 SoC
config BOARD_MESH_LED_STRIP
select SOC_NRF52840_QIAA第 3 步:引脚复用配置 (pinctrl)
mesh_led_strip-pinctrl.dtsi:配置 UART0 (TX=P0.06, RX=P0.08) 和 SPI1 (SCK=P0.12, MOSI=P0.13),均定义 default 和 sleep 两组状态。UART RX 加 bias-pull-up。
第 4 步:主设备树
mesh_led_strip.dts 关键节点:
chosen:指定 console/uart0, flash/sram, code-partitionaliases:sw0 → button0 (P0.04), sw1 → button1 (P0.15), led-strip → &led_stripbuttons:gpio-keys,上拉 + 低电平有效- Flash 分区:mcuboot(48KB) + image-0(472KB) + image-1(472KB) + storage(32KB)
- WS2812 节点:
compatible = "worldsemi,ws2812-spi";
spi-max-frequency = <6400000>;
chain-length = <120>;
color-mapping = <LED_COLOR_ID_GREEN LED_COLOR_ID_RED LED_COLOR_ID_BLUE>;
spi-zero-frame = <0x40>; // 1 WS2812 0-bit
spi-one-frame = <0x70>; // 1 WS2812 1-bit第 5 步:CMakeLists.txt
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(led_strip)
file(GLOB_RECURSE app_sources CONFIGURE_DEPENDS src/*.c)
target_sources(app PRIVATE ${app_sources})
target_include_directories(app PRIVATE src)
zephyr_linker_sources(SECTIONS src/effects/effects.ld)
zephyr_linker_sources注入灯效注册表链接段,不可缺少——否则运行时无法遍历灯效。
2.3 Kconfig 配置 (prj.conf)
分阶段启用功能:
# 基础:LED Strip + RTT 日志
CONFIG_LED_STRIP=y
CONFIG_LOG=y
CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096
# BLE + Mesh
CONFIG_BT=y
CONFIG_BT_MESH=y
CONFIG_BT_MESH_RELAY=y
CONFIG_BT_MESH_FRIEND=y
CONFIG_BT_MESH_PB_GATT=y
CONFIG_BT_MESH_GATT_PROXY=y
CONFIG_BT_MESH_ONOFF_SRV=y
CONFIG_BT_MESH_LIGHTNESS_SRV=y
CONFIG_BT_DEVICE_NAME="mesh_led_strip"
# 持久化预留
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_NVS=y
CONFIG_SETTINGS=y3 Blink Demo 验证
在正式开发前,建议先通过一个简单的 LED Blink 验证开发环境:
- 使用 NCS 扩展的 "Create Application" 向导,选择 Zephyr 的 blinky sample
- 在设备树中添加 led0 节点(利用板上的 WS2812 或 GPIO)
- 选择 Board 为
mesh_led_strip/nrf52840,Board Root 指向项目目录 - 构建并烧录
验证标准:编译 0 error 0 warning,烧录后灯带/指示灯正常闪烁。
4 构建与烧录
本项目构建使用 ncs-fresh-build 工作流:
powershell -ExecutionPolicy Bypass -File `
"C:\Users\skiin\.codex\skills\ncs-fresh-build\scripts\invoke_ncs_fresh_build.ps1" `
-AppDir "C:\projects\led_strip" `
-SdkVersion "3.2.3" `
-Board "mesh_led_strip/nrf52840" `
-BoardRoot "C:/projects/led_strip" `
-Snippet "rtt-console" `
-NoSysbuild `
-ForceFresh构建输出目录默认在 build/,生成 build/zephyr/zephyr.hex。
使用 J-Link 或 nrfjprog 烧录:
nrfjprog --program build/zephyr/zephyr.hex --sectorerase --reset5 RTT 日志查看
本项目的日志通过 Segger RTT 通道输出。使用 J-Link RTT Viewer 或 J-Link RTT Client 连接后即可看到实时日志。
在 VS Code 的 nRF Connect 扩展中也可以直接查看 RTT Console。
