从零上手nRF52840 DK:一次完整的开发环境配置与LED闪烁实战
1. 开发板开箱与基础认知第一次拿到nRF52840 DK开发板时我对着这个火柴盒大小的板子研究了半天。板子左上角那个显眼的4颗LED灯就是待会要征服的对象右下角自带J-Link OB调试器意味着我们不需要额外购买烧录工具——这点对新手特别友好。板载的nRF52840芯片支持蓝牙5.2/Thread/Zigbee三协议不过今天我们暂时不碰无线功能先专注搞定最基础的点灯仪式。板子背面印着关键接口说明SWD调试接口、USB供电口、复位按钮的位置都需要记清楚。特别提醒注意板子左下角那个不起眼的电源开关我第一次使用时因为没打开它盯着毫无反应的板子怀疑了半小时人生。随板附带的20pin排针需要自己焊接不过对于基础实验暂时用不上可以先放着吃灰。2. 开发环境搭建实战2.1 SDK安装那些坑Nordic的nRF5 SDK是个大礼包最新版本在官网下载时需要填问卷建议直接使用v17.1.0这个稳定版本约650MB。下载完成后解压路径要特别注意——绝对不要放在中文或带空格的目录下我曾在D:\学习资料\物联网路径下栽过跟头SES编译时各种报错最后发现是路径惹的祸。SDK目录结构需要重点了解components/蓝牙协议栈等核心组件examples/示例代码待会要用的blinky就在这external/第三方工具链modules/硬件驱动层2.2 开发工具三选一虽然文档里推荐了Keil/IAR/SES三种IDE但实测下来**Segger Embedded StudioSES**确实最省心。安装时记得勾选Add nRF5 SDK support选项这样后续创建项目时会自动关联SDK路径。有个细节容易被忽略安装完成后要先去[Segger官网]申请免费License用设备管理器里查到的J-Link序列号注册激活邮件可能会被扔进垃圾箱。对于Linux用户可以用gcc-arm-none-eabi工具链配合VS Code开发不过需要手动配置Makefile新手建议先用SES走通流程。Windows用户注意安装时关闭杀毒软件我有次被某安全软件拦截了J-Link驱动安装导致后续烧录失败。2.3 驱动安装检查清单连接开发板USB口设备管理器应该出现两个设备J-Link OB在通用串行总线设备下CMSIS-DAP在人机接口设备下如果出现黄色感叹号需要手动指定驱动路径指向C:\Program Files\SEGGER\JLink_Vxxx目录或者使用Zadig工具强制安装WinUSB驱动验证安装成功# 打开J-Link Commander检查连接 J-Linkshowemulist J-Linkexec device nRF52840_xxAA3. 第一个LED工程实战3.1 项目创建避坑指南在SES中新建项目时务必选择nRF5 SDK Project模板而不是普通的ARM项目。关键配置参数Device: nRF52840_xxAASDK版本: 与下载的SDK一致SoftDevice: 先选None蓝牙项目才需要从examples/peripheral/blinky复制项目时建议整个pca10056文件夹一起复制对应nRF52840 DK的板型。我试过只复制main.c文件结果漏了关键的sdk_config.h配置编译时报错NRF_GPIO_PIN_MAP not defined。3.2 代码魔改小课堂打开main.c会发现核心逻辑简单到哭while (true) { for (int i 0; i LEDS_NUMBER; i) { bsp_board_led_invert(i); nrf_delay_ms(500); } }想玩点花样试试这些修改改闪烁频率调整nrf_delay_ms()参数跑马灯效果单独控制每个LED的亮灭顺序按键控制加上bsp_board_button_state_get()检测注意开发板LED对应的GPIO引脚定义在bsp_board.h里#define LED_START 13 #define LED_0 13 #define LED_1 14 #define LED_2 15 #define LED_3 16 #define LED_STOP 163.3 烧录的十八般武艺方法一SES一键烧录点击工具栏的Build and Run小锤子绿三角图标观察Output窗口的进度提示看到Verified OK表示成功方法二J-Flash手动操作# 常用命令序列 device nRF52840_xxAA speed 4000 erase loadfile blinky.hex verify start遇到Could not reset target错误时先按开发板复位键再检查SWD接口是否被占用。有时杀毒软件会阻止J-Link访问USB设备临时关闭即可。4. 调试与问题排查4.1 常见错误代码表错误现象可能原因解决方案No J-Link found驱动未正确安装重装驱动或换USB口Flash download failed目标板未供电检查电源开关Invalid ROM Table芯片锁死执行unlock命令SIGTERM received调试接口冲突关闭其他占用SWD的软件4.2 调试技巧三连printf大法在SEGGER_RTT_printf()输出调试信息需要先在sdk_config.h开启RTT_ENABLED宏定义断点观察在SES中右键设置断点查看外设寄存器状态GPIO寄存器NRF_P0-OUT时钟状态NRF_CLOCK-EVENTS_HFCLKSTARTED电流检测正常运行时开发板电流约15mA如果异常升高可能是程序跑飞4.3 进阶准备成功点亮LED后可以尝试这些升级玩法用PWM实现呼吸灯效果通过UART连接电脑控制LED移植FreeRTOS实现多任务控制记得每次修改代码前备份工程我有次手滑删除了main.c不得不从头重建项目。Nordic官方论坛和GitHub的nRF5-SDK仓库是解决问题的宝库遇到奇怪错误时先去搜搜看。