news 2026/9/18 16:32:42

Zephyr 开发 nRF21540 DK(nrf21540dk/nrf52840)开发板指南:引脚映射、烧录调试与 UART1 重映射实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 开发 nRF21540 DK(nrf21540dk/nrf52840)开发板指南:引脚映射、烧录调试与 UART1 重映射实战

Zephyr 开发 nRF21540 DK(nrf21540dk/nrf52840)开发板指南:引脚映射、烧录调试与 UART1 重映射实战

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

nRF21540 DK(PCA10112)是 Nordic Semiconductor 的官方开发板,将 nRF52840 主控 SoC 与 nRF21540 射频前端模块(Front End Module, FEM)集成在一起,用于验证和开发远距离、低功耗无线应用。本文以 Zephyr 仓库中该板的 板级文档 为主体,结合 设备树文件 与 引脚配置 等仓库源码,系统讲解该板的硬件布局、LED/按键/前端模块的引脚映射、构建烧录与调试流程、板载自检示例,以及如何通过 devicetree overlay 将 UART1 重映射到其他引脚。

nRF21540 DK 开发板实物图

板卡概述

nRF21540 DK 展示了 Nordic Semiconductor 的nRF21540 射频前端模块nRF52840(ARM Cortex-M4F 内核)主控协同工作的完整方案。nRF21540 FEM 位于射频收发器与天线之间,用于放大发射/接收信号、扩展链路预算,从而提升无线通信的覆盖范围与可靠性;nRF52840 则负责应用逻辑、协议栈以及对外设的控制。二者通过 SPI 接口相连(详见下文“前端模块”一节)。

在 Zephyr 中,该板的 target 标识为nrf21540dk/nrf52840,其 SoC 配置在 Kconfig.nrf21540dk 中通过config BOARD_NRF21540DKselect SOC_NRF52840_QIAA关联到 nRF52840 QIAA 型号,板级信息(名称、厂商、SoC)记录在 board.yml 中。

硬件与时钟配置

nRF21540 DK 板载的 nRF52840 使用两颗外部晶振:

  • 慢时钟(slow clock):32.768 kHz,作为低功耗 RTC 与看门狗等低速外设的时钟源;
  • 主时钟(main clock):32 MHz,作为系统与高速外设的主时钟源。

板级默认配置定义在 nrf21540dk_nrf52840_defconfig 中,包含:

  • CONFIG_ARM_MPU=y:使能 ARM 内存保护单元;
  • CONFIG_GPIO=y:使能 GPIO 驱动;
  • CONFIG_SERIAL=y:使能串口驱动;
  • CONFIG_CONSOLE=yCONFIG_UART_CONSOLE=y:使能控制台与 UART 控制台,默认通过 UART0 输出。

此外,Kconfig.defconfig 中默认开启HW_STACK_PROTECTION(在架构支持栈保护的前提下),为应用提供更强的栈溢出检测能力。

支持的功能特性

Zephyr 通过zephyr:board-supported-hw::指令自动汇总该板在仓库中支持的外设(详见板级文档原始渲染结果)。从设备树源码 nrf21540dk_nrf52840.dts 可以确认板级已启用的外设包括:

  • uart0(nRF UARTE,默认 115200 波特率,作为 console/shell/蓝牙监测串口,见chosen节点);
  • uart1(映射到 Arduino 串口,arduino_serial别名,115200);
  • i2c0arduino_i2c)、spi1spi3(用于 FEM 控制);
  • pwm0adcgpiotegpio0/gpio1nfctusbd(Zephyr USB 设备);
  • radio+ieee802154:nRF21540 FEM 通过fem = <&nrf_radio_fem>接入射频子系统,支持 802.15.4 协议栈。

更完整的硬件功能清单请参阅 nRF52840 与 nRF21540 的产品规格书及 nRF21540 DK 硬件手册(链接见文末“参考资料”)。

连接与 IO 映射

以下引脚映射可直接用于编写应用代码与 devicetree overlay,同时与 设备树源码 中的节点一一对应。

LED

板载 4 颗绿色 LED,均以低电平有效(GPIO_ACTIVE_LOW)方式驱动:

器件引脚
LED1(绿)P0.13
LED2(绿)P0.14
LED3(绿)P0.15
LED4(绿)P0.16

对应设备树中的gpio-leds节点led0~led3,并提供了led0~led3别名,方便示例代码直接通过DT_ALIAS()引用。另外设备树还定义了一个 PWM LED(pwm-led0),使用pwm0输出、周期 20 ms、极性反转。

按键(Push buttons)

器件丝印引脚
BUTTON1SW1P0.11
BUTTON2SW2P0.12
BUTTON3SW3P0.24
BUTTON4SW4P0.25
BOOTSW5启动/复位

