艾克姆科技
nRF52832 开发指南-下册(主机)
[基于 Nordic 蓝牙低功耗/2.4G Soc-nRF52832]
艾克姆科技飞宇团队
[2019.8.29]
官方店铺:https://acmemcu.taobao.com
官方论坛:http://930ebbs.com
版权所有:艾克姆科技,引用请注明出处
本文档技术支持负责人:强光手电
[本文档以艾克姆科技 IK-52832DK 开发板为硬件平台,基于 SDK15.3 的库,针对 BLE 主
机开发,从基本概念和新建 BLE 主机工程模板开始,一步步讲解蓝牙 BLE 主机程序框架
和流程:扫描、建立连接、MTU 交换、连接参数管理、PHY 更新、服务发现、使能通知、
接收通知以及读写从机特征值等]
修订历史记录
Revision Records
日期
版本
编制
审核
说明
Date
Version
Written By
Checked By
Explanation
2018.11.17
A
强光手电
彭震
以 SDK15.2 为基础编写。针对 BLE
开发。
2020.1.2
B
强光手电
彭震
修改为 SDK16.0 版本
第一章:新建 BLE 主机工程模板
1. 学习目的
1. 了解 BLE 主机工程的建立过程和配置项目。
2. 了解 BLE 主机工程需要加入哪些文件以及这些文件在工程中的分组。
3. 掌握利用 MDK 新建协议栈“Target”的方法,建立协议栈“Target”后,即可使用 MDK
下载协议栈 HEX 文件。(该方式不仅可以下载协议栈 HEX 文件,如需要使用 MDK 下
载其他 HEX 文件均可参考此方法)。
注:本章对应源码是“实验 1-1:BLE 主机工程模板”。
2. 新建 BLE 工程模板
2.1. 规划工程目录
和 BLE 从机新建工程一样,在建立工程之前,我们需要先考虑一下工程文件的组织,
也就是工程文件在计算机中的存放目录。清晰的工程目录既方便我们管理工程中的各个文件,
也方便日后的维护和移植,我们可以根据自己的习惯和喜好来建立自己的工程目录,但是也
不要太随意,文件目录应该一目了然,目录中各个文件夹的名字要能准确地指示里面的内容。
下面是我们建立工程时使用的工程目录,供大家参考,其中:
app 文件夹:用于存放 main.c 文件和我们自己编写的应用程序文件。
project 文件夹:
config 文件夹:用于存放工程配置向导(sdk_config.h)。
mdk5 文件夹:用于存放工程文件。
doc 文件夹:用于存放说明之类的文档。
components、integration、external、modules:从 SDK 中拷贝的库文件。
图 1-1:工程存放目录
2.2. 建立工程存储目录、拷贝库文件
按照上文中描述的工程目录新建用于存放工程各个模块的文件夹。先在 D 盘新建一个
名字为 ble_app_templete_c 的文件夹,然后在这个文件夹下面新建 3 个名字分别为 project、
doc 和 app 的文件夹,之后在 project 文件夹里面再新建 config 和 mdk5 两个文件夹,其中 config
文件夹用于存放工程配置向导(sdk_config.h),mdk5 文件夹用于存放工程文件。
之后,解压 SDK16.0,并将需要的库文件(包含 components、integration、modules 和
external 文件)拷贝到 BLE 工程模板目录下,如下图所示。
图 1-2:拷贝库文件
2.3. 新建工程
建立工程存放文件夹和拷贝库文件之后,我们就可以开始建立工程了。
工程名取为:ble_app_templete_c(这样取名是为了符合 Nordic 的 SDK 命名规则,其中
ble 表示这是一个 ble 的工程,app 表示应用程序,templete 表示模板,c 表示主机(Central:
中心设备),工程存放到 D 盘 ble_app_templete_c 文件夹。
1. 启动 MDK,点击【Project】,在弹出的下拉菜单中选择【New uVision Project】。
图 1-3:新建工程窗口
2. 设置工程名和工程保存路径,设置完成后点击【保存】。
工程路径和工程名设置注意事项:工程路径和工程名不能包含汉字字符(虽然有些计算
机使用汉字字符没有问题,但是还是建议不要使用汉字字符,因为 MDK 对汉字字符的
支持比较差),同时路径不要过深,否则打开工程或仿真时可能会出现问题。
保存后,工程名称是:ble_app_templete_c,工程保存路径是:“„\ble_app_templete\pro
图 1-4:设置工程路径和工程名
ject\mdk5\ble_app_templete_c”。
3. 保存工程后,会弹出器件选择窗口,选择好器件后点击【确定】。
开发板上使用的 nRF52832 型号是:nRF52832-QFAA,所以,在下图的器件列表中需要
选择这个型号。选中器件后,右边的文本框中会显示该器件的描述信息。
4. 配置 RTE(Run-Time Environment),选择完成后点击【OK】。
图 1-5:选择器件
勾选两个必选项:CMSIS 中的 CORE 和 DEVICE 中的 StartUp。注意他们的版本号,SDK
版本不一样,对应的 CMSIS 和 StartUp 版本号可能会不一样,本文使用的 SDK 版本是
SDK16.0,SDK16.0 对应的 CORE 版本是 4.5.0,StartUp 版本是 8.27.1。
下图中,我们可以看到 CORE 的版本只能选择 5.2.0,StartUp 版本只能选择 8.27.1,这
是因为安装 MDK5.27 时会自动安装 5.2.0 的 CORE,而 MDK 新建工程时只会显示已安装的
最新的 CORE 和 StartUp 版本,所以,这里只能选择这两个版本。工程建立好了之后,我们
可以在工程配置中修改,以保持和 SDK16.0 一致,后面在工程配置章节会说明修改方法。
图 1-6:配置 RTE
注意事项:再次说明一下,新建工程配置 RTE 时,对于 CORE 和 StartUp,MDK 会自动选
择最新的版本,在这个步骤我们直接选择最新版本,后面配置工程时再根据需要修改为
自己需求的版本即可。
5. 管理 MDK 工程目录。
主要是添加组(也就是在 MDK 中添加文件夹)、修改组名称和软件包(pack),目的是为
了目录清晰,方便添加文件和管理文件。这里我们使用的工程目录是参考 SDK 里面的 BLE
工程的,这么做的好处是和 SDK 保持一致,以方便我们阅读 SDK 里面的参考代码。
图 1-7:整理工程目录
6. 管理软件包
点击下图中的图标,打开软件包管理窗口。
图 1-8:打开软件包管理窗口
打开的软件包管理窗口如下图所示,我们可以在这修改 StartUp 的版本和选择是否自动
使用安装的最新的软件包。
设置是否自动使用安装的最新的软件包:
勾选“Use latest versions of all installed Software Packs”即可打开自动使用安装的最新的
软件包,不勾选即可以使用指定的版本。
修改 StartUp 和 CORE 的版本:
如我们的计算机中安装了 Nordic nRF5x 几个版本的器件包,就会显示多个版本的器件
包,因为 SDK16.0 使用的 CMSISI 版本是 4.5,器件包版本是 8.27.1,所以我们要选择 CMSIS
的版本是 4.5,器件包的版本是 8.27.1,同时去掉自动选择最新版本的勾选,如下图所示。
图 1-9:修改 StartUp 和 CORE 的版本
这里设置下面 3 项,这么设置是为了让我们建立的工程使用确定的软件版本,这样就可
以避免因为自动引用最新版本引起问题的风险。
关闭自动使用最新的软件包功能。
CMSIS 版本设置为 4.5.0,并设置版本 fixed。
pack 版本设置为 8.27.1,并设置版本 fixed。
2.4. 添加需要的库文件
1. Board Definition 组
“Board Definition”组中需要加入板卡定义文件“boards.c”,该文件针对于具体板卡,
主要用来定义板卡的指示灯、按键、IO 输出电压(仅 nRF52832 具有此功能)以及常用的操
作函数。对于 IK-52832DK 开发板(兼容 Nordic 的 PCA10040),设计了 4 个指示灯和按键,
在“boards.c”文件中,我们可以看到这些按键和指示灯的初始化函数以及一些基本功能如
点亮、熄灭、翻转的操作函数。
表 1-1:“Board Definition”组中加入的文件
文件名
boards.c
路径
..\..\components\boards
2. Board Support 组
“Board Support”组加入的是板卡支持包文件,即 BSP 文件,主要用于实现指示灯和
按键的驱动,如下表所示。
表 1-2:“Board Support”组中加入的文件
文件名
路径