在本练习中,我们将基于 blinky 示例编写一个简单的应用程序,以切换开发板上的 LED 状态。同样,任何受支持的 Nordic Semiconductor 开发板均可使用(nRF54、nRF53、nRF52、nRF70 或 nRF91 系列)。此练习的目的是确保编译和烧录示例所需的所有工具都已正确设置。重点是学习如何从“复制示例”模板创建应用程序、编译应用程序并将其烧录到搭载 Nordic 芯片的开发板上。
基本上,我们将引导您完成以下三个要点:
1. 在靠近根目录的位置创建一个文件夹。这将存放我们在本课程中将要进行的所有练习。
我们将在 C 盘的 C:\myfw\ncsfund. 中创建该文件夹。请避免将应用程序存储在路径过长的位置,因为如果应用程序路径太长,编译系统在某些操作系统(如 Windows)上可能会失败。此外,请避免在路径中使用空格和特殊字符。
2. 在 VS Code 中,单击 nRF Connect 扩展图标。在欢迎视图 (WELCOME View) 中,单击创建新应用程序 (Create a new application)。

3. 在“创建新应用程序”界面中,选择复制示例 (Copy a sample)。然后选择您计划使用的 SDK 版本。

在“创建新应用程序”中,您将看到三个选项:创建空白应用程序 (Create a blank application),这将创建一个带有空 main() 函数的空白应用程序。而复制示例 (Copy a sample) 将为您展示来自 nRF Connect SDK 不同模块的所有模板“示例”,并允许您基于模板创建应用程序。请注意,如果您的机器上安装了多个 SDK 版本,系统将提示您选择从哪个 SDK 版本复制示例。浏览 nRF Connect SDK 插件索引 (Browse nRF Connect SDK Add-on index)(超出本课程范围)用于从在线应用程序索引中复制与 nRF Connect SDK 兼容的现有树外 (out-of-tree) 应用程序版本,并围绕其设置 west 工作区仓库。
该 SDK 包含丰富的模板集。在模板的语境下:
示例 (Samples) 较为简单,展示单个功能或库(例如 SHA256 示例、UART 示例、PWM 示例、blinky 示例等)。
应用程序 (Applications) 较为复杂,包含多种库以实现特定的用例(例如资产追踪器应用程序、键盘应用程序、鼠标应用程序)。
3.1 在搜索栏中输入 blinky,并选择第二个 Blinky 示例(路径为 zephyr/samples/basic/blinky),如下所示。
Blinky 示例会使开发板上的 LED1(nRF54 DK 上为 LED0)无限期闪烁。

我们将基于 Blinky 示例创建我们的第一个应用程序。Blinky 示例来自 nRF Connect SDK 中的 Zephyr 模块,这就是为什么您在示例路径中看到 zephyr 名称的原因:zephyr\samples\basic\blinky。
通过图标
,我们可以分别访问树内示例(位于 SDK 安装目录内)、示例的在线文档以及示例的 GitHub 页面。
通过图标
,我们可以根据示例/应用程序所属的模块(nrf、zephyr 等)和受支持的硬件进行过滤。请注意,受支持的硬件信息并不总是准确的,因为它依赖于示例中明确列出的受支持硬件,而并非所有示例都会列出。
3.2 输入您希望存储应用程序的完整路径。
1. 选择您想要存储应用程序的位置。输入您在步骤 1 中创建的目录(例如:C:\myfw\ncsfund\)。

2. 将您的应用程序命名为 l1_e2。这是我们在本课程练习中将使用的命名规范。请注意,这将为您的应用程序创建一个名为 l1_e2 的文件夹。

输入完整路径后,按回车键。
VS Code 会询问您是想在当前 VS Code 实例中打开应用程序,还是打开一个新的 VS Code 实例。选择打开 (Open) 以在当前 VS Code 实例中打开应用程序。

这将制作所选模板“Blinky 示例”的副本,将其存储在您指定的应用程序目录中,并在 VS Code 中添加一个未编译的应用程序,如下所示:

对于未编译的应用程序,nRF Connect for VS Code 可能会显示波浪线错误提示,指出找不到头文件。这些通常出现在“问题 (PROBLEMS)”选项卡中。请在此阶段忽略这些波浪线错误。一旦您添加并编译配置(下一步),这些错误将自动解决。
4. 添加编译配置。
nRF Connect SDK 的众多优势之一是应用程序源代码与软件配置/硬件描述之间的高度解耦,这使得为新硬件或软件配置切换编译变得极其容易。
此步骤将指定我们要为哪种开发板或自定义板(硬件)编译应用程序。我们还将选择编译中使用的软件配置(*.conf 以及可能的设备树覆盖文件)。
您在“添加编译配置”中所做的设置将控制传递给底层命令行工具 west 的内容。
在应用程序 (APPLICATIONS) 视图中,点击应用程序名称下的添加编译配置 (Add Build Configuration)。

