4. ble_app_sample总结
4.1. 1 ble_app_sample是什么
ble_app_sample是nordic nrf5x系列芯片从设备(Slave)的蓝牙服务例程,例如电池服务、心率服务等。该例程包含在RT-Thread的nrf5x_sdk软件包中,可以很方便的加载到RTT工程中运行。该例程使用的蓝牙协议栈是Nordic softdevice s140。
4.2. 2 ble_app_sample如何使用
一般直接使用nrf5x的RT-Thread工程模板。
工程中加载例程可以使用RTT的ENV工具,也可以使用RT-Thread Studio配置工程。配置完后例程会自动加载到工程之中。
下面以ENV工具配置ble_app_blinky服务为例说明。
2.1 试验板
以nrf52840开发板试验。如下图:
2.2 程序配置设置
下载RT-Thread的nrf52840 BSP工程模板,下载地址是 https://github.com/RT-Thread/rt-thread
下载并安装RT-Thread 开发辅助工具Env。参考RTT安装介绍,下载地址 https://www.rt-thread.org/page/download.html
进入nrf52840工程文件夹
\rt-thread\bsp\nrf5x\nrf52840
打开env配置工具
在工程中右击选择ConEmu Here
然后弹出如下界面
输入menuconfig弹出如下界面
使用方向键选择配置UART和GPIO
在Enable UART中可以选择UART0或者UART1,可以配置rx和tx的引脚编号。此开发板选择默认。
配置ble协议栈
配置nrfx和nrf5x_sdk软件包
在nrf5x_sdk中选择ble_app_blinky应用例程
ble_app_blinky例程中可以配置应用使用的引脚编号(要与开发板对应),此开发板选择默认值。引脚编号是rtt驱动层drv_gpio.c对nrf5x芯片定义的引脚编号。从1-47依次对应gpio端口0的32个引脚和gpio端口1的16个引脚。
2.3 配置编译
按Esc退到该界面
选择yes保存,出现如下界面
输入scons –target=mdk5回车编译工程,因为使用mdk5开发环境,也可以根据具体环境选择mdk4或者iar等。
编译需要一段时间,完成后退出env工具。
2.4 编译下载程序
打开项目中的工程文件
编译工程
连接开发板,选择softdevice,下载程序
选择rtthread,下载程序
打开串口调试助手,首次启动运行出现如下信息
输入help,按压回车,出现如下信息
输入ble_app_blinky,启动ble_app_blinky应用例程。开发板的广播指示灯亮。
2.5 手机连接验证
手机端下载nRF Connect工具。下载地址是
https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile
打开手机蓝牙功能,打开该app,搜索到Nordic_Blinky。
点击CONNECT,连接并打开按钮和LED服务
按照下面操作,可蓝牙无线控制开发板。
4.3. 3 添加新的ble_app_sample
ble_app_bas是电池服务例程,下面以ble_app_bas为例介绍添加过程。
3.1 编写ble_app_bas.c源文件
在软件包nrf5x_sdk中创建ble_app_bas.c文件,保存路径是\nrf5x_sdk\rtt_adapter。如下图:
ble_app_bas.c是例程的主体文件。主要实现的内容包括:
创建RTT任务(例程是单独的一个任务)
相关芯片外设的初始化
蓝牙协议栈初始化
GAP初始化
GATT初始化
服务初始化(服务实现例程的功能)
连接参数初始化
广播功能初始化,并启动广播
4.4. 3.2 添加工程配置的Kconfig
nrf5x_sdk软件包是依靠RTT的env工具配置(RT-Thread Studio最终也是依赖env),所以需要在env对应的包配置Kconfig文件中添加配置语句。方法看RTT文档中Kconfig基本语法。
Kconfig文件的路径是env\packages\peripherals\nrf5x_sdk。配置语句内容如下:
语句层级关系属于if PKG_USING_NRF5X_SDK下一级,又choice的下一级。
3.3 添加文件加载的脚本
生成工程的时候,该脚本将依赖的.c文件、.h文件加载到工程中。脚本位置是\nrf5x_sdk中的Sconscript。如图:
脚本中需要添加ble_app_bas.c主体文件下载路径。还有电池服务依赖的ble_bas.c文件下载路径、头文件ble_bas.h的路径。代码如下:
3.4 向github仓库提交写好的例程
把例程主体文件ble_app_bas.c和加载的脚本Sconscript文件提交到nrf5x_sdk软件包的GitHub仓库。
仓库地址是https://github.com/supperthomas/nrf5x_sdk
把Kconfig文件提交到env软件包配置仓库。
仓库地址是https://github.com/RT-Thread/packages