




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青 技术 蓝牙BLE之样例的建 通用规范(GenericAccess 角 广 扫 发 连 角 青风带你玩蓝牙nRF51822系 青风电子社区作者 青:硬件平台:青云QY-nRF51822蓝牙BLEBLEnRF51822BLE应用,它是一个通过BLE的应用实例。后面我们开发自己的应用实例的时候都可以通过修BLE第一部分,main主函数。工程建立是分层设置的,也就是应用层,协议层和硬第二部分:板载设置,主要是按键和LED第三部分:Startup文件夹,作为的启动函数,这个面的外设篇里有过讲解,设置了nrf51822的启动项和设置了系统时钟。第四部分BLE文件夹,本文件夹提供一些蓝牙服务代码。第五部分drivers文件夹,提供外设驱动函数代码。第六部分Libraies文件夹,nrf51822提供的一些现成的库函数,这些函数是和硬件紧密相连的,这样带有BLE前缀的就是和蓝牙相关的库函数,带有app前缀的文件是和app应用有关系的文件夹。 蓝牙协议的分层:首先是应用层:从蓝牙特别小组SIG的上可以看到已经发布的GATT规范列表,包括警告通知(alertnotificantion),血压测量(bloodpressure),心率(heartrate),电牙特别小组SIG的进行了解。在样例中源文件如下路径给出了SIG发布控制器的控制层如上图所示,实际分为三部分2:链路层特别注意:对应控制程采用的是封装函数格式,也就是说源程序没有开源,而是通过teiePI查找函数意义,所有带sdftDeicePI函数。:通用规范(GenericAccessGAP是应用层能够直接BLE协议栈的最底层,它包括管理广播和连接事件的有关参数。GAP模块代表了所有蓝牙设备的共用基础功能,如传输,协议或者应用规范所使用的模式和过程。GAP的服务包括设备发现,连接方式,安全,认证,关联第3卷C部分。角BLE连接,引入了“角色”这一概念。一个BLE设备不是集中 注意:在接的另一端的设备被称为对等设备,不管它是集中器还是设备广果它被设置成主动扫描,设备将会发送一个扫描回应做为对集中器请求的回应,扫描回应最多可以携带31字节的数据。个频率上,以防止被WiFi扫发起连接时,集中器接收到一个广播数据包之后将会发送接请求。连一个特定定义的间隔从设备请求数据,这个间隔称为连接间隔,它由集中器决定并应用于连接,但是设备可以发送连接参数更新请求给集中器。根据蓝牙规范,连接间隔必须在7.5ms到4s之间。称为从机延时(slavelatency)。角除了GAP定义了角色之外,BLE2种角色:GATT服务器和GATT服务器而获得数据的设备称为GATT客户端。在应用中在应用中 GATT的规范层一个GATT服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送中的值的每一个字节的意义的关键信息。在一个GATT表中可能有许多属性,这些属所有通过GATT服务传输的数据必须成一系列的特性,可以把特性中的这些数据或指示功能的特性额外增加的。在CCCD中写入“1”使能通知功能,写入“2”使能指示GATT服务一般包含几块具有相关的功能,比如特定传感器的和设置,人机接蓝牙技术(SIG)而设计,SIG建议根据它们的规范设计自己的profile。一个profile文件可以包含一个或者多个服务,一个profile文件包含需要的服务的信GAP和GATT的角色都可基本理论就讲到这里,下面来分析代码,首先来看下主函数:intint{boolerase_bonds;//Initialize.buttons_leds_init(&erase_bonds);//初始化按键和}}//Entermainfor{}//Starterr_codeble_advertising_start(BLE_ADV_MODE_FAST);//广播开始gap_params_init();//GAP参数初始化外设初始化外设初始化现需要用的一些部设备部设备的使大家可参考3.1.1.staticvoidtimers_init(void)函staticvoidstaticvoid{APP_TIMER_OP_QUEUE_SIZE,true);err_code=APP_ERROR_CHECK(err_code);*/}创建要由应用程序使用的任何定时器。并且给了如何创建一个计时器的实例。id。对于每一个新staticvoidbuttons_leds_init(bool*staticvoidbuttons_leds_init(bool*{bsp_event_tuint32_terr_code=bsp_init(BSP_INIT_LED|APP_TIMER_TICKS(100,err_code=bsp_btn_ble_init(NULL,&startup_event);*p_erase_bonds=(startup_event==}这里定义了按键和LED,下面给了一个需要回调的bsp_event_handler,就是说这个LED发生变化,如果有变化了,系bsp_btn_ble_init,可以用按键休眠和启动蓝牙设备广staticvoidble_stack_init(void){uint32_t//初始化SoftDevice系统时钟和相关参数.#ifdefined(S110)||defined(S130)||//ble_enable_params_tble_enable_params;#ifdefined(S130|| err_code=sd_ble_enable(&ble_enable_params);//RegisterwiththeSoftDevicehandlermoduleforBLEevents.err_code=softdevice_ble_evt_handler_set(ble_evt_dispatch);//RegisterwiththeSoftDevicehandlermoduleforBLEevents.err_code=softdevice_sys_evt_handler_set(sys_evt_dispatch);}e_tptcss_etsatc/**@briefFunctionfordispatching(调度aBLEstackeventtoallmodules(模块withaBLEstackevent*@detailsThisfunctioniscalledfromtheBLEStackeventinterrupthandlerafteraBLEstackeventhas.* Bluetoothstackstaticvoidble_evt_dispatch(ble_evt_t*{YOUR_JOB:Addserviceble_evthandlerscallshere,like,forexample:ble_bas_on_ble_evt(&m_bas,p_ble_evt);*/}gap初始化scheduler_init():初始化事件调度在开始使用的模板中,默认使能了调度功能。如果你不想使用它,你可以删除它main(heul_inia_he_eete,设置DKp_prms_nt:gp初始化;通用配置文件(GenericAccessProfile,GAP),该Profile保证不同同时还处理一些有关连接的业务(如链路建立、信道和连接建立)法.除此之外,GAP还定义了下列内容:关于GAP的详细分析请参考我们的另一篇青云蓝牙---GAP设置详谈广播初始化staticvoidadvertising_init(void):函数初始化广播功staticvoidstaticvoid{ble_advdata_t//Buildadvertisingdatastructtopassinto@refmemset(&advdata,0,===t=sizeof(m_adv_uuids)plete.p_uuids=ble_adv_modes_config_toptions=options.ble_adv_fast_enabledoptions.ble_adv_fast_enabled=BLE_ADV_FAST_ENABLED;options.ble_adv_fast_interval=APP_ADV_INTERVAL;options.ble_adv_fast_timeout=APP_ADV_TIMEOUT_IN_SECONDS;}它使2个相同的数据类型的参数,一个是广播数据包,一个是扫描回应数据包,也typedef{ /**<Typeofdevicename. /**<Lengthofshortdevicename(ifshorttypeisspecified).*/ /**<DeterminesifAppearanceshallbeincluded.*/ /**<AdvertisingdataF8_t /**<TXPowerLevelfield.*/ /**<ListofUUIDsinthe'MoreAvailable'list.*/ /**<ListofUUIDsinthe'Complete'list.*/ /**<ListofsolcitedUUIDs.*/ble_advdata_conn_int_t* /**<SlaveConnectionIntervalRange.*/ble_advdata_manuf_data_t* /**<Manufacturerspecificdata.*/ble_advdata_service_data_t*p_service_data_array;/**<ArrayofServicedatastructures.*//**<ArrayofServicedatastructures.*/ /**<NumberofServicedatastructures.}如果有自有服务,需要设置服务UUID。样例里直接用的一个电池服务UUID,这个是盟定义UUID类似的方式定义UUIDUUID16性定义一个共用的基本UUID的方式使得应用变为更加简单,至少在同一服务中更是如此。后面的讲详细说明如何添加自己的私有服务的UUID。服务初始化staticvoid{//YOUR_JOB:Addstaticvoid{//YOUR_JOB:Addcodetoinitializetheservicesusedbythe} 连接参数和安全参数初始化conn_params_init();连接参数初始化/**@brief/**@briefFunctionforinitializingtheConnectionParametersstaticvoid{ble_conn_params_init_tmemset(&cp_init,0,memset(&cp_init,0, cp_init.first_conn_params_update_delay= =====err_code=}SDK提供了一个名为ble_conn_params的模块用于管理连接参数更新,它通过SoftDeviceAPI函数是经过封装后的函数,无法查看源函数,大家只要通过帮助文档查找函数意义,所有带sd前缀的函数名就是SoftDeviceAPI函数。在初始化结构体le_cnn_aams_int_t中,定义了更新过程的有关参数,例如,是否开始连接,什么情况开始写入一个特定的CCCD,是否使用连接参数,发送更新请求的延时等等。大家可以查看源码,在LE__PRH文件内err_codeerr_code=ble_conn_paramsSDK模块确保与主机(集中器)的连接参数相适应,如3.8电源管power_manage();电源管理SDK提供了一个名为sd_app_evt_waitstaticvoidstaticvoid{uint32_terr_code=sd_app_evt_wait();}验证:编 请参看《 实验第一节:蓝牙
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年皮革整烫机项目可行性研究报告
- 2025年猫眼石项链项目可行性研究报告
- 2025年水果箱项目可行性研究报告
- 2025年橡塑保温材料项目可行性研究报告
- 2025年暖管散热器项目可行性研究报告
- 2025年平纹桃皮绒短裤项目可行性研究报告
- 2025-2030中国居住物业行业十四五发展分析及投资前景与战略规划研究报告
- 2025-2030中国小轿车行业发展分析及投资风险预测研究报告
- 2025-2030中国安全气囊行业调研分析及发展趋势预测研究报告
- 2025-2030中国婴儿服饰礼盒行业发展分析及发展前景与投资研究报告
- 《工程勘察设计收费标准》(2002年修订本)
- 古典经济学中的中国渊源课件
- 部编人教版语文八年级下册文言文课下注释
- 食品化学 碳水化合物课件
- 在建项目汛前安全生产检查表
- 中国风传统文化家风家训主题PPT模板
- 华为终端合作手机硬件测试标准-V10.4发布版本
- 外科手术基本器械及其使用
- 植被砼护坡绿化施工组织设计
- GPON组网与华为MA5800-X15OLT配置
- 小学四年级综合实践活动课件.ppt
评论
0/150
提交评论