这将打开如下图所示的添加编译配置 (Add Build Configuration) 窗口:

首先要注意的是,图形界面会告知您用于编译应用程序的 SDK/工具链版本。请确保它与您打算使用的 SDK/工具链以及您复制示例时所用的 SDK 版本相对应。如果不对应,请点击箭头选择正确的版本。
4.1. 使用板载目标 (Board target),选择您想要烧录应用程序的开发板。有关 Nordic 设备板载目标的概述,请参见下表。
| 设备 | 板载目标 |
|---|---|
| nRF54LM20 DK* | nrf54lm20dk/nrf54lm20a/cpuapp |
| nRF54LS05 DK* | nrf54ls05dk/nrf54ls05b/cpuapp |
| nRF54LC10 DK* | nrf54lc10dk/nrf54ls05b/cpuapp |
| nRF54L15 DK* | nrf54l15dk/nrf54l15/cpuapp |
| nRF5340 DK | nrf5340dk/nrf5340/cpuapp |
| nRF52840 DK | nrf52840dk/nrf52840 |
| nRF52833 DK | nrf52833dk/nrf52833 |
| nRF52 DK | nrf52dk/nrf52832 |
| nRF9160 DK | nrf9160dk/nrf9160 |
| nRF9161 DK* | nrf9161dk/nrf9161 |
| nRF9151 DK* | nrf9151dk/nrf9151 |
| Thingy:91 X | thingy91x/nrf9151 |
| Thingy:91 | thingy91/nrf9160 |
| Thingy:53 | thingy53/nrf5340/cpuapp |
| nRF7002 DK* | nrf7002dk/nrf5340/cpuapp |
*nRF54LM20 DK 在 nRF Connect SDK v3.1.1 及更高版本中受支持。
*nRF54LS05 DK 在 nRF Connect SDK v3.3.0 及更高版本中受支持。
*nRF54LS05 DK 在 nRF Connect SDK v3.4.1 及更高版本中受支持。
*nRF54L15 DK 和 Thingy:91 X 在 nRF Connect SDK v2.8.0 及更高版本中受支持。
*nRF7002 DK 和 nRF9161 DK 在 nRF Connect SDK v2.5.0 及更高版本中受支持。
*nRF9151 DK 在 nRF Connect SDK v2.6.0 及更高版本中受支持。
在截图中,我们通过指定其板载目标选择了 nRF54L15 DK, nrf54l15dk/nrf54l15/cpuapp
4.2. 开发板的版本 (Revision) 通常以 X.X.X 的格式写在开发板的标签上。不过,此字段是可选的,仅适用于具有多个版本的开发板(如 nRF9160 DK)。通过将其留空,编译系统将选择开发板定义中设置的默认版本。
我们将在其余部分保持默认编译配置。但是,了解这些配置中每一项的作用非常重要。
4.3. 基础配置文件 (Base configuration files)。根据您在步骤 3 中选择的模板,您将看到至少一个基础应用程序配置文件 prj.conf。某些模板包含多个应用程序配置文件(例如:prj.conf、prj_minimal.conf、prj_cdc.conf)。如果模板中存在这些不同的配置,模板文档中会对其进行说明。blinky 模板只有一个选项。这相当于 west 中的 FILE_SUFFIX (和 CONF_FILE)。prj.conf 将被默认选中。
4.4. 额外 Kconfig 片段 (Extra Kconfig fragments) 字段将列出模板中可用或已添加到应用程序文件夹中的 Kconfig 片段。这些是应用程序配置文件的修改器(在第 3 课中介绍)。blinky 模板没有此类片段。这相当于 EXTRA_CONF_FILE 在 west 中。
4.5. 该 基础设备树覆盖 (Base Devicetree overlays) 字段将列出模板中可用或已添加到应用程序文件夹中的设备树覆盖文件。这些是硬件描述的修改器(在第 3 课中介绍)。blinky 模板没有此类文件。这相当于 DTC_OVERLAY_FILE 在 west 中。
4.6. 额外设备树覆盖 (Extra Devicetree overlays)。它提供额外的自定义设备树覆盖文件,以便与基础设备树覆盖文件“混合”。这相当于 west 中的 EXTRA_DTC_OVERLAY_FILE 。
4.7 代码片段 (Snippets)。代码片段 将软件配置 (Kconfig) 和硬件配置 (Devicetree) 组合在一个包中。SDK 中有多个代码片段。
4.8 优化级别(大小、速度或调试)。这里我们有四个选项。
(prj.conf) 中设置的项目默认设置,应用程序配置文件将在第 3 课中介绍。CONFIG_SIZE_OPTIMIZATIONS="y"CONFIG_SPEED_OPTIMIZATIONS="y"CONFIG_DEBUG_OPTIMIZATIONS="y"勾选包含调试线程信息 (Include debug thread information) 时,会将 CONFIG_DEBUG_THREAD_INFO 传递给编译系统。您可以在调试器的线程查看器 (Thread Viewer) 中查看线程信息,但前提是您还选择了针对调试进行优化 (-Og) 优化级别。
4.9. 额外 CMake 参数 (Extra CMake arguments) 字段允许您根据需要向编译系统传递参数。在本演示中,我们将该字段留空。
4.10 编译目录名称 (Build directory name) 字段允许您手动命名存储最终二进制文件和临时编译文件的编译目录。我们将保留工具指定的默认名称,即 build,如果您之前已经编译过一个应用程序,则为 build_1。
在本练习中,我们将保留使用项目默认值选项。但是,请务必记住,如果您计划调试应用程序,请使用针对调试进行优化 (-Og)。
保持仅生成 (Generate only) 选项为禁用状态,以便在点击编译配置 (Build Configuration) 按钮后触发编译过程。
4.11 从 nRF Connect SDK v2.8.0 开始,Sysbuild 默认启用。当您的应用程序有多个镜像时,Sysbuild 非常重要。将此选项保留为默认值“编译系统默认 (Build system default)”。
4.12 点击生成并编译 (Generate and Build) 按钮以创建配置并启动编译过程。
编译过程需要一些时间才能完成。打开 nRF Connect 终端(视图 -> 终端)以查看编译进度。