设备树中对应gpio-keys节点button0~button3,均配置为上拉且低电平有效(GPIO_PULL_UP | GPIO_ACTIVE_LOW),并为按键关联了输入事件码(INPUT_KEY_0~INPUT_KEY_3),可直接配合 Zephyr 的 input 子系统使用。别名sw0~sw3供示例程序引用。

前端模块(nRF21540 FEM)

nRF21540 FEM 与 nRF52840 之间的控制信号与 SPI 接口引脚如下(与文档一致):

信号引脚
MOSIP1.13
MISOP1.14
CLOCKP1.15
CHIP SELECTP0.21
PDNP0.23
MODEP0.17
RXENP0.19
ANTSELP0.20
TXENP0.22

在设备树中,FEM 被建模为两个节点:

  • nrf_radio_fem(compatible 为nordic,nrf21540-fem):通过tx-en-gpios(P0.22)、rx-en-gpios(P0.19)、pdn-gpios(P0.23)、ant-sel-gpios(P0.20)、mode-gpios(P0.17)描述控制 GPIO,spi-if = <&nrf_radio_fem_spi>指向其 SPI 配置接口,supply-voltage-mv = <3000>声明供电电压;
  • nrf_radio_fem_spi(compatible 为nordic,nrf21540-fem-spi):挂在spi3总线上,片选为 P0.21(低有效),spi-max-frequency = <8000000>(8 MHz)。

对应引脚复用定义在 nrf21540dk_nrf52840-pinctrl.dtsi 的spi3_default节点中:SCK=P1.15、MISO=P1.14、MOSI=P1.13,与上表完全吻合。最后通过&radio { fem = <&nrf_radio_fem>; };将 FEM 接入射频子系统。

构建、烧录与调试

nrf21540dk/nrf52840板配置的应用可以按 Zephyr 常规流程构建、烧录与调试。板上集成了 J-Link OB 调试器(基于 Segger),因此烧录与调试均通过 Segger J-Link 完成。

安装工具链与驱动

请先按照 Zephyr 文档中 Nordic 板卡的 Segger 工具说明,安装并配置所需软件(J-Link 软件与调试器驱动)。安装完成后,即可按标准方式构建与烧录应用。

监听串口输出

烧录前先打开串口终端监听板卡输出,nRF21540 DK 默认通过 USB 枚举为串口设备:

$ minicom -D <tty_device> -b 115200

<tty_device>替换为板卡对应的串口设备。例如在 Linux 下通常是/dev/ttyACM0。波特率固定为 115200。

构建并烧录 hello_world

hello_world示例为例,构建并烧录:

$ west build -b nrf21540dk/nrf52840 samples/hello_world $ west flash

也可以一步完成构建与烧录:

$ west build -b nrf21540dk/nrf52840 samples/hello_world -- -DCONFIG_... # 按需附加配置

实际执行时,可在构建目录下直接使用west flash完成下载。Zephyr 应用构建与运行的一般性说明,可参考仓库中的 构建应用文档(build_an_application)与 应用运行说明(application_run)相关章节。

调试

如需调试,可参考 Nordic Segger 调试指南,使用 J-Link 配合 GDB 等工具进行断点调试、内存查看与单步执行。构建时加入-D调试信息并使用west debug(或west debugserver+ 外部 GDB)即可。

用 blinky 与 button 示例自检板卡

Zephyr 仓库提供两个示例用于验证 nRF21540 DK 的按键与 LED 是否正常工作:

samples/basic/blinky samples/basic/button
  • blinky:周期闪烁 LED(默认使用led0,即 P0.13 上的绿色 LED1),用于确认系统时钟、GPIO 驱动与构建工具链工作正常;
  • button 示例(samples/basic/button):读取按键状态并在串口打印,按下任意按键(如 SW1~SW4)即可看到对应事件输出,用于验证按键电路与 GPIO 中断路径。

将上述示例分别构建并烧录到板卡,即可确认 Zephyr 在该板上运行正确。按键与 LED 的完整设备树定义见 nrf21540dk_nrf52840.dts。

修改 UART1 引脚(通过 devicetree overlay)

当应用需要将 UART1 使用到另一组引脚时,可在应用目录下添加 devicetree overlay 文件。以将 UART1 的 TX 改到 P0.14、RX 改到 P0.16 为例:

  1. 在应用主目录中新建 devicetree overlay 文件(例如app.overlay),内容如下:
