nRF52840(一) 环境搭建


本文旨在以尽可能少安装软件的情况下,快速完成nRF52840芯片的开发准备。

硬件准备

  • nRF52840的板子

  • Jlink ob加ST-Link V2(这俩估计都人手好几个,当然Jlink V9以上更好)

  • windows系统的电脑一台,我的是Win10系统

  • 其他(USB线啥的)

下载安装需要的开发工具

1.Nordic提供的SDK包

里面包含了开发所用到的全部文件,下最新的就可以了。

下载链接:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK

Nordic官网下载很慢,可以点击这里下载

这里我们使用的版本为nRF5_SDK_16.0.0_98a08e2。当确定使用版本之后,除非有严重bug,不然不要去乱换版本

2.Keil5 for arm

就是拿来写STM32那个软件,版本的话看个人选择了(有些版本有很奇怪的bug,比如dbug时老是卡死)。这里我使用的版本是5.28.0。

3.PACK包

下载NordicSemiconductor.nRF_DeviceFamilyPack.8.32.1.pack(如果使用16.0.0版本的SDK则pack要大于8.27.1,这里我下载了最新的。此外如果使用其他版本的SDK则需要下载其对应版本的pack)和ARM.CMSIS.4.5.0.pack。

下载链接:https://www.keil.com/dd2/pack/

第一个也可在http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/下载

MDK官网也很慢,可以点击这里和这里下载。

也可以使用keil自带的包管理器(需要联网)。

4.nRF Connect(可选)

Nordic提供的一个手机APP,可以用来调试蓝牙。它还有一个功能弱化版nRF Toolbox。

可以去手机应用市场下载,也可以点击这里下载。

5.Jlink驱动(可选)

其实Keil5已经自带一个Jlink的驱动,不过不完整,只能用于Keil下载。这里我们单独安装一遍的目的是为了使用J-Link RTT Viewer打印调试信息(当然也可以使用串口啦,不过RTT调试功耗很低,正式产品上也可以一直打开。而且最关键的是少占用了两个IO啊),建议安装新版本,因为旧版本不支持nRF52840,这里我使用的版本是6.12c

工程设置与下载测试

1.点灯

打开nRF5_SDK_16.0.0_98a08e2\examples\peripheral\blinky\pca10056\blank\arm5_no_packs路径下的工程文件。

简要说明一下,pca10056是Nordic官方推出的一块板子,主控是nRF52840。

把弹出来提示都关掉。这里是让你安装NordicSemiconductor.nRF_DeviceFamilyPack_NordicLicense.8.27.0,不过根本就没有这个版本,也不知道Nordic是怎么想的(如果使用了老版本的SDK且下载安装了对应版本的pack,则不需要以下操作)。

点击选择pack包。

这里设置红框里面的配置如图所示,然后点击两次OK。

编译一下试试。

有很多错误,继续配置,右键Device,点选第一项。

点击Remove然后点击OK。

添加nRF5_SDK_16.0.0_98a08e2\modules\nrfx\mdk路径下的arm_startup_nrf52840.s和system_nrf52840.c到工程。

编译一下,没有任何错误跟警告了。然后我们对工程进行一定的修改。打开pca10056.h文件(此文件为pca10056这块板子硬件接口的一些配置)。

参考自己板子的原理图修改LED_1的引脚设置(灯很多的话也可以多改几个),这里是P0.13脚。

点击Download下载程序就能看到LED闪烁起来了(有好几个的话则是流水灯效果),如果下载失败的话,可以先执行一下擦除协议栈的功能。

2.蓝牙串口

打开nRF5_SDK_16.0.0_98a08e2\examples\ble_peripheral\ble_app_uart\pca10056\s140\arm5_no_packs路径下的的工程文件。

简要说明一下,s140是指协议栈的类型,这是一个针对nRF52840使用的包含所有功能的协议栈。nRF52840本身只是一个支持2.4G的芯片,是不具有蓝牙功能的,需要软件配合才能实现蓝牙的功能。所以说,如果想使用蓝牙功能的话,则必须用协议栈进行开发。

进行上面介绍的工程配置操作,这里就不重复了。接着我们切换到协议栈的工程。

说是工程,其实就是一个HEX文件(本体就藏在nRF5_SDK_16.0.0_98a08e2\components\softdevice\s140\hex下),Nordic官方并没有提供它的源码(所以说,不需要编译它),这里我们对它的下载算法进行配置一下。

配置完成之后,点击Flash—Erase,擦除一下协议栈。

点击Download下载协议栈(此操作仅需要执行一次即可,之后协议栈会一直保存在芯片里面)。

这里也可以使用nRF5x command line tools进行下载。

注意:使用Jlink V9以下的版本对协议栈进行擦除烧写的时候,nRF52840很容易”变砖“。就是Jlink怎么样都识别不了芯片。这时候我们可以拿出ST-Link来救场(ST-Link真是神奇了,NXP的RT1050系列也可以识别烧写)。只需要在烧写协议栈的时候使用一次就可以了。正常开发的时候用啥都一样。

然后我们切换回正常的工程。

编译,然后点击Download下载程序(之后下载程序都建议使用Jlink)。

打开nRF Connect,可以找到叫Nordic_UART的设备,这个就是我们的板子了,点击CONNECT连接。

这样就成功连接上了,Nordic UART Service就是串口服务了。