如上面的截图所示,显示应用程序的内存使用情况即表示编译成功。
编译过程中的一个关键组件是 west,它是 nRF Connect SDK/Zephyr 中的核心命令行实用程序。
west 提供多种服务,如仓库管理、编译应用程序和烧录,并由 nRF Connect for VS Code 在内部调用。如果您更喜欢在终端中工作,也可以在命令行提示符中手动发布这些命令。
请务必选择 nRF Connect 终端,如以下截图所示,因为这是获取工具链源的终端。步骤 1 – 打开 nRF Connect 终端,步骤 2 – 如果您有兴趣学习如何通过 nRF Connect SDK 使用命令行界面,请输入 west help。
![]()
请注意,nRF Connect 终端将针对用于编译应用程序的活动工具链/SDK 打开。您也可以从“管理工具链 (Manage toolchains)”- > “打开终端配置文件 (Open Terminal Profile)”中打开 nRF Connect 终端。
如果您切换到 VS Code 中的资源管理器 (Explorer) 或浏览到应用程序目录,您会注意到编译过程中创建了一个名为 build 的新子目录。此文件夹包含编译输出,包括我们将在下一步烧录到开发板上的二进制文件。

5. 确保您的开发板已连接到计算机并已开启。它应该列在 nRF Connect for VS Code 扩展的已连接设备视图 (Connected Devices View) 中。

如果您没有看到列出的开发板,请点击已连接设备视图中的刷新已连接设备图标
。
6. 在操作视图 (Actions View) 中,点击烧录 (Flash) 以将应用程序烧录到开发板。您可以打开终端面板来查看烧录进度,如下所示。

烧录 (Flash) 与擦除并烧录到开发板 (Erase And Flash To Board) 的区别在于,后者会擦除整个设备,包括应用程序保存的所有数据。
例如,如果设备已添加到 Mesh 网络中,擦除并烧录到开发板 将使设备忘记此网络信息。
![]()
您开发板上的 LED1(nRF54 DK 上为 LED0)现在应该以一秒为间隔闪烁。

在 nRF54L 系列 DK 上,开发板的 LED 标有以 0 开始的 PCB 标签(PCB 丝印)(LED0-LED3)。在上一代开发板中,索引从 1 开始(LED1-LED4)。因此,在 nRF54L 系列 DK 上运行上述示例将使 LED0 闪烁。
如果您使用的是版本为 <0.5.0 的 nRF54LM20 DK,您需要进入 nRF Connect for Desktop 中的 Board Configurator 应用程序,并将 VDD_NRF 和 VDDIO 设置为小于 2.7 V。如果 VDD_NRF 和 VDDIO 的值设置为大于 2.7 V,DK 上的 LED 将停止工作。
![]()
7. 仅仅为了演示,让我们改变 LED 的闪烁频率。
在“源文件 (Source Files)”-> >“应用程序”中,或通过 Visual Studio Code 的资源管理器视图找到 main.c 文件。在第 11 行,将 SLEEP_TIME_MS 的值从 1000 改为 100。这将改变 LED 闪烁的间隔。
#define SLEEP_TIME_MS 100C8. 重新编译并重新烧录应用程序到您的开发板。您应该观察到 LED 现在以更高的频率闪烁。
在第 2 课中,我们将深入研究此应用程序的源代码,以了解其工作原理。