青风蓝牙教程 nrf52832 V1.0
青风带你玩蓝牙 nrf52832 系列教程...................5
------------作者:青风......................... 5
作者: 青风.............................................6
硬件平台:青云 QY-nrf52832 开发板......6
第一篇 软硬件预备篇..........................................6
第 1 章 青云蓝牙 nrf52832 开发板硬件资源..6
1.1 硬件芯片介绍.........................................6
1.2 青云 nrf52832 蓝牙开发平台硬件
详解...............................................................7
1.2.1 青云 nrf52832 专业版资
源简介..................................................7
1.2.2 青云 nrf52832 开发板原
理图详解:..........................................9
第 2 章 青云蓝牙软件开发环境..................... 13
2.1 协议栈下载工具 nrfgo........................13
2.2 开发环境 KEIL.....................................13
2.2.1 开发环境 KEIL 的安装........... 13
2.2.2 工程项目的建立错误!未定义书签。
第 3 章 工程的下载与调试..............................16
3.1:仿真工具的选择:............................16
3.2:工程下载:........................................17
3.3 工程项目的仿真调试错误!未定义书签。
第二篇 蓝牙 4.x 技术入门篇...........................21
第 4 章 蓝牙工程样例的建立......................... 21
4.1:蓝牙样例工程结构:........................21
4.2:nrf52832 蓝牙协议的分层:............23
4.2.1 应用层简介:.......................... 23
4.2.2 控制器的控制层..................... 24
4.3 主机主协议层详细说明:.................. 25
4.3.1 通用访问规范(Generic Access
Profile,GAP).................................25
4.3.1.1 角色............................. 25
4.3.1.2 广播............................. 26
4.3.1.3 扫描............................. 26
4.3.1.4 发起............................. 26
4.3.1.5 连接............................. 26
4.3.2 通 用 属 性 配 置 文 件 (Generic
Attribute profile,GATT)...............27
4.3.2.1 角色.............................. 27
4.3.2.2 GATT 的规范层次.......27
1 属性...................................... 27
2 特性...................................... 27
3 描述符................................... 27
4 服务...................................... 28
淘宝地址:http://qfv5.taobao.com/
5 profile(数据配置文件).... 28
4.4 源代码分析:......................................28
4.4.1 外设初始化.............................. 29
4.4.2 协议栈初始化.......................... 31
4.4.3 gap 初始化................................33
4.4.4 广播初始化.............................. 34
4.4.5 服务初始化.............................. 36
4.4.6 连接参数和安全参数初始化.. 36
4.4.7.广播开始.................................. 37
4.4.8 电源管理.................................. 37
4.5 下载验证:...........................................38
第 5 章 蓝牙协议栈初始化与调度机制......... 40
5.1:nrf52832 蓝牙协议栈初始化函数
结构:.........................................................41
5.2: 协议栈系统时钟设置:.................... 42
5.3 协议栈的使能:..................................43
5.4 回调派发函数与调度机制:............. 44
第 6 章 蓝牙协议通用访问规范 GAP 入门...46
6.1:nrf52832 蓝牙 GAP 初识:..............47
6.2: GAP 软件设计分析:..................... 48
6.3 GAP 初始化安全模式配置:.......... 48
6.3.1 GAP 连接要求:.................... 49
6.3.2 设备名称修改......................... 50
6.4 GAP 初始化设置连接间隔................. 51
第 7 章 蓝牙广播初始化解析......................... 54
7.1 BLE 广播初始化步骤:......................54
7.1.1 广播名称.................................. 55
7.1.2 广播模式设置......................... 56
7.1.3 广播 UUID 设置..................... 57
7.1.4 广播类型设置.......................... 58
7.2 不进入 IDLE 无效模式...................... 62
7.3 应用与调试..........................................63
测试:................................................64
第 8 章 蓝牙链接参数更新..............................65
8.1:nrf52832 蓝牙链接参数更新初始化
函数结构:.................................................66
8.2 链接参数更新描述...............................68
8.2.1 发起更新申请.......................... 68
8.2.2 链接参数更新应答................. 68
8.3: 链接参数更新初始化配置:............ 69
8.4 本章总结:...........................................72
第 9 章 蓝牙协议栈下板件设备..................... 72
9.1:协议栈下按键初始化调用:........... 72
9.2:板件事件的触发:............................73
Copyright© 2009-2015 青风电子社区 ALL rights reserved
1
青风蓝牙教程 nrf52832 V1.0
淘宝地址:http://qfv5.taobao.com/
9.3:事件触发任务:................................76
9.4 应用与调试..........................................77
1 下载.............................................77
2 测试.............................................79
第 10 章 蓝牙协议栈下定时器的应用............. 79
10.1 BLE 定时器声明................................79
10.2 定时器开始定时................................81
10.3 主函数编写........................................81
10.4 应用与调试........................................82
10.4.1 下载..................................... 82
10.4.2 测试..................................... 84
第三篇 蓝牙任务的建立章..............................88
第 11 章 蓝牙任务的介绍(待更新)............88
第 12 章 蓝牙 LED 读写任务的建立............. 88
12.1 通用属性配置文件配置................... 88
12.1.1 角色.........................................88
12.2.2 GATT 的规范层次................. 89
12.2.2.1 属性........................... 89
12.2.2.2 特性........................... 89
12.2.2.3 描述符........................ 89
12.2.2.4 服务............................ 89
12.2.2.5 profile(数据配置文件)
.................................................. 90
12.1.3 标准的定制服务和特性....... 90
12.2 如果定制私有 profile 服务:............90
12.2.1 任务 UUID 设置................ 90
12.2.1.1 蓝牙技术联盟 UUID90
12.2.1.2 供应商特定的 UUID91
12.2.2 空中操作和性质.................. 91
12.2.2.1 写和没有回应的写..92
12.2.2.2 读.............................. 92
12.2.2.3 通知和指示.............. 92
12.2.3 广播配置............................... 92
12.2.4 连接参数............................... 93
12.2.5 服务........................................93
12.2.6 特性.........................................93
12.3 私有服务的实现................................94
12.3.1 API 设计................................. 94
12.3.2 实现数据结构体................... 94
12.3.3 服务初始化........................... 95
12.3.3.1 实现 LED 特性....97
12.3.3.2 增加特性............... 97
12.3.4 处理协议栈事件................... 98
12.3.4.1 参数 CCCD 写的处
理.............................................. 99
12.3.4.2 处理 LED 特性写. 99
12.4 应用层实现........................................99
12.4.1 使用调度............................. 100
12.4.2 包含服务............................. 100
12.4.3 加入本服务的 UUID 到广播数
据包中..............................................102
12.5 下载验证:.......................................103
第 13 章 蓝牙按键通知任务的建立............... 107
13.1 工程项目的建立:..........................107
13.1.1 私有服务的实现.................. 107
13.1.1.1 API 设计...................107
13.1.1.2 实现数据结构体..... 108
13.1.2 服务初始化..........................110
13.1.2.1 服务 UUID 的添加:112
13.1.2.2 按键服务特性的添加:115
13.1.2.3 增加特性................. 117
13.1.3 处理协议栈事件................. 118
13.1.4 处理按键事件..................... 118
13.2 应用层实现....................................119
13.2.1 使用调度............................. 120
13.2.2 按键处理............................. 120
13.2.3 加入本服务的 UUID 到广播数
据包中..............................................122
13.3 下载验证:.......................................124
第 14 章 蓝牙电池采集任务的建立............. 126
14.1:nrf52832 蓝牙 BLE 电池函数库:
...................................................................127
14.1.1 BLE 电池函数库文件的添加127
14.1.2 电池采样设计基本原理:128
14.2:函数编写:..................................128
14.2.1 定时器设计....................... 128
14.2.2 电池任务声明和调用......... 129
14.2.3 电池值采集更新................. 130
14.2.4 主函数编写......................... 130
14.3 应用与调试....................................131
14.3.1 下载................................... 131
14.3.2 测试................................... 132
第 15 章 蓝牙心电任务的建立..................... 136
15.1 工程项目的建立:...................... 136
15.1.1 主函数的建立..................... 137
15.1.2 外设部分初始化................. 138
15.1.3 协议栈相关初始化............. 139
15.1.3.1 设备管理函数初始化139
Copyright© 2009-2015 青风电子社区 ALL rights reserved
2
青风蓝牙教程 nrf52832 V1.0
淘宝地址:http://qfv5.taobao.com/
15.1.3.2 服务任务建立......... 140
15.2 蓝牙服务程序设计....................... 143
15.2.1 心率服务设计..................... 143
15.2.2 电池服务设计和设备信息服
务设计..............................................149
15.3 主函数的实现................................154
15.4 下载验证........................................154
第 16 章 蓝牙 UUID 的分配......................... 157
16.1:UUID 设置规则及原理:............ 157
16.1.1 蓝牙技术联盟 UUID........ 158
16.1.2 供应商特定的 UUID........ 158
16.2:程序中 UUID 的设置:.............160
16.2.1 蓝牙协议小组公共 UUID 设
置......................................................160
16.2.2 私有服务 UUID 设置:. 161
16.2.3 UUID 类型切换:........... 163
16.3 应用与调试....................................166
16.3.1 下载................................... 166
16.3.2 测试................................ 168
第四篇 蓝牙 4.x 数据传输.............................171
第 17 章 蓝牙串口数据透传..........................171
17.1 工程项目的建立:.........................171
17.1.1 主函数的建立..................... 172
17.1.2 外设部分初始化................. 173
17.1.3 协议栈相关初始化............. 174
17.2 蓝牙 API 头文件设计.....................175
17.2.1 API 函数库文件头文件设计:175
17.2.2 数据结构体设计................. 176
17.3 蓝牙 API 主函数设计:................178
17.3.1 开通 API 应用服务.............178
17.3.2 UUID 设置方法............181
17.3.2.1 蓝牙技术联盟 UUID181
17.3.2.2 供应商特定的 UUID
................................................ 182
17.3.3 串口接收和发送服务添加183
17.3.4 蓝牙串口服务特性的配置184
17.3.4.1 CCCD 安全设置.186
17.3.4.2 特征参数组设置.186
17.3.4.3 特征添加.............187
17.3.5 处理协议栈事件.............. 187
17.3.6 处理串口特征.................. 188
17.3.7 处理串口接收事件.......... 189
17.4 主函数的实现................................192
17.5 下载验证.........................................192
第 18 章 蓝牙广播包与数据包分析..............194
第 19 章 蓝牙遥控器......................................194
19.1:遥控指令设置:......................... 194
19.2 应用与调试.....................................195
19.2.1 下载................................ 195
19.2.2 测试................................ 197
第 20 章 蓝牙接收数据内部 FLASH 存储..200
20.1:nrf52832 蓝牙内部 FLASH 处理
函数:.......................................................200
20.1.1 主要处理函数介绍............200
20.1.2 处理函数使用注意:.... 202
20.2:函数编写:..................................202
20.2.1 FLASH 操作初始化设置202
20.2.2 私有任务处理.................. 205
20.2.3 主函数编写...................... 206
20.3 应用与调试....................................207
20.3.1 下载................................ 207
20.3.2 测试................................ 208
第 21 章 远程设备的修改..............................210
21.1 工程名称服务..................................210
21.2:协议栈下实现流程:..................211
21.2.1 手机发送新的设备名称存
储 FLASH........................................211
21.2.2 判断是否为有效的设备名称213
21.2.3 服务重启.......................... 215
21.3 应用与调试....................................216
21.3.1 下载................................ 216
21.3.2 测试................................ 218
第 22 章 蓝牙温湿度测量方法一................. 221
22.1 温湿度 DHT11 采集驱动............... 221
22.2:协议栈下实现流程:................. 223
22.2.1 初始化传感器................ 223
22.2.2 采集指令发送................ 224
22.3 应用与调试....................................225
22.3.1 下载................................ 225
22.3.2 测试................................ 228
第 23 章 蓝牙温湿度测量二..........................230
23.1 温湿度 DHT11 采集驱动............... 231
23.2:协议栈下实现流程:................. 232
23.2.1 初始化传感器................ 233
23.2.2 私有任务建立................ 234
23.2.2.1 DHT11 服 务 特 性 的 添
加:........................................ 234
23.2.2.2 增加特性:............. 236
Copyright© 2009-2015 青风电子社区 ALL rights reserved
3
淘宝地址:http://qfv5.taobao.com/
28.2.1 下载................................... 272
28.2.2 测试................................... 274
第 29 章 动态秘钥应用(待更新)............. 276
第六篇章 蓝牙 4.x 综合应用 (待更新).. 276
第 30 章 蓝牙防丢器的应用(待更新)..... 276
第 31 章 蓝牙 ibeacon 的应用(待更新).. 276
第 32 章 空中升级 DFU 的应用(待更新)276
第七篇 蓝牙 4.x 无线网络的组建................ 292
第 33 章 主从串口网络的建立........................292
33.1:nrf52832 蓝牙主机的主程序流程:293
33.2 主机蓝牙串口过程分析:............. 295
33.2.1 主机设备和从机设备连接分
析......................................................295
33.2.2 主机蓝牙串口数据流分析:300
33.2.2.1 从 机 到 主 机 的 数 据 流
向:........................................ 300
33.2.2.2 主 机 发 送 到 从 机 的 数
据流向:................................ 304
33.3 应用与调试.......................... 306
33.3.1 软件准备:................. 306
33.3.2 实验现象:................ 310
第 34 章 主机扫描(待更新)........................311
第 35 章 主机心电详解(待更新)................311
第 36 章 主从 1 拖 8 网络的实现(待更新)311
第 37 章 主从一体详解(待更新)................311
青风蓝牙教程 nrf52832 V1.0
23.2.2.3 采集温湿度数据更新:
................................................ 236
23.2.3 定时器的建立................ 237
23.2.4 主函数的实现:............ 239
23.3 应用与调试....................................240
23.3.1 下载................................... 240
23.3.2 测试................................ 242
第 24 章 蓝牙 ADC 光照强度的采集(待更新)
............................................................................ 244
第五篇 蓝牙参数及安全配置........................244
第 25 章 蓝牙 MAC 地址.............................. 245
25.1:BLE 设备地址类型:...................245
25.1.1 公共设备地址 Public Device
Address............................................ 245
25.1.2 随 机 设 备 地 址 Random
Device Address................................ 246
25.1.2.1 静 态 设 备 地 址 Static
Device Address.......................247
25.1.2.2 私 密 设 备 地 址 Private
Device Address.......................247
25.2:nrf52832 地址配置:....................249
25.3 设置自己的 MAC 地址:.............. 252
25.4 应用与调试......................................254
25.4.1 下载................................... 254
25.4.2 测试................................... 256
第 26 章 蓝牙发送功率设置..........................257
26.1:nrf52832 蓝牙 BLE 的发送功率设置:
...................................................................257
26.2 应用与调试......................................259
26.2.1 下载................................... 259
26.2.2 测试..................................261
第 27 章 蓝牙信号强度 rssi 的获取............. 261
27.1:nrf52832 蓝牙 BLE 的 rssi 获取:262
27.1.1 BLE 定时器声明..................262
27.1.2 定时器开始定时................. 264
27.1.3 主函数编写......................... 264
27.2 应用与调试......................................265
27.2.1 下载................................... 265
27.2.2 测试................................... 267
第 28 章 静态密码配对..................................268
28.1:静态密钥设置:............................268
28.1.1 设置静态密钥..................... 268
28.1.2 配对事件配置..................... 271
28.2 应用与调试......................................272
Copyright© 2009-2015 青风电子社区 ALL rights reserved
4
青风带你玩蓝牙nrf52832
V1.0
淘宝地址:http://qfv5.taobao.com/
青风带你玩蓝牙 nrf52832 系列教程
------------作者:青风
出品论坛: www.qfv8.com 青风电子社区
Copyright© 2009-2015 青风电子社区 ALL rights reserved
5
青风带你玩蓝牙nrf52832
V1.0
淘宝地址:http://qfv5.taobao.com/
作者: 青风
出品论坛: www.qfv8.com
淘宝店:http://qfv5.taobao.com
QQ 技术群:346518370
硬件平台:青云 QY-nrf52832 开发板
第一篇 软硬件预备篇
第 1 章 青云蓝牙 nrf52832 开发板硬件资源
1.1 硬件芯片介绍
QY-nrf52832 是一个功能强大的蓝牙开发套件,支持蓝牙低功耗(BLE)协议和私
有协议。 它为广大的产品开发人员提供了一个平台,帮助工程师进行产品的开发、评估、
测试。nrf52832 属于挪威 NORDIC 公司推出的 nRF52 系列 2.4G 无线低功耗片上方案解决
系统中的一员。凭借超低的功耗、优越的性能、卓越的设计、nrf52832 得到了越来越广泛
的应用。
nrf52832 是一款为超低功耗无线应用(ULP wirelesss applications)打造的多协议单芯
片解决方案。它整合了 Nordic 一流的无线收发器,一个 ARM Cortex M4 内核以及 512KB
的 flash + 64KB 的 RAM。nrf52832 支持 Bluetooth4.0 low energy 和专用的 2.4GHz 协议
栈。
1. 关键特性:
• 支持多种 2.4GHz radio
• 32 位 ARM Cortex M4 processor
• 512kB flash/64kB RAM
• Software stacks available as downloads
• nRF52xxx 系列管脚兼容
• 应用程序与协议栈完全分离的开发方式
• 512kB Flash
Copyright© 2009-2015 青风电子社区 ALL rights reserved
6
V1.0
淘宝地址:http://qfv5.taobao.com/
64kB RAM
青风带你玩蓝牙nrf52832
• Digital I/O
• 与 nRF24L-series 完全兼容
• 可编程的输出功率 from +4dBm to -20dBm
• RSSI
• RAM mapped FIFOs using EasyDMA
•
• Dynamic on air payload length up to 512 Bytes
• 灵活可配置的 31 pin GPIO
•
•
• 全功能的数字接口: SPI/2-wire/UART
•
•
•
10-bit ADC
128-bit AES ECB/CCM/AAR co-processor
Quadrature demodulator
Programmable Peripheral Interface – PPI
Simple ON/OFF 全局电源管理
2.更低的功耗,更高的性能:
nrf52832 使用 32 位 ARM Cortex M4 核心,片上 512kB 的 flash。相对于 8/16 位的平
台拥有更佳的代码密度和更快的执行速度。可编程外设互联(Programmable Peripheral
Interconnect, PPI)系统提供了一个 16 通道的总线,使外设可在没有 MCU 介入的情况下
进行直接的和自主的通信。这将减少外设经由 CPU 通信造成的延迟,并可在通信过程中
保持 CPU 休眠以减少能耗。该芯片有两种电源模式 - ON/OFF, 并且所有系统模块和外设
都有独立的电源管理,用于控制相应模块根据任务需求在 RUN/IDLE 状态间进行切换。
全新的 Radio 模块是 nrf52832 优秀性能的基础。该模块支持低功耗蓝牙(Bluetooth
low energy)并同时兼容 Nordic 的 nRF24L 系列产品。输出功率范围在+4dBm 到-20dBm
之间,步进为 4dB。超高的灵敏度可接收变化范围在-96 与-85dBm 之间的信息(取决于
数据速率)。蓝牙低功耗模式下的灵敏度为-92.5dB。.
•
•
•
•
•
•
•
Low cost external crystal 16MHz ± 40ppm
Low power 16MHz crystal and RC oscillators
Ultra low-power 32kHz crystal and RC oscillators
宽幅供电电压 (1.8 V to 3.6 V)
On-chip DC/DC buck converter
全部外设的独立电源管理
封装: 48-pin 6x6 QFN
1.2 青云 nrf52832 蓝牙开发平台硬件详解
青风 nrf52832 蓝牙开发平台针对试下物联网兴起的特点,从低功耗蓝牙无线单芯片
SOC--nrf52832 为基础,设计的蓝牙开发平台如下几个部分:
整个平台如下图 1 所示,平台小巧,方便调试,同时功能比较丰富,其设计综合考虑
了成本和功能这两个矛盾,结合物联网应用下蓝牙的相关特点,最终确定了本平台设计。
1.2.1 青云 nrf52832 专业版资源简介
QY-nrf52832 开发板整体设计框图如下图所示,包含多个外设:
Copyright© 2009-2015 青风电子社区 ALL rights reserved
7
青风带你玩蓝牙nrf52832
V1.0
淘宝地址:http://qfv5.taobao.com/
匹 配 板 载 天
线
核心芯片:
nrf52832QFAA
1 个 32MHZ 高
速晶振;
1 个 32.758KHZ
低速晶振;
复位按键
板载电位器
SWD 接口引出
USB 转串口 cp2102
所有 I/O 口引出
3 个用户 LED 灯
2 个用户按键
Usb 电源
5V 转 3.3V
锂电池座
QY-nrf52832 开发板板载资源介绍如下:
板子实物功能如下图所示:
青云 nRF52832 开发板小巧便捷,有锂电池供电,可以随身携带。方便易
用。主要特性:
• 兼容官方 nRF52832_DK PCA10040 的外围接口.
• 兼容 2.4 GHz nRF24L 系列芯片(on-the-air)
• 支持 Bluetooth low energy(低功耗蓝牙 4.x)
• PCB 印制天线(Inverted F Antenna)
• 支持 NFC
• 具有引出 SWD 调试接口
• 4 个独立可编程 LED(共阴极)
• 四个用户按键
• CP2102 调试接口(USB 转串口)
• 支持 iOS /安卓应用,提供源码
• 一个 OLED 接口
• 一个 ADC 电位器
板子功能如下图所示:
Copyright© 2009-2015 青风电子社区 ALL rights reserved
8