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

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

相关推荐
哇咔咔哇咔10 小时前
使用Markdown编写适用于GitHub的README.md文件的目录结构
vscode·markdown
羊小猪~~15 小时前
神经网络基础--什么是神经网络?? 常用激活函数是什么???
人工智能·vscode·深度学习·神经网络·机器学习
Eiceblue16 小时前
Python 在PDF中绘制形状(线条、矩形、椭圆形等)
vscode·python·pycharm·pdf
tekin1 天前
vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例
ide·vscode·php·launch.json·runtimeargs·php内置服务自定义参数
曹申阳1 天前
vscode 创建 vue 项目时,配置文件为什么收缩到一起展示了?
ide·vue.js·vscode
丶Darling.1 天前
vscode在windows和linux如何使用cmake构建项目并make生成可执行文件,两者有什么区别
linux·windows·vscode
羊小猪~~2 天前
前端入门一之CSS知识详解
前端·javascript·css·vscode·前端框架·html·javas
Leung_ManWah2 天前
NRF52832学习笔记(41)——添加串口库libuarte
串口·uart·ble·nrf52832·libuarte
苏三有春2 天前
【解决办法】无法使用右键“通过VSCode打开文件夹”
ide·vscode·编辑器
z千鑫2 天前
【VScode】VScode内的ChatGPT插件——CodeMoss全解析与实用教程
ide·人工智能·vscode·ai·chatgpt·编辑器·ai编程