在 Windows 下使用 GCC + Vscode 搭建 nRF52xxx 开发环境 ...... by 矜辰所致
最近有遇到项目需求,需要使用到 Nordic 的 nRF52xxx 芯片,还记得当初刚开始写博文的时候的写的 nRF52832 学习笔记,现在看当时笔记毫无逻辑可言,自己也不太看得懂,既然现在要正式开始用了,那么重新好好做些笔记。
刚开始,当然是要搭建好开发环境,因为已经习惯使用 gcc 环境,所以本文就来说说如何使用 GCC + Vscode 搭建 nRF52xxx 的开发环境 。
我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!
因为 nRF52xxx 是 ARM 芯片,其实对于在 Windows 下使用 GCC 和 VScode 搭建 ARM 开发环境,我以前有一篇详细的博文,可以直接参考:
在window下使用 VScode 搭建 ARM 开发环境—— 详细版
最后只需要保证配置好环境变量,能够查到 arm-none-eabi-gcc
版本就表示配置好了:
详细步骤大家直接参考上面博文就好。
nRF5 SDK 是 Nordic nRF5 系列产品的开发包,他包括了我们开发所需要的代码,我们可以从
Nordic 官网下载这个 SDK,下载链接如下: nRF5 SDK download
比如我们选择最新的 17.1.0 版本,
翻到最下面可以看到如下图示:
上图中,我发现虽然我只选择过 SDK_17.10 版本,但是到最下面,系统会自动推荐给你这么多 s112 类似的压缩包,这个我们待会详细说明,我们选中最后一项下载即可,下载后我们放到自己需要的位置,解压出来即可,如下图:
我们来解答一下上面那个问题,为什么选中的是nRF5 SDK 会出现官方会自动推荐那么多压缩包,那些 s112_nrf52_7.2.0.zip
是 Softdevice ,就是 Nordic 蓝牙协议栈的名称。
开发 Nordic 蓝牙芯片,我们需要知道 Nordic 的用户程序和协议栈是分开的,烧录的时候也需要分开烧录,这是区别与很多其他 MCU 的地方。
而且 Nordic 提供的协议栈,是以 hex 的形式提供给开发者的,如下:
那其实呢,对于我们下载的 nRF5 SDK 来说,里面已经包含了该版本支持的所有 softdevice,其存在于我们 SDK 解压后的 \components\softdevice
文件夹内,如下图:
那既然都包括 协议栈,为什么官方还会给我们推荐?
那是因为协议栈有时候会更新修复一些 bug,Nordic会把 bug 修复后的协议栈再以更高版本的方式发布出来,具体的 修复细节官方会有说明。
这里注意,大家更新协议栈的时候需要注意一下名字,如果以前用了某一版本的协议栈,需要更新新版本的协议栈,需要注意只下载最后一个位数字有变化的即可,比如用的 7.2.0,后续官方发布了7.2.1 ,我们可以直接下载覆盖以前的即可。 如果是前面的数值就有变化,那么两个版本的协议栈是不兼容的,需要进行其他的处理。
那既然聊到 Softdevice ,虽然与搭建环境无关,也浅浅了解一下把 。
以下内容出自 Nordic 中国区的 FAE:
Softdevice 命名规则一:
Softdevice包括两种底层协议栈:BLE和ANT,BLE包括两种角色:central(又称master)和peripheral(又称slave),为此需要给这些不同类型的协议栈进行命名区分。协议栈命名格式为Sxyz,其中
x – 表示协议栈的类型,1表示BLE协议栈,2表示ANT协议栈,3表示同时支持BLE和ANT
y – 表示BLE角色,1表示从设备,2表示主设备,3表示同时支持主设备和从设备
z – 表示芯片类型,0表示nRF51系列,2表示nRF52系列
比如S110,表示只支持从设备模式的nRF51 BLE协议栈
比如S130,表示既支持从设备模式又支持主设备模式的nRF51 BLE协议栈
比如S132,表示既支持从设备模式又支持主设备模式的nRF52 BLE协议栈
比如S212,表示nRF52 ANT协议栈
比如S332,表示nRF52既支持BLE协议栈又支持ANT协议栈,而且BLE协议栈既支持从设备模式又支持主设备模式
Softdevice命名规则二:
大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。
回到正题,我们的前面已经下载了 SDK ,我们继续修改一下配置,才可以正常的编译。
我们在编译之前需要修改一下 SDK 中 Makefile 的配置,在你解压的路径\nRF5_SDK_17.1.0_ddde560\components\toolchain\gcc
中可以看到配置文件,在 windows 和 posix 线程操作系统下修改的文件是不同的,如下图:
本次测试使用的是 windows 系统,所以我把文件修改如下(下图有个错误):
上面 bin 后面少了一个斜杠 = =!,bin 后面的斜杠不要忽略。
然后通过 VScode 打开 SDK,如下图,直接在 SDK 的根目录打开就可以:
然后在 VScode 里面打开中断,进入示例目录,我们下面进入的是 blinky 这个示例:
所以修改一下 Makefile.windows :
再次 make 一下,编译成功,生成 bin 文件和 hex 文件:
其实有了 hex 文件,如果使用的 J-Link 我们可以直接通过 J-Flash 进行烧录:
但是这样也是有点麻烦的,我们还记得开发 STM32 的时候,我们会在 Makefile 中中定义一些 .PHONY 伪指令用来烧录,如下图:
我们来看看 nRF5 SDK 环境中的 Makefile 是否有类似的指令,在 Makefile 的最后部分,我们可以看到相关指令:
我们可以看到 nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerase
明显是某个软件的指令,所以我们肯定还缺少这个烧录工具。
那上面缺少的工具呢,叫做nRF Command Line Tools
,官方下载地址:nRF Command Line Tools 下载地址
下载好后直接安装, 工具在安装过程中附带了SEGGER J-Link software
, 因为本身做 ARM 开发的,电脑上如果有 SEGGER J-Link
可以选择不安装,但是有很多人建议最好是按照步骤全部安装。
我这里为了测试,就没有选择安装 SEGGER J-Link
,记住安装的时候最好是拔掉设备!
工具安装完成,本来还想着是不是也要添加环境变量,实际上安装的时候他自动就添加了,最后安装完成,根据我们以前一些工具的经验,我们可以通过 cmd 命令简单看一下:
这样我们就能使用 nrfjprog
命令了,我们回到工程,这里要注意! 工具安装好以后要重启一下 Vscode 才可以正常烧录,我们直接输入make flash
,可以看到可以正常烧录了 :
我们可以再测试一下,其他的伪指令,烧录协议栈,清除芯片,都是可以的,如下:
nRF5 SDK有一个非常重要的配置文件:sdk_config.h
,可以通过 sdk_config.h文件对整个芯片软件架构配置, 我们在 makefile 的最后可以看到有这个指令,说明我们也可以使用make sdk_config
命令,如下图:
如果你不能想上图一样打开图形配置界面,那是因为你缺少 Java 运行环境,CMSIS Configuration Wizard
是一个 Java 应用程序。
那具体文件如何使用,我们后面需要用到再说。
到这里,我们已经可以对 nRF5 SDK 的示例进行编译烧录了,虽然好像我的测试板子程序没有跑起来 = =!
我们还有很多东西不清楚,接下来我们要做的是去认识 SDK 的工程结构,知道如何创建新工程,知道如何调试 ,一步一步来。
好了,本文就到这里,谢谢大家!