一、SDK下载

下载页地址:

https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK​www.nordicsemi.com

点击右边那个图标就可以下载了,不过这个链接有点慢,往下拉

点击"Compatibale downloads"选项卡,再往下拉

这里把其他三个softdevice勾掉只留下sdk,点击下载,这个下载是比较快的。

二、SDK目录结构

解压后就是这个样子,关于目录说明,没有,因为我还没完全搞明白

三、创建工程目录

想要学会创建一个工程,最快速的方法就是找个例子复制过来

这里我们要找单片机编程的hello world——led闪烁

examples目录下有很多例子

关于这些目录是啥意思,抱歉我还没搞明白,但是peripheral这个目录显然是外设相关的例子,我们要的led闪烁例程很有可能会在这里

打开一看果然在这里,有四个blinky目录,选哪个呢,老规矩,三长选一短,就选blinky目录

先不管blinky目录里边有什么,先把它复制到我们喜欢的地方,比如说SDK根目录,因为以后命令行操作会很方便

复制完之后,SDK根目录就是这个样子

以后呢SDK目录就可以作为我们的项目根目录来使用了

四、工程管理

工程目录创建完了,那么如何管理我们的工程呢

GNU/Linux系统中有很多项目管理工具,比如gnu make、cmake、qmake等等,那么NRF5_SDK用什么管理工程呢

打开blinky目录

只有一堆目录、main.c源码文件,还有一个blinky.eww,这个一看就是IAR的工程文件,显然不是我们想要的,hex目录里边是一堆编译好的二进制文件,跟工程管理也没有什么关系,剩下的四个目录长得好像,这里我们打开第pca10040(不用想了,这个就是right one,四个目录代表不同的开发板,开发板MCU不同)

又有三个目录(SDK目录这么深,不简化一下,命令行操作起来肯定会累死),mbr和s132目录还不清楚是什么东西,只剩下一个blank目录了,“空”没准就是干干净净的led闪烁程序了

打开一看又是一堆目录,真是怕了你了,耐心分析一下,很明显每个目录代表不同的编译器,这里我们选择armgcc也就是arm-none-eabi-gcc

翻了这么深的目录,差点忘记本节的目的什么了,提醒一下,我们要找NRF5_SDK用的是什么工程管理工具,好了看到Makefile了吧,很明显是用的gnu make,blinky_gcc_nrf52.ld是链接脚本文件,将来编译的时候链接用的,_build目录可以假装没看到

这么深的目录结构显然不是我们想要的,再简化一下吧

这个就是blinky目录最终的样子了,等等,sdk_config.h是哪里来,跳到上上个图片(抱歉,没有图编号)有个config目录,sdk_config.h头文件就在里边,一看就跟SDK配置相关,暂时先不管它,它不是本文的关键。

五、倒数第二节

工程目录简化完了,我们也知道要用gnu make管理工程了

那么不如

make一下

虽然我们知道极有可能编译不过,但是我们还是要试试,因为一直改来改去太枯燥了,我们要让机器做点事情了。

神奇的事情发生了,编译通过了,真的难以置信

难以置信就对了,编译成功是因为我的Makefile改过了

现实是这样的

看到了吗,目录不对

我们打开Makefile一点一点分析

PROJECT_NAME     := blinky_pca10040
TARGETS          := nrf52832_xxaa
OUTPUT_DIRECTORY := _buildSDK_ROOT := ../../../../../..
PROJ_DIR := ../../..$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: LINKER_SCRIPT  := blinky_gcc_nrf52.ld

前三行分别定义了工程名、目标文件名、输出文件目录

重点是下边两个变量,SDK_ROOT显然是../,PROJ_ROOT为./

最后指定了链接脚本文件

改完之后再编译一次

失败,找不到编译器,显然是Makefile指定了编译器目录,然后找不到了

讲了半天的搭建开发环境,编译器都没装,失败

nRF52832是arm cortex-m4f内核的,所以我们要安装arm-none-eabi-gcc

下载地址:

GNU Toolchain | GNU-RM Downloads – Arm Developer​developer.arm.com

下载后解压到那里随便你

前面说道Makefile指定了编译器的,让我们看看到底是在哪里指定的

打开Makefile,好了不卖关子了,剧透一下,这个Makefile是找不到的,那怎么办

TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc
include $(TEMPLATE_PATH)/Makefile.common

在130行左右可以看到有个include,显然它包含了Makefile.common这个Makefile,当前Makefile找不到的当然去include的Makefile里边去找,顺着路径找到Makefile.common

# Toolchain commands
CC      := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-gcc)
CXX     := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-c++)
AS      := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-as)
AR      := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-ar) -r
LD      := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-ld)
NM      := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-nm)
OBJDUMP := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-objdump)
OBJCOPY := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-objcopy)
SIZE    := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-size)

可以看到,在119行指定了编译器,但是GNU_INSTALL_ROOT,GNU_PREFIX这两个变量的值我们依然不知道,前面说过了,当前文件找不到的就去包含的(或者被包含的)Makefile找

PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix)
TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)
include $(TOOLCHAIN_CONFIG_FILE)

在112行又包含了一个Makefile,这个文件叫做TOOLCHAIN_CONFIG_FILE,它的值是$(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)

上面我们已經知道TEMPLATE_PATH就是现在的目录,因为我们是顺着它找过来的,

那么我么再看PLATFORM_SUFFIX这个变量,什么意思呢,就是检测当前平台是windows还是posix,可以了解一下什么是posix,我使用的是ubuntu,所以这个文件就是本目录下的Makefile.posix

GNU_INSTALL_ROOT ?= /usr/local/gcc-arm-none-eabi-6-2017-q2-update/bin/
GNU_VERSION ?= 6.3.1
GNU_PREFIX ?= arm-none-eabi

这里指定了编译器的目录以及版本,这个需要根据你自己的安装目录和编译器版本去修改

GNU_INSTALL_ROOT ?= /usr/gcc-arm-none-eabi/bin/
GNU_VERSION ?= 8.2.1
GNU_PREFIX ?= arm-none-eabi

我安装在了/usr/gcc-arm-none-eabi/目录,版本是8.2.1

改完之后回到blinky目录,make一下,可以看到终于编译成功了,那么程序能不能用呢

六、最后一节

怎么烧写程序呢,总不能回到windows系统烧写吧,那岂不是太讽刺了

很简单Makefile里边就有烧写程序的target

# Flash the program
flash: default@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hexnrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerasenrfjprog -f nrf52 --reseterase:nrfjprog -f nrf52 --eraseall

有两个target,flash就是烧写程序,erase就是擦除flash,可以看到,这两个target都是调用nrfjprog实现的,所以一定要安装nrfjprog

下载页地址:

nRF5 Command Line Tools - Downloads​www.nordicsemi.com

解压,然后设置环境变量

然后连接好硬件,执行make flash就可以把led闪烁程序下载到开发板了

由于引脚选择的原因,可能你的开发板并不会看到led闪烁

cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)相关推荐

  1. 【Android RTMP】RTMP 直播推流服务器搭建 ( Ubuntu 18.04.4 虚拟机 )

    文章目录 安卓直播推流专栏博客总结 一. Android RTMP 直播推流简介 二. Nginx.RTMP Module 编译环境源码准备 三. pcre.OpenSSL.zlib 函数库安装 四. ...

  2. Ubuntu LNMPR环境搭建(Ubuntu 20.04 + Nginx1.8 + PHP 7.3 + Mysql8.0 + Redis5.0)

    本文环境 Windows10,Ubuntu 20.04,Nginx1.8,PHP 7.3,Mysql8.0,Redis5.0\ 不懂的可以评论或联系我邮箱:owen@owenzhang.com\ 著作 ...

  3. Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)

    xinetd服务简介: xinetd是一个守护进程,属于系统中的一个后台进程,周期性的执行某些任务,或者等待某个事件发生.不会随着用户的注销而退出. 支持对tcp.udp.RPC服务(但是当前对RPC ...

  4. Ubuntu 18.04.1 搭建Java环境和HelloWorld

    一.搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technet... 选择相应的 ...

  5. Ubuntu 18.04.1 搭建Java环境和HelloWorld 1

    一.搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java ...

  6. linux看测试环境版本,最新版 EOS 在 Ubuntu 18.04.1 LTS 环境上的安装测试教程

    EOS主网上线后,本地的开发环境一直没有升级.最近要启动新项目了,所以借着这个计划,彻底重新安装一下环境. 环境安装和配置的文章,已经很多了,但基本都是针对前期版本的.这里我把新旧版本的不同之处,罗列 ...

  7. linux笔记本装载 戴尔,第七代戴尔XPS 13开发版笔记本电脑装载Ubuntu 18.04系统

    据可靠消息称开发Ubuntu桌面工程总监Will Cooke表示旗下Ubuntu 18.04 LTS系统将被装载在第七代戴尔XPS 13开发版笔记本电脑中,该款笔记本电脑起步价为1049.99美元.同 ...

  8. Ubuntu 20.04安装Ros Noetic及Ubuntu 18.04安装ROS Melodic(两版本详细填坑)

    Ubuntu 20.04安装Ros Noetic及18.04安装ROS Melodic 表1-1 ROS的历史版本 1. 设置安装源 2. 添加秘钥 3. 更新列表 4. 开始安装 5. 配置ROS环 ...

  9. Ubuntu 18.04 安装 nginx 并搭建一个简单的网站

    目录 一.安装 nginx 二.设置 nginx 服务器模块 三.总结 四.参考资料 尽你所学(采用 html.或 CSS.或 Javascript 等)完成一个静态网页,比如制作一个简单的个人介绍网 ...

  10. Ubuntu 18.04 下搭建 C/C++编译开发环境及GCC多版本切换

    关注公众号 风色年代(itfantasycc) 领 500G Java 微服务 开发资料 Ubuntu 18.04 下搭建 C/C++编译开发环境及GCC多版本切换_Linux教程_Linux公社-L ...

最新文章

  1. t6文件服务器怎么设置,t6 修改文件服务器地址
  2. python 插值_三次样条插值在Python中的实现
  3. 【运筹学】表上作业法 ( 闭回路示例 )
  4. bzoj4817: [Sdoi2017]树点涂色
  5. 字符设备驱动基础篇3——字符设备驱动工作原理
  6. mysql ddl log 源码_MySQL中ddl_log.log初步认识
  7. Leetcode每日一题:649.dota2-senate(Dota2参议院)
  8. [Android]Notification汇总
  9. CMU 15-213 Introduction to Computer Systems学习笔记(7) Machine-Level Programming-Data
  10. layui表格点击复制到剪切板
  11. 安装计算机的显卡出现问题,电脑显卡驱动安装失败如何解决
  12. java标签outer,java outer
  13. 【福大/计院】转专业
  14. Direct2D编程入门
  15. 我的物联网项目(三十一) 分销模式电商平台
  16. Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)
  17. Short-term load forecasting with an improved dynamic decomposition-reconstruction-ensemble approach
  18. 无法启动计算机打印机服务程序,安装驱动程序时电脑弹出错误窗口“无法启动Windows打印后台程序服务” (适用于Windows OS)...
  19. ip5108 c语言程序,IP5109,IP5108,IP5206,IP5105 移动电源5合一芯片介绍.pdf
  20. STM32Fx+cubeMX+硬件IIC+INA219(同一个I2C挂载两个芯片)

热门文章

  1. pdf怎么加水印,pdf加水印简单方法
  2. 独家 | 跨链通信:区块链技术发展的新趋势
  3. 北京计算机组装在哪,计算机组装与维护(第2版)
  4. vim常用插件及技巧
  5. 8个经典物联网 智能硬件开源项目
  6. 解决思科 Cisco Packet Tracer 7.2登录问题
  7. html5版权信息怎么添加,复制文本加上版权信息功能实现
  8. 51单片机(清翔)-------LED部分
  9. BeanUtils开发包的使用
  10. Pillow图片格式转换