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 的工程结构,知道如何创建新工程,知道如何调试 ,一步一步来。

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

相关推荐
CAE虚拟与现实2 天前
VSCode中的下载VSIX是指什么?
ide·vscode·编辑器
路边闲人23 天前
vscode启用GEMINI CODE ASSIST插件
ide·vscode·gemini
CAE虚拟与现实3 天前
VSCode官方汉化包
ide·vscode·编辑器·vscode汉化
CAE虚拟与现实3 天前
VSCode创建Python项目和运行py文件
ide·vscode·编辑器
Stardep3 天前
ssh远程连接服务器到vscode上“连接失败”
服务器·vscode·ssh
superior tigre3 天前
1.linux环境配置+ssh远程连接vscode调试(问题:无法联网,无法共享粘贴板,不满足运行vscode服务器的先决条件)
linux·服务器·vscode
老黄编程3 天前
VSCode 的百度 AI编程插件
ide·vscode·ai编程
老黄编程3 天前
VSCode AI编程插件
ide·vscode·ai编程
Naiva4 天前
ESP32-C3 入门09:基于 ESP-IDF + LVGL + ST7789 的 1.54寸 WiFi 时钟(SquareLine Studio 移植)
ide·笔记·vscode
return(b,a%b);4 天前
VSCode 远程开发连接(glibc<2.28)
ide·vscode·编辑器