&pinctrl { uart1_default_alt: uart1_default_alt { group1 { psels = <NRF_PSEL(UART_TX, 0, 14)>, <NRF_PSEL(UART_RX, 0, 16)>; }; }; /* 当 CONFIG_PM_DEVICE=y 时必须提供 sleep 状态 */ uart1_sleep_alt: uart1_sleep_alt { group1 { psels = <NRF_PSEL(UART_TX, 0, 14)>, <NRF_PSEL(UART_RX, 0, 16)>; low-power-enable; }; }; }; &uart1 { pinctrl-0 = <&uart1_default_alt>; /* 如果未使用 sleep 状态,可删除 pinctrl-1 并去掉 "sleep" 项 */ pinctrl-1 = <&uart1_sleep_alt>; pinctrl-names = "default", "sleep"; };
  1. 重新构建应用,overlay 会被自动合并到最终设备树中。上述示例中,P0.16 用作 RX、P0.14 用作 TX。

关于 devicetree overlay 的更多用法,可参考仓库中的 devicetree overlay 说明文档(set-devicetree-overlays)相关章节。

为什么需要 sleep 状态?

nRF 系列在使能设备电源管理(CONFIG_PM_DEVICE=y)时,外设进入低功耗状态需要一组专用的引脚配置。上例中的uart1_sleep_alt通过low-power-enable让相关引脚在休眠时保持正确状态、降低漏电。若应用未启用电源管理,则可以不定义 sleep 状态,并删除pinctrl-1"sleep"项(overlay 注释中已给出提示)。

选择可用的引脚

引脚复用配置最终写入板级 pinctrl 文件(nrf21540dk_nrf52840-pinctrl.dtsi)。若要为自定义外设挑选引脚,请查阅 nRF52840 产品规格书第 7 章 “Hardware and Layout”,在表 7.1.1 “aQFN73 ball assignments” 中选择标记为“General purpose I/O”的引脚。

需要注意:标记为“low frequency I/O only”(仅低频 I/O)的引脚只能用于 10 kHz 以下的低频应用,不适用于 UART 115200 波特率等高速信号场景。选错引脚可能导致串口通信不稳定或功能异常。

板级默认引脚分配速查

外设引脚(默认)说明
UART0TX=P0.06, RX=P0.08, RTS=P0.05, CTS=P0.07控制台/默认串口,115200
UART1RX=P1.01, TX=P1.02Arduino 串口(D0/D1)
I2C0SDA=P0.26, SCL=P0.27Arduino I2C(D14/D15),与 SPI0 互斥
SPI1SCK=P0.31, MOSI=P0.30, MISO=P1.08Arduino SPI 引脚
SPI3SCK=P1.15, MISO=P1.14, MOSI=P1.13nRF21540 FEM 专用
PWM0OUT0=P0.13PWM LED

在设备树中,i2c0spi0i2c1spi1存在引脚复用冲突,二者不能同时启用(源码中以注释明确标注,例如&i2c1 { /* Cannot be used together with spi1. */ })。编写 overlay 时应避免占用相互冲突的外设引脚。

参考资料

  • 板级文档原文:boards/nordic/nrf21540dk/doc/index.rst
  • 板级设备树:nrf21540dk_nrf52840.dts
  • 板级引脚复用:nrf21540dk_nrf52840-pinctrl.dtsi
  • 板级默认 Kconfig:nrf21540dk_nrf52840_defconfig
  • 板卡信息:board.yml
  • nRF21540 产品网站、nRF21540 产品规格书、nRF52840 产品规格书、nRF21540 DK 硬件手册、Segger J-Link 软件与文档包等外部资料链接见板级文档原文末尾的 References 章节。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 16:32:17

【SAP FI】5.财务报表_1.S4 HANA中实现资产负债表和利润表

目录 一、要点 二、【OB58】定义财务报表 1.最佳实践定义 2.我自己的定义 二、【F.01】查看财务报表 一、要点 1.B/S&#xff1a;资产负债表科目最后看余额。累计折旧&#xff08;成本折旧&#xff09;。 2.P/L&#xff1a;损益表科目在每个月的月末都要结转到【本年利润…

作者头像 李华
网站建设 2026/9/18 16:28:10

AI标准与评估规范落地指南:从国际标准到可执行报告

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 16:26:24

IT战略规划方法论:从BITA业务对齐到EITA架构落地指南

简介&#xff1a;《IT战略规划方法论合集》是一套面向企业高层、IT总监、IT工程师及咨询顾问的PPT资料包&#xff0c;聚焦IT战略规划与业务对齐这一核心问题。合集整合了HP、IBM、汉普、埃森哲、用友五大咨询公司的规划方法论&#xff0c;其中以HP的BITA&#xff08;业务与IT整…

作者头像 李华
网站建设 2026/9/18 16:23:04

CIP/OPC UA标签数据转发到PLC寄存器地址全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华