Administrator
发布于 2025-10-29 / 506 阅读
1
1

ProMicro NRF52840开发板上手简评

前言

十几年前学习过一点点的8051单片机,不过也仅限于点灯水平。最近发现一款基于nrf52840的开发板,包邮到手只要9元,正好手里还有面包板和一堆LED小灯,于是买回来准备继续点灯大业。

该开发板资料可以参考ProMicro NRF52840,它有许多抄板型号,比如 SuperMini NRF52840 、nice!nano 等等,SOC与PIN定义相同。至于nrf52840规格手册可以到Nordic官网下载,大概有1000页厚。

ProMicroNRF52840

我购买的这款板子虽然印刷了 Promicro NRF25840 字样,不过实际上还是国产 SuperMini NRF52840 。关于它的讨论可以参见 https://github.com/joric/nrfmicro/wiki/ALternatives (非常详细),列出了可能会买到的各种型号以及使用中遇到的问题。

原始板载bootloader信息如下:

UF2 Bootloader 0.6.0 lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-41-gdf0cda2d) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: nice!nano
Board-ID: nRF52840-nicenano
SoftDevice: S140 version 6.1.1
Date: Jun 19 2021

目前nicenano最新稳定版Bootloader为0.9.2,支持通过拖拽uf2更新,不需要J-link或者ST-Link之类烧录器。

开发环境

CircuitPython

CircuitPythonSuperMini NRF52840提供了官方支持,到 https://circuitpython.org/board/supermini_nrf52840/ 下载uf2固件然后进入bootloader丢进去就装好了。此后SuperMini NRF52840连接到电脑时,都会自动出现名为 CIRCUITPY 的磁盘,进去编辑 code.py ,每次保存后,MCU都会自动重启并执行程序,省却了编译以及上传烦恼,十分便利。官方教程给的测试代码如下:

import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)

保存后,板子上的红色LED灯就会按照设定的0.5秒交替亮灭。

顺便挖掘下板载定义:

import board

print("所有可用的板载定义:")
for attr in dir(board):
    if not attr.startswith('_'):  # 过滤掉内部属性
        print(f"board.{attr} = {getattr(board, attr)}")
所有可用的板载定义:
board.AIN0 = board.P0_02
board.AIN2 = board.P0_04
board.AIN5 = board.P0_29
board.AIN7 = board.P0_31
board.BAT_VOLT = board.P0_04
board.I2C = <function>
board.LED = board.P0_15
board.MISO = board.P1_11
board.MOSI = board.P0_10
board.NFC1 = board.P0_09
board.NFC2 = board.P0_10
board.P0_02 = board.P0_02
board.P0_04 = board.P0_04
board.P0_06 = board.P0_06
board.P0_08 = board.P0_08
board.P0_09 = board.P0_09
board.P0_10 = board.P0_10
board.P0_11 = board.P0_11
board.P0_12 = board.P0_12
board.P0_13 = board.P0_13
board.P0_15 = board.P0_15
board.P0_17 = board.P0_17
board.P0_20 = board.P0_20
board.P0_22 = board.P0_22
board.P0_24 = board.P0_24
board.P0_26 = board.P0_26
board.P0_29 = board.P0_29
board.P0_31 = board.P0_31
board.P1_00 = board.P1_00
board.P1_01 = board.P1_01
board.P1_02 = board.P1_02
board.P1_04 = board.P1_04
board.P1_06 = board.P1_06
board.P1_07 = board.P1_07
board.P1_11 = board.P1_11
board.P1_13 = board.P1_13
board.P1_15 = board.P1_15
board.RX = board.P0_08
board.SCK = board.P1_13
board.SCL = board.P0_20
board.SDA = board.P0_17
board.SPI = <function>
board.TX = board.P0_06
board.UART = <function>
board.VCC_OFF = board.P0_13
board.board_id = supermini_nrf52840

Arduino

Arduino官方并不支持ProMicro NRF52840,不过由于价格缘故国外用户不少,可以参照 https://github.com/pdcook/nRFMicro-Arduino-Core 折腾,配置开发环境过程如下:

  1. 下载安装Arduino IDE,我安装了最新稳定版 2.3.6。
  2. 打开Arduino IDE , Go to File > Preferences
  3. 点击 "Additional boards manager URLs" 右边的“复制”图标
  4. 将这两行粘贴进去,然后点击OK
  5. 重启 Arduino IDE
  6. Go to Tools > Board: > Boards Manager
  7. 搜索 "nrfmicro" (nRFMicro-like Boards by pdcook)
  8. 点击安装
  9. 打开 %USERPROFILE%\AppData\Local\Arduino15\packages
  10. nRFMicro-like Boards文件夹重命名为 nRFMicro
  11. 重启 Arduino IDE
  12. Go to Tools > Board: > nRFMicro-like Boards > SuperMini nRF52840

上述步骤与项目readme有出入,实际上如果你按照readme操作,第7步根本搜不到nrfmicro。修改后的步骤来自于issue区。第10步如果不修改文件夹名称,在第12步无法选中对应版型。

如上配置完毕后,在Arduino IDE中,开发板类型选择SuperMini nRF52840,端口根据实际设置。如下是个非常简单的点灯程序:

void setup() {
  // 初始化板载LED引脚
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  // LED闪烁:亮1秒,灭1秒
  digitalWrite(LED_BUILTIN, HIGH);  // 点亮LED
  delay(1000);                      // 等待1秒
  digitalWrite(LED_BUILTIN, LOW);   // 熄灭LED  
  delay(1000);                      // 等待1秒
}

如何将程序烧录到SuperMini nRF52840中呢?在 Tools - Programmer 中,选择 Bootloader DFU for Blue nRF52 。设置SuperMini nRF52840进入DFU模式(0.5s内短接RST和GND 2下,看到nicenano盘符、红色LED灯呈现呼吸灯效果就成功了),点击 Tools - Burn Bootloader ,刷入新的Bootloader。结束后,可见磁盘名称变成了 SUPERMINI ,对应 INFO_UF2.TXT 文件内容如下:

UF2 Bootloader 1.0.0 lib/nrfx (v2.0.0) lib/tinyusb (0.12.0-145-g9775e7691) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: SuperMini
Board-ID: nRF52840-SuperMini-v0
Date: Sep 12 2024
SoftDevice: S140 7.3.0

重要提示:开发板预装的Bootloader是nice!nano的,它不支持Arduino IDE通过DFU烧录程序,所以必须换掉,否则会报 PermissionError 13 错误,试过更新到了0.9.2问题照旧。另外如果供电不足会直接timeout,建议插到USB3接口。

下次通过DFU烧录程序前,同样需要提前短接RST和GND进入DFU模式,切记切记。

PlatformIO

参考 https://github.com/ICantMakeThings/Nicenano-NRF52-Supermini-PlatformIO-Support ,我没整明白~

结论

价格便宜、体积小巧,具备CircuitPython官方支持和Arduino第三方支持,蓝牙功能强大,支持ZMK固件,可拿来自制蓝牙键盘。不过烧录接口没有引出,仅以触点形式存在,不便使用烧录器。RP2040 pico、ESP等同价位开发板兼容性更强、接口更友好,更适合多数人群。


评论