最近入手了一块 nRF52840 ProMicro 开发板,性能和功耗都很亮眼,买来主要是想为之后的项目做原理验证。
1. 开发板参数
| 项目 | 参数 |
|---|---|
| 主控 | nRF52840,Cortex-M4F @ 64 MHz |
| 存储 | 1 MB Flash / 256 KB RAM |
| 无线 | Bluetooth 5、802.15.4(Thread/Zigbee)、NFC-A |
| 有线 | USB 2.0 全速 |
| 外设 | ADC、PWM、I2C、SPI、UART、PDM/I2S |
| 供电 | USB-C / 锂电池,3.3V 逻辑 |

板子出厂带 Adafruit UF2 bootloader,插上电脑会以一个 U 盘的形式出现,固件编译好之后拖进去就能运行,竟然是这么神奇烧录方式。
2. 搭建官方 NCS 开发环境
nRF52840 常见的开发路线有两条:PlatformIO/Arduino 和 Nordic 官方的 nRF Connect SDK(NCS,基于 Zephyr)。前者上手快,后者官方生态更完整。这次想认真试试官方栈,就在 VS Code 里装了 nRF Connect 扩展,把 SDK 和 toolchain 一起配好。
开发步骤大概是下面这样:
- 新建 Zephyr 工程,板型选
promicro_nrf52840/nrf52840/uf2; - 编译生成
zephyr.uf2; - 双击 RST–GND 进 bootloader,把 UF2 拖进
NICENANO。
这里注意板型后面的 /uf2 不能省,它对应 Adafruit bootloader 的 Flash 分区;选错的话固件烧进去跑不起来。
3. 第一个坑
这块板子竟然没有 RST 按钮!
想要进 bootloader,得用镊子或杜邦线把 RST 和 GND 快速短接两次,间隔小于 500 ms。成功后状态灯会开始渐亮渐暗,电脑上会出现一个名为 NICENANO 的 U 盘,把 UF2 拖进去就烧录完成。
UF2 盘只在 bootloader 模式出现,烧完后 U 盘会消失;下次烧录再双击 RST–GND 即可。
4. 遇事不决先点灯
按照惯例先用 LED 验证工具链。这块板的红色 LED 接在 P0.15(led0),蓝色 LED 是充电指示,不受固件控制。
贴上简简单单的点灯代码:
#include <zephyr/kernel.h>#include <zephyr/drivers/led.h>
static const struct led_dt_spec led = LED_DT_SPEC_GET(DT_ALIAS(led0));
int main(void){ if (!led_is_ready_dt(&led)) { return -1; }
while (1) { led_on_dt(&led); k_msleep(500); led_off_dt(&led); k_msleep(500); }
return 0;}prj.conf 里打开 CONFIG_LED=y 和 CONFIG_GPIO=y 即可。
5. 低功耗
nRF52840 在低功耗上做了不少设计,主要可以看这几处:
- System ON 空闲:CPU 执行 WFI 后,内核时钟和外设时钟可以关掉,只留 RTC 等必要模块工作,电流在 µA 级;有 BLE 事件或中断时再醒来。
- System OFF:CPU、射频和大部分外设关闭,只保留 GPIO、NFC 或复位这类唤醒源,电流可以到亚 µA 级,适合长期待机的设备。
- 事件驱动的射频:BLE 广播和连接都按间隔工作,两次事件之间射频是关的。广播间隔拉长、连接间隔加大、发射功率降低,平均电流都会跟着下降。
- PPI 和 EasyDMA:外设之间可以自己触发和搬运数据,CPU 不用一直参与,能更长时间保持休眠。
- 片上 DC/DC:如果用上了 nRF52840 内置的 DC/DC 转换器,电池供电时效率会比纯 LDO 方案更高,能减少一部分损耗。
6. 总结
这块 nRF52840 ProMicro 的硬件很讨喜:超迷你尺寸、锂电充电、USB-C、BLE 5 和低功耗非常齐全,价格也不高。它的短板同样明确:没有 Wi-Fi,这方面不如 ESP32。
期待一下宝哥的新项目吧!