(三)蓝牙样例工程分析

流程框图

在这里插入图片描述

代码详解

1.log初始化,并配置UART/RTT输出,非必须
2.定时器初始化,此定时器是基于RTC1的软件定时器,可以创建多个,必须的,主要有以下用途:
(1)按键消抖以及长按和短按
(2)定时驱动LED,和BLE时间配合实现BLE状态指示
(3)连接参数更新,连接成功后,开启APP定时器,超时后进行连接参数更新
(4)创建用户定时任务
3.按键和LED初始化,并提供了bsp_event_handler回调函数,当按键状态发生变化会调用此函数,同时配置了bsp_btn_ble_init函数,可以用按键休眠和启动蓝牙设备广播
4.电源管理初始化,nrf_pwr_mgmt_init函数分别初始化互斥量,初始化迭代器的函数,休眠初始化,调试管脚初始化,待机超时初始化,CPU使用率跟踪初始化。进入system off模式时,保证softdevice停止
5.协议栈初始化,先请求使能softdevice并设置协议栈时钟(32.768),gap事件长度(也就是处理时间,如果MTU大的话就把这个改大点),配置起始地址以及链接数目和角色,MTU,UID(如果这里增加了,则MDK里面ram起始地址也要改,一个UID大概0x10。),GATT属性表,使能服务变化特征值,使能BLE协议栈,注册BLE事件回调函数,处理连接,断开等等回调
6.GAP服务初始化,设置GAP安全模式,设备名称(可读,写是可选择的),外观(可读,写可选),外围设备首选连接参数(只读不写,如果距离远或者干扰大,增加潜伏周期可减少掉线几率。大数据传递时,减小连接间隔),中心设备地址解析(协议栈写死了,不可更改)和可解析私有地址(工程没有包含)。定义了4种设备,广播站者,观察者,外围设备,中心设备
7.GATT初始化,定义了主机,从机最大MTU长度以及协商数据的长度
8.广播初始化,设置设备名称类型,是否包含外观,蓝牙设备模式,UID,广播类型,广播间隔,广播超时时间,广播事件回调函数,连接设置标志,也可以包含一些其他数据,具体看此结构体说明,比如服务数据,厂商自定义数据,从设备连接参数范围等等。广播回调函数on_adv_evt处理不同类型的广播事件,快速广播,idle等
9.服务初始化,初始化队列写入模块,添加服务
10.连接参数更新初始化,从机发起,主机可以接收可以拒绝,从机可以继续发。当主机给给从机发送新的连接参数,从机要么接收要么断开连接.提供了2个回调函数,连接参数协商处理事件和错误处理事件,代码里面设置断开连接,更简单做法是把参数赋值里cp_init.disconnect_on_fail设置为true。里面创建了单次软件定时器,还有回调函数update_timeout_handler
11.设备(配对)管理初始化
12.启动定时器
13.启动广播,广播类型必须和初始化里面一致,比如都是fast_adv,根据给定广播类型开始广播,广播切换则是交给了***BLE_ADVERTISING_DEF(m_advertising)里面的两个回调函数***
例程只设定了快速广播的参数,超时就会进入idle(会一级一级的切换,由于慢速广播没有设置参数,然后切换到下一级idle)
14.进入idle待机状态,等待事件发生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值