GCC + Vscode 搭建 nRF52xxx 开发环境

在 Windows 下使用 GCC + Vscode 搭建 nRF52xxx 开发环境   ...... by 矜辰所致

前言

最近有遇到项目需求,需要使用到 Nordic 的 nRF52xxx 芯片,还记得当初刚开始写博文的时候的写的 nRF52832 学习笔记,现在看当时笔记毫无逻辑可言,自己也不太看得懂,既然现在要正式开始用了,那么重新好好做些笔记。

刚开始,当然是要搭建好开发环境,因为已经习惯使用 gcc 环境,所以本文就来说说如何使用 GCC + Vscode 搭建 nRF52xxx 的开发环境 。

我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

目录

  • 前言
  • [一、 安装 ARMGCC 和 VScode](#一、 安装 ARMGCC 和 VScode)
  • [二、 下载 nRF5 SDK](#二、 下载 nRF5 SDK)
    • [2.1 nRF5 SDK 和 softdevice](#2.1 nRF5 SDK 和 softdevice)
    • [2.2 Softdevice 的命名](#2.2 Softdevice 的命名)
  • 三、编译
    • [3.1 修改 Makefile 配置文件](#3.1 修改 Makefile 配置文件)
    • [3.2 编译](#3.2 编译)
  • 四、烧录
    • [4.1 下载 nRF Command Line Tools](#4.1 下载 nRF Command Line Tools)
    • [4.2 sdk_config](#4.2 sdk_config)
  • 结语

一、 安装 ARMGCC 和 VScode

因为 nRF52xxx 是 ARM 芯片,其实对于在 Windows 下使用 GCC 和 VScode 搭建 ARM 开发环境,我以前有一篇详细的博文,可以直接参考:

在window下使用 VScode 搭建 ARM 开发环境------ 详细版

最后只需要保证配置好环境变量,能够查到 arm-none-eabi-gcc 版本就表示配置好了:

详细步骤大家直接参考上面博文就好。

二、 下载 nRF5 SDK

nRF5 SDK 是 Nordic nRF5 系列产品的开发包,他包括了我们开发所需要的代码,我们可以从

Nordic 官网下载这个 SDK,下载链接如下: nRF5 SDK download

比如我们选择最新的 17.1.0 版本,

翻到最下面可以看到如下图示:

上图中,我发现虽然我只选择过 SDK_17.10 版本,但是到最下面,系统会自动推荐给你这么多 s112 类似的压缩包,这个我们待会详细说明,我们选中最后一项下载即可,下载后我们放到自己需要的位置,解压出来即可,如下图:

2.1 nRF5 SDK 和 softdevice

我们来解答一下上面那个问题,为什么选中的是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 ,我们可以直接下载覆盖以前的即可。 如果是前面的数值就有变化,那么两个版本的协议栈是不兼容的,需要进行其他的处理。

2.2 Softdevice 的命名

那既然聊到 Softdevice ,虽然与搭建环境无关,也浅浅了解一下把 。

以下内容出自 Nordic 中国区的 FAE:

  1. 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协议栈既支持从设备模式又支持主设备模式

  2. Softdevice命名规则二:

    大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。

三、编译

回到正题,我们的前面已经下载了 SDK ,我们继续修改一下配置,才可以正常的编译。

3.1 修改 Makefile 配置文件

我们在编译之前需要修改一下 SDK 中 Makefile 的配置,在你解压的路径\nRF5_SDK_17.1.0_ddde560\components\toolchain\gcc 中可以看到配置文件,在 windows 和 posix 线程操作系统下修改的文件是不同的,如下图:

本次测试使用的是 windows 系统,所以我把文件修改如下(下图有个错误):

上面 bin 后面少了一个斜杠 = =!,bin 后面的斜杠不要忽略。

3.2 编译

然后通过 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 明显是某个软件的指令,所以我们肯定还缺少这个烧录工具。

4.1 下载 nRF Command Line Tools

那上面缺少的工具呢,叫做nRF Command Line Tools ,官方下载地址:nRF Command Line Tools 下载地址

下载好后直接安装, 工具在安装过程中附带了SEGGER J-Link software , 因为本身做 ARM 开发的,电脑上如果有 SEGGER J-Link 可以选择不安装,但是有很多人建议最好是按照步骤全部安装。

我这里为了测试,就没有选择安装 SEGGER J-Link ,记住安装的时候最好是拔掉设备!

工具安装完成,本来还想着是不是也要添加环境变量,实际上安装的时候他自动就添加了,最后安装完成,根据我们以前一些工具的经验,我们可以通过 cmd 命令简单看一下:

这样我们就能使用 nrfjprog 命令了,我们回到工程,这里要注意! 工具安装好以后要重启一下 Vscode 才可以正常烧录,我们直接输入make flash ,可以看到可以正常烧录了 :

我们可以再测试一下,其他的伪指令,烧录协议栈,清除芯片,都是可以的,如下:

4.2 sdk_config

nRF5 SDK有一个非常重要的配置文件:sdk_config.h ,可以通过 sdk_config.h文件对整个芯片软件架构配置, 我们在 makefile 的最后可以看到有这个指令,说明我们也可以使用make sdk_config命令,如下图:

如果你不能想上图一样打开图形配置界面,那是因为你缺少 Java 运行环境,CMSIS Configuration Wizard是一个 Java 应用程序。

那具体文件如何使用,我们后面需要用到再说。

结语

到这里,我们已经可以对 nRF5 SDK 的示例进行编译烧录了,虽然好像我的测试板子程序没有跑起来 = =!

我们还有很多东西不清楚,接下来我们要做的是去认识 SDK 的工程结构,知道如何创建新工程,知道如何调试 ,一步一步来。

好了,本文就到这里,谢谢大家!

相关推荐
热爱生活的五柒1 小时前
vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例
ide·vscode·编辑器
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
为什么每天的风都这么大11 小时前
Vscode/Code-server无网环境安装通义灵码
ide·vscode·阿里云·编辑器·ai编程·code-server
ahadee14 小时前
蓝桥杯每日真题 - 第19天
c语言·vscode·算法·蓝桥杯
写点什么啦17 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
hence..18 小时前
Vscode写markdown快速插入python代码
ide·vscode·python
ahadee18 小时前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯
陌上阳光20 小时前
vscode连接远程开发机报错
ide·vscode·编辑器
码码哈哈0.020 小时前
VSCode 2022 离线安装插件QT VSTOOl报错此扩展不能安装在任何当前安装的产品上。
ide·vscode·qt
yyywxk21 小时前
VSCode 新建 Python 包/模块 Pylance 无法解析
ide·vscode·python