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

428fd7cfaf5c840faf7005e064526ef1.png

一、SDK下载

下载页地址:

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

a53c0cf6cb0776a633349c02bd0b3e19.png

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

352413e8cc2f9bdb96fb685b362536b3.png

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

ddca51c97e2f555b20bcc87ed4d94b52.png

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

二、SDK目录结构

26d232f218edff1459f849218b108b27.png

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

三、创建工程目录

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

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

examples目录下有很多例子

f935484aeef73584fe5d911505d57484.png

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

317cb3963afdd99e6d17a59f40e18271.png

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

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

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

f5c89b8ab177599b5692d194ee6db079.png

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

四、工程管理

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

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

打开blinky目录

6927160b3e40a54d1fd04ada6f9e84d5.png

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

d8b5c99ef16d7983f6195c2174364639.png

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

d6f2a8d8499ffdbe7287c86d24e7f3a5.png

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

7d8f6a4710456427f27ab85f13430dd2.png

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

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

f1345e86682384a617f6b379e395c1f3.png

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

五、倒数第二节

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

那么不如

make一下

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

66298527fb63648fbf1f96d2187855f9.png

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

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

现实是这样的

b1cf16fd0b6f56b3cd15f396fa9c8872.png

看到了吗,目录不对

我们打开Makefile一点一点分析

PROJECT_NAME     := blinky_pca10040
TARGETS          := nrf52832_xxaa
OUTPUT_DIRECTORY := _build

SDK_ROOT := ../../../../../..
PROJ_DIR := ../../..

$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: 
  LINKER_SCRIPT  := blinky_gcc_nrf52.ld

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

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

最后指定了链接脚本文件

改完之后再编译一次

e903561412067e0a279c988816df388b.png

失败,找不到编译器,显然是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

78f9733747a458e6fd08a03a98799519.png

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

六、最后一节

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

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

# Flash the program
flash: default
	@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex
	nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerase
	nrfjprog -f nrf52 --reset

erase:
	nrfjprog -f nrf52 --eraseall

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

下载页地址:

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

解压,然后设置环境变量

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

41b171059ee24407da1fa8b544a157c6.png

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

219c6fd19f3728bec57ec253e7bfd3a7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值