GCC + Vscode 搭建 nRF52xxx 开发环境

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

前言

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

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

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

目录

  • 前言
  • 一、 安装 ARMGCC 和 VScode
  • 二、 下载 nRF5 SDK
    • 2.1 nRF5 SDK 和 softdevice
    • 2.2 Softdevice 的命名
  • 三、编译
    • 3.1 修改 Makefile 配置文件
    • 3.2 编译
  • 四、烧录
    • 4.1 下载 nRF Command Line Tools
    • 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 的工程结构,知道如何创建新工程,知道如何调试 ,一步一步来。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/127728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

〔003〕虚幻 UE5 基础教程和蓝图入门

✨ 目录 ▷ 新建项目▷ 快捷操作▷ 镜头移动速度▷ 新建蓝图关卡▷ 打印字符串▷ 蓝图的快捷键▷ 场景中放置物体▷ 通过蓝图改变物体位置▷ 展现物体运动轨迹▷ 队列运行▷ 新建项目 打开虚幻启动程序,选择 引擎版本 后点击 启动选择 游戏 类型,默认设置中选择 蓝图,项目名…

聚铭国产化日志合规版 → 中小企事业单位等保建设的最优解

聚铭网络最新发布聚铭综合日志分析系统国产化合规版本 ,相较于同类型同档次非国产化设备性能无衰减、功能无裁减、成本不提高,适用于信创替换以及等保日志建设等应用场景。 面对日趋复杂的外部环境,近年来,国家越来越重视关键技术…

鲁大师电动车智能化测评报告第二十三期:实测续航95km,九号Q90兼顾个性与实用

鲁大师第二十三期智能化电动车测评排行榜数据来源于鲁大师智慧实验室,测评的车型均为市面上主流品牌的主流车型。截止目前,鲁大师智能化电动车测评的车型高达130余台,且还在不断增加和丰富中。 一、测评依据 鲁大师电动车智能化测评体系包含车辆的状态采集与管理硬件系统、车辆…

归并排序之确定递归层数

题目 给定一维int型数组a[0,1,…,n-1], 使用归并排序方法, 对其进行从小到大排序, 请输出递归过程中自顶自下第三层的排序结果, 其中最顶层为第一层, 即最终的排序结果层. 归并排序划分请按a[0,mid(0n-1)/2], a[(0n-1)/21, n-1]进行划分子问题. Input 输入第1行有一个int型正…

OLED透明屏的应用场景有哪些

OLED透明屏在其他领域的应用包括: 商业展示:在商业展示中,OLED透明屏可以作为展示窗口,展示产品信息、广告宣传和品牌形象。通过将透明屏幕安装在展柜、货架或商业窗口中,可以吸引顾客的注意力并提供引人注目的展示效…

霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?

霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域,在电流检测领域中有着重要地位和实用价值,在电驱系统中被称为新能源汽车的动力“心脏”。因此,霍尔电流传感…

QML9、输入元素

1、输入元素(Input Element) 我们已经使用过MouseArea(鼠标区域)作为鼠标输入元素。这里我们将更多的介绍关于键盘输入的一些东西。我们开始介绍文本编辑的元素:TextInput(文本输入)和TextEdit(文本编辑)。 2、文本输入(TextInput) 文本输入允许用户输入一行文本…

WorkPlus定制化的沟通协作平台,助您实现企业级完全掌控

在企业沟通协作的领域,一种高度定制化的平台是至关重要的。WorkPlus作为一款领先的沟通协作平台,具备高度定制化的特点,能够满足企业各项需求。通过平台级定制扩展和上下游完全掌控,WorkPlus成为了企业实现定制化和完全掌控的理想…

excel如何加密(excel加密的三种方法)

Excel是一款广泛使用的办公软件,有时候我们需要对一些重要的Excel文件进行加密,以保证文件的安全性。下面将介绍3种常用的Excel加密方法。 方法一:通过路径文件-另存为-工具-常规选项-设置打开或修改权限密码(密码只可以使数字、字…

虚幻引擎:如何进行关卡切换?

一丶非无缝切换 在切换的时候会先断开连接,等创建好后才会链接,造成体验差 蓝图中用到的节点是 Execute Console Command 二丶无缝切换 链接的时候不会断开连接,中间不会出现卡顿,携带数据转换地图 1.需要在gamemode里面开启无缝漫游,开启之后使用上面的切换方式就可以做到无缝…

矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证

近日,超融合异构云原生数据库 MatrixOne企业版软件 V1.0 完成了与 OpenCloudOS 的相互兼容认证,测试期间,整体运行稳定,在功能、性能及兼容性方面表现良好。 一、产品简介 矩阵起源 MatrixOrigin 致力于建设开放的技术开源社区和…

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识,以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是,分保,等保,关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…

LeetCode【78. 子集】

78. 子集 中等 2.2K 相关企业 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…

Vue框架项目,给容器添加水印watermark

1、在/utils下新增一个名为waterMark.js的脚本 具体水印样式可以在代码里自行调节style 参数 - 水印内容, 加水印的容器, 是否显示时间 let watermark {};function getCurrentDateTime() {const now new Date();const year now.getFullYear();const month String(now.ge…

Flink之SQL查询操作

SQL查询 基本SELECT查询生成测试数据WITHWHEREDISTINCTORDER BYLIMIT 窗口函数概述创建数据表滚动窗口 TUMBLE滑动窗口 HOP累积窗口 CUMULATE窗口偏移 聚合窗口聚合分组聚合OVER聚合 TOP-N普通Top-N窗口Top-N 联结Join查询内部等连接外部等连接间隔联结 集合操作UNION 和 UNION…

界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)

本文将为大家总结下DevExtreme在v23.1版本中发布的一些与图表和仪表盘相关的功能。 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery&#…

数据结构(c语言版) 队列

链队列 要求&#xff1a;实现链队列的创建、初始化、入队、出队 &#xff08;先进先出&#xff09; 代码 // // Created by My.cy on 2023/10/19. // //链队列 创建、初始化、入队、出队 先进先出#include <stdio.h> #include <malloc.h>//定义结构体 struct…

“探秘!根据关键词搜索商品列表的虾皮API大揭露!“

要使用虾皮API根据关键词获取商品列表&#xff0c;您需要使用虾皮API的搜索功能。以下是使用Python和虾皮API根据关键词获取商品列表的基本步骤&#xff1a; 注册虾皮API账号并获取API凭证&#xff08;访问虾皮开放平台并创建应用以获取API凭证&#xff09;。安装必要的Python…

SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)

主要分为客户端和服务端 服务端 pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent fro…

使用电脑上自带的软件进行远程连接

使用电脑上自带的软件进行远程连接 首先需要让你远程的电脑设置成允许远程连接 Windows R打开运行面板&#xff0c;然后输入sysdm.cpl命令&#xff0c;如下图&#xff1a; 选择“远程”选项卡&#xff0c;确保选中“允许远程连接到这台计算机”&#xff0c;如下图&#xff1…