nRF51822 学习笔记(四)蓝牙广播、配对代码分析

 

本篇博客主要是用来记录我使用官方样例学习nRF51822 蓝牙广播以及配对的过程。主要是方便自己以后温习查看使用,其中有很多不全面的地方以及可能有些错误的地方,欢迎各大博友指出。

使用的样例还是app_ble_hrs,样例下载步骤可以查看我的同系列笔记三。

主函数初始化代码:

然后我从主函数的初始化代码开始一个一个往下面看


1、ble_stack_init ( )

ble_stack_init () 函数下包含了相关的SoftDevice模块的基本初始化模块。

SOFTDEVICE_HANDLER_INIT()设置系统时钟晶振以及是否需要具有事件调度程序。

softdevice_ble_evt_handler_set()设置蓝牙事件处理的回调函数入口

------->其中的 ble_evt_dispatch()函数是蓝牙在广播过程中会不断调用的函数,所以函数里面调用的处理蓝牙断开和连接的相关函数也会被频繁调用。

其中我们需要对蓝牙断开连接进行监控操作就应该在 ble_bondmngr_on_ble_evt()函数里面进行操作,至于这个频繁调用的频率应该跟我们后面配置的蓝牙广播的间隔时间有关。

softdevice_sys_evt_handler_set()设置系统事件处理的回调函数入口

-------->其中的sys_evt_dispatch()函数会在收到系统事件后,从系统事件中断处理程序中调用此函数


2、bond_manager_init()

bond_manager_init()其中包括了初始化持久存储模块 pstorage_init()以及一些绑定管理模块需要初始化的一些数据参数,这些我们使用的时候都可以按照样例的配置来。


3、gap_params_init()

gap_params_init()通用访问配置文件的参数配置,其中包括了设置蓝牙设备的名字 sd_ble_gap_device_name_set();设置蓝牙发送广播连接的最小和最大间隔时间。


4、advertising_init()

advertising_init()中包括了蓝牙相关服务uuid的初始化,这个是我们在具体使用时创建多个服务时就需要依次用一个UUID进行匹配。 在一个蓝牙设备中可以有多个服务,每一个服务可以包含多个特征值每个特征值都可以有属于它的多个属性,例如长度、宽度等


5、services_init()

services_init()就是对我们在第四个函数 advertising_init()中定义的服务进行进一步的结构初始化。其中相关服务结构体的初始化定义可以参考 nRF51 SDK-s110 SoftDevice 下的相关描述(直接在右上角输入你想查找的结构体或者函数名即可)


6、conn_params_init()

这个是我们在使用时需要注意根据需要更改的函数。主要是初始化连接参数模块的功能结构体,包括连接状态更新之后的第二次广播的时间间隔,连接失败前尝试的总次数以及发生错误时要调用的函数入口。


7、sec_params_init()

对安全性相关的参数进行初始化的功能函数。使用时可以采用样例提供的配置,有特殊需求时就根据需要更改。


8、advertising_start()

主要是其中调用了一个开始广播的函数sd_ble_gap_adv_start(),通过查看API接口函数可以找到,若是想要停止广播则调用函数sd_ble_gap_adv_stop()即可。


总结:

通过代码分析之后可以知道,nRF51822 蓝牙广播配对的主要过程大致为:BLE堆栈的初始化---->绑定(必要)参数的初始化----->通用访问配置的初始化------>广播相关参数的初始化----->服务相关的初始化-------->连接参数的初始化----->安全参数的初始化----->开始广播

其中这些参数的具体配置都需要根据我们的具体需求进行更改,特别需要注意的是 BLE堆栈初始化 时,设置的连接和系统处理函数,这两个函数里面的操作极其重要


参考链接

BLE4.0教程二 蓝牙协议之服务与特征值分析

基于nRF51822的蓝牙心率计工程消息流Log分析

BLE-NRF51822教程14-adc和电池电量服务

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微芯供氧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值