3. nRF开发环境搭建
nRF 系列芯片(如 nRF52840、nRF5340)的现代开发方式已经不再是单纯使用 Keil 或 IAR 加寄存器配置,而是围绕 nRF Connect SDK(NCS) 构建。NCS 本质上是 Nordic 对 Zephyr RTOS 的发行版封装:它把 Zephyr 内核、HAL、蓝牙协议栈、802.15.4、Thread、Zigbee、Matter、驱动、示例工程和构建工具整合在一起,通过 west 工具统一管理。理解 NCS 与 Zephyr 的关系,是搭建环境的第一步。
可以把整个开发环境理解为四层:最底层是 工具链(编译器、CMake、Ninja、Python、west、设备树工具),中间是 Zephyr RTOS 内核与子系统,上层是 NCS 应用层与协议栈,最上层是 你的应用工程。四层之间通过 CMake 构建系统和 Kconfig 配置系统连接。下图展示了这一结构以及从源码到烧录的完整数据流。
一、安装方式选择:Toolchain Manager 还是手动安装
Nordic 官方推荐使用 nRF Connect for VS Code 扩展配合 Toolchain Manager 安装。这种方式会自动下载匹配版本的 NCS、Zephyr、GNU Arm GCC、Python 依赖和 west,并管理多个 SDK 版本共存。对于课程学习和工业项目开发,建议采用这种方式,避免手动安装时 Python 包版本冲突、CMake 路径错误等常见问题。
手动安装适合需要定制工具链或 CI 环境的场景,核心步骤是:安装 Python 3.8+、安装 west、west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.6.0、west update、安装 requirements.txt 中的 Python 依赖、安装 Zephyr SDK。无论哪种方式,最终都要保证 west 命令可用,且 ZEPHYR_BASE 环境变量指向正确的 Zephyr 目录。
二、工程创建:从示例到自定义应用
NCS 提供了大量示例工程,位于 nrf/samples 和 zephyr/samples 下。创建工程有两种常用方式:一是直接复制示例目录,二是使用 west build 指定应用目录。一个最小应用工程通常包含以下文件:
my_sensor_app/
├── CMakeLists.txt # 声明工程名、引入 Zephyr 构建系统
├── prj.conf # Kconfig 配置,如开启蓝牙、日志、传感器驱动
├── src/
│ └── main.c # 应用入口,包含 main() 与线程定义
└── boards/
└── nrf52840dk_nrf52840.overlay # 板级设备树覆盖,配置引脚与外设
其中 CMakeLists.txt 的最小内容为:
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(my_sensor_app)
target_sources(app PRIVATE src/main.c)
prj.conf 中按需开启配置,例如工业采集终端常用的配置:
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_GPIO=y
CONFIG_I2C=y
CONFIG_SENSOR=y
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="nrf_industrial_node"
三、编译:west build 的关键参数
编译命令的核心是 west build。首次编译需要指定板子和应用目录,例如针对 nRF52840 DK:
west build -b nrf52840dk/nrf52840 -d build my_sensor_app
其中 -b 指定板级目标,-d 指定构建目录。若使用 sysbuild(多镜像构建,如 MCUboot + 应用),可加 --sysbuild。编译成功后,构建目录下会生成 zephyr.elf、zephyr.hex、zephyr.map 等文件。若编译报错,优先检查:板级名称是否正确、ZEPHYR_BASE 是否设置、Python 依赖是否完整、设备树 overlay 中的引脚是否与硬件冲突。
west build -t pristine 可清除构建缓存,解决因配置变更导致的增量编译异常。四、烧录与调试:west flash 与 west debug
烧录前需确保 J-Link 驱动已安装、开发板通过 USB 连接、nrfjprog --version 可正常输出。烧录命令:
west flash -d build
west debug -d build
west flash 会自动调用 nrfjprog 或 J-Link 将 zephyr.hex 写入芯片。若使用外部调试器或自定义烧录器,可通过 --runner 指定。烧录完成后,可通过 RTT(Real-Time Transfer)查看日志:
west rtt -d build
RTT 是 Nordic 调试中非常实用的工具,它不占用 UART 引脚,直接通过 J-Link 读取日志,适合工业现场调试。若日志无输出,检查 CONFIG_LOG 与 CONFIG_USE_SEGGER_RTT 是否开启。
五、环境验证清单
| 检查项 | 命令 / 方法 | 预期结果 |
|---|---|---|
| west 可用 | west --version | 输出 west 版本号 |
| Zephyr 路径 | echo $ZEPHYR_BASE | 指向 zephyr 目录 |
| 工具链 | arm-none-eabi-gcc --version | 输出 GCC 版本 |
| J-Link | nrfjprog --version | 输出 nrfjprog 版本 |
| 板子识别 | nrfjprog --ids | 显示 J-Link 序列号 |
| 编译验证 | west build -b nrf52840dk/nrf52840 samples/hello_world | 生成 zephyr.hex |
nrf5340dk/nrf5340/cpuapp 与 nrf5340dk/nrf5340/cpunet 是两个不同目标。