




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
//青風帶你玩藍牙nrf52832系列...................------------作者:青 作者 青 硬件平臺:青云QY-nrf52832開發(fā) 第一篇軟硬件預備 1章青云藍牙nrf52832開發(fā)板硬件資源硬件介 青云nrf52832詳 nrf52832專業(yè)源簡 nrf52832開發(fā)理圖詳解 第2章青云藍牙軟件開發(fā)環(huán) 協(xié)議棧工具 開發(fā)環(huán)境 開發(fā)環(huán)境KEIL的安 工程項目的建 第3章工程的與調(diào) :仿真工具的選擇 :工程 工程項目的仿真調(diào) 第二篇藍牙4.x技術(shù)入門 第4章藍牙工程樣例的建 :藍牙樣例工程結(jié)構(gòu) :nrf52832藍牙協(xié)議的分層 應用層簡介 控制器的控制 主機主協(xié)議層詳細說明 通用規(guī)范(GenericAccess 角 廣 掃 發(fā) 連 通用屬性配置文件(Generic 角 GATT的規(guī)范層 屬 特 描述 服
profile(數(shù)據(jù)配置文件 源代碼分析 外設(shè)初始 協(xié)議棧初始 gap初始 廣播初始 服務初始 連接參數(shù)和安全參數(shù)初始 4.4.7.廣播開 4.4.8電源管 驗證 第5章藍牙協(xié)議棧初始化與調(diào)度機 :nrf52832藍牙協(xié)議棧初始化函結(jié)構(gòu) :協(xié)議棧系統(tǒng)時鐘設(shè)置 協(xié)議棧的使能 回調(diào)派發(fā)函數(shù)與調(diào)度機制 第6章藍牙協(xié)議通用規(guī)范GAP入 GAP軟件設(shè)計分析 GAP初始化安全模式配置 GAP連接要求 設(shè)備名稱修 GAP初始化設(shè)置連接間 第7章藍牙廣播初始化解 BLE廣播初始化步驟 廣播名 廣播模式設(shè) 廣播類型設(shè) 不進入IDLE無效模 應用與調(diào) 測試 第8章藍牙參數(shù)更 :nrf52832藍牙參數(shù)更新初始化函數(shù)結(jié)構(gòu) 8.2參數(shù)更新描 發(fā)起更新申 8.2.2參數(shù)更新應 :參數(shù)更新初始化配置 本章總結(jié) 第9章藍牙協(xié)議棧下板件設(shè) :協(xié)議棧下按鍵初始化調(diào)用 :板件事件的觸發(fā) :事件觸發(fā)任務 應用與調(diào) ............................................ 測 第10章藍牙協(xié)議棧下定時器的應 BLE定時器...............................定時器開始定 主函數(shù)編 應用與調(diào) 測 第三篇藍牙任務的建立 第11章藍牙任務的介紹(待更新 第12章藍牙LED讀寫任務的建 通用屬性配置文件配 角 GATT的規(guī)范層 屬 特 描述 服 profile(數(shù)據(jù)配置文件 標準的定務和特 如果定制私有profile服務 任務UUID設(shè) 藍牙技術(shù)供應商特定的UUID空中操作和性 寫和沒有回應的 通知和指 廣播配 連接參 服 特 私有服務的實 API設(shè) 實現(xiàn)數(shù)據(jù)結(jié)構(gòu) 服務初始 增加特 處理協(xié)議棧事 CCCD
處理LED特性寫應用層實 使用調(diào) 包含服 加入本服務的UUID到廣播數(shù)據(jù)包 驗證 第13章藍牙按鍵通知任務的建 工程項目的建立 私有服務的實 API設(shè) 實現(xiàn)數(shù)據(jù)結(jié)構(gòu) 服務初始 2.2按鍵服務特性的添加增加特 處理協(xié)議棧事 處理按鍵事 應用層實 使用調(diào) 按鍵處 加入本服務的UUID到廣播數(shù)據(jù)包 驗證 第14章藍牙電池任務的建 :nrf52832藍牙BLE電池函數(shù)庫 141.1BLE電池函數(shù)庫文件的添加電池采樣設(shè)計基本原:函數(shù)編寫 定時器設(shè) 電池任務和調(diào) 電池值更 主函數(shù)編 應用與調(diào) ...................................測 第15章藍牙心電任務的建 工程項目的建立 主函數(shù)的建 外設(shè)部分初始 協(xié)議棧相關(guān)初始 設(shè)備管理函數(shù)初始化服務任務建 藍牙服務程序設(shè) 心率服務設(shè) 電池服務設(shè)計和設(shè)備信息服務設(shè) 主函數(shù)的實 驗 第16章藍牙UUID的分 :UUID設(shè)置規(guī)則及原理 藍牙技術(shù) 供應商特定的 :程序中UUID的設(shè)置 藍牙協(xié)議小組公共UUID設(shè) 私有服務UUID設(shè)置:.UUID類型切換 應用與調(diào) ...................................測 第四篇藍牙4.x數(shù)據(jù)傳 第17章藍牙串口數(shù)據(jù)透 工程項目的建立 主函數(shù)的建 外設(shè)部分初始 協(xié)議棧相關(guān)初始 藍牙API頭文件設(shè) 172.1API函數(shù)庫文件頭文件設(shè)計數(shù)據(jù)結(jié)構(gòu)體設(shè) 藍牙API主函數(shù)設(shè)計 UUID設(shè)置方 藍牙技術(shù)供應商特定的 串口接收和發(fā)送服務添加173.4藍牙串口服務特性的配置CCCD安全設(shè)置.特征參數(shù)組設(shè)置.特征添 處理協(xié)議棧事 處理串口特 處理串口接收事 主函數(shù)的實 驗
第18章藍牙廣播包與數(shù)據(jù)包分 第19章藍牙.....................................:指令設(shè)置 應用與調(diào) ................................測 第20章藍牙接收數(shù)據(jù)FLASH:nrf52832藍牙FLASH處理 主要處理函數(shù)介 處理函數(shù)使用注意 :函數(shù)編寫 FLASH操作初始化設(shè)置私有任務處 主函數(shù)編 應用與調(diào) ................................210測 第21章設(shè)備的修 工程名稱服 :協(xié)議棧下實現(xiàn)流程 發(fā)送新的設(shè)備名稱儲 判斷是否為有效的設(shè)備名稱服務重 應用與調(diào) ................................219測 第22章藍牙溫濕度測量方法 溫濕度DHT11驅(qū) :協(xié)議棧下實現(xiàn)流程 初始化傳感 指令發(fā) 應用與調(diào) ................................測 第23章藍牙溫濕度測量 溫濕度DHT11驅(qū) :協(xié)議棧下實現(xiàn)流程 初始化傳感 私有任務建 DHT11服務特性的添 增加特性 溫濕度數(shù)據(jù)更新 定時器的建 主函數(shù)的實現(xiàn) 應用與調(diào) ...................................測 第24章藍牙ADC光照強度(待更新 第五篇藍牙參數(shù)及安全配 第25章藍牙MAC地 :BLE設(shè)備地址類型 公共設(shè)備地址PublicDeviceAddress248隨機設(shè)備地址RandomDeviceAddress 靜態(tài)設(shè)備地址StaticDeviceAddress 私密設(shè)備地址PrivateDeviceAddress :nrf52832地址配置 設(shè)置自己的MAC地址 應用與調(diào) ...................................測 第26章藍牙發(fā)送功率設(shè) :nrf52832藍牙BLE 應用與調(diào) ...................................測 第27章藍牙信號強度rssi的獲 BLE定時器.................定時器開始定 主函數(shù)編 應用與調(diào) ...................................測 第28章靜態(tài)配 :靜態(tài)密鑰設(shè)置 設(shè)置靜態(tài)密 配對事件配 應用與調(diào)
測 第29章動態(tài)秘鑰應用(待更新 第六篇章藍牙4.x綜合應用(待更新 第30章藍牙防丟器的應用(待更新 第31章藍牙ibeacon的應用(待更新 第32章空中升級DFU的應用(待更新)279第七篇藍牙4.x無線網(wǎng)絡的組 第33章主從串口網(wǎng)絡的建 :nrf52832藍牙主機的主程序流程主機藍牙串口過程分析 主機設(shè)備和從機設(shè)備連接分 主機藍牙串口數(shù)據(jù)流從機到主機的數(shù)據(jù)流向 主機發(fā)送到從機的數(shù)據(jù)流向 應用與調(diào) 軟件準備 實驗現(xiàn)象 第34章主機掃描(待更新 第35章主機心電詳解(待更新 3618網(wǎng)絡的實現(xiàn)(待更新第37章主從一體詳解(待更新 青風帶你玩藍牙/青風帶你玩藍牙/青風帶你玩藍nrf52832系列 作者:青::青風電子社區(qū)作者:青:淘寶店:技術(shù)群硬件平臺:青云QY-nrf52832開發(fā)1章青云藍牙nrf52832開發(fā)板硬件硬件介QY-nrf52832是一個功能強大的藍牙開發(fā)套件,支持藍牙低功耗(BLE)協(xié)議和私系統(tǒng)中的一員。憑借超低的功耗、優(yōu)越的性能、卓越的設(shè)計、nrf52832得到了越來越廣泛nrf52832是一款為超低功耗無線應用(ULPwirelesssapplications)打造的多協(xié)議單芯片解決方案。它Nordic一流ARMCortexM4內(nèi)核256KB的flash+16KB的RAM。nrf52832支持Bluetooth4.0lowenergy和的2.4GHz協(xié)議32ARMCortexM0256kBflash/16kBSoftwarestacksavailableasnRF51xxx256kBDigitalfrom4dBmtoRAMmappedFIFOsusing16kBDynamiconairpayloadlengthupto256靈活可配置的31ProgrammablePeripheralInterface–SimpleON/OFF全功能的數(shù)字接口SPI/2-10-bit128-bitAESECB/CCM/AARco-Quadrature更低的功耗,更高的性能176kb可用于應用開發(fā))。相對于8/16位的平臺擁有更佳的代碼密度和更快的執(zhí)行速度??删幊掏庠O(shè)互聯(lián)(ProgrammablePeripheralInterconnect,PPI)系統(tǒng)提供了一個16MCU介入的情況下進行直接的和自主的通信。這將減少外設(shè)經(jīng)由CPU通信造成的延遲,并可在通信過程中保持CPU休眠以減少能耗。該有兩種電源模式-ON/OFF,并且所有系統(tǒng)模塊和外設(shè)都有獨立的電源管理,用于控制相應模塊根據(jù)任務需求在RUN/IDLE狀態(tài)間進行切換。全新的Radio模塊是nrf52832優(yōu)秀性能的基礎(chǔ)。該模塊支持低功耗藍牙(Bluetoothlowenergy)并同時兼容NordicnRF24L系列產(chǎn)品。輸出功率范圍在+4dBm到-20dBm之間,步進為4dB。的靈敏度可接收變化范圍在-96與-85dBm之間的信息(取決于Lowcostexternalcrystal16MHz±Lowpower16MHzcrystalandRCUltralow-power32kHzcrystalandRC(1.8Vto3.6On-chipDC/DCbuck封裝48-pin6x6青云nrf52832藍牙開發(fā)平臺硬件詳青云nrf52832專業(yè)版資源簡QY-nrf52832開發(fā)板整體設(shè)計框圖如下圖所示,包含青風帶你玩藍牙青風帶你玩藍牙/匹配板載天USB轉(zhuǎn)串口所有I/O2個用戶按
:132MHZ速晶振;1低速晶振;
復位按板載電位SWD接口引 5V轉(zhuǎn) 鋰電池nRF52832開發(fā)板小巧便捷,有鋰電池供電,可以隨身攜帶。方便易兼容nRF52832_DKPCA10040的接口兼容2.4GHznRF24L系列(on-the-Bluetoothlowenergy(PCB印制天線(InvertedF4LED(共陰極CP2102調(diào)試接口(USB轉(zhuǎn)串口iOS青云nrf52832開發(fā)板原理圖詳解1.nrf52832,板載天線SCKSWDVCC四個端口,如下圖所示:2:電源部分 入3.3V電源。usb轉(zhuǎn)串口部分4:用戶按鍵和用戶led燈 接口部分:(外 接口6:ADC部分7:nrf52832的所有IO端口都引出,下面的圖為引出端口,開發(fā)板上也有印絲可以看到 2章青云藍牙軟件開發(fā)1:協(xié)議棧環(huán)境 nrfgo2:工程編譯環(huán)境KEIL協(xié)議棧工具NORDIC公司有專業(yè)的協(xié)議棧工具。大家可以去NORDIC公司官網(wǎng)版本,(注意如果使用我們的jlinkob仿真器,版本nrfgo只能在win10系統(tǒng)下使用,首先打開光盤內(nèi)安裝所需軟件文件夾找到或者的安裝包,選擇你的系統(tǒng)位數(shù),點擊安裝文件。安裝好后在桌面生成有如下圖標:開發(fā)環(huán)境開發(fā)環(huán)境KEIL的安首先打開光盤內(nèi):安裝所需軟件文件夾,找到KEIL的安裝包,點擊片,因此須安裝一個補丁包,使得keil支持nnrf52832。nrf5x_MDK_v8_2_0_keil.mis文件,點擊填入你安裝keil的CID,生成序列號,如下圖所示界面: 青風帶你玩藍牙/青風帶你玩藍牙/工程項目的建第3章工程 與調(diào):仿真工具的選擇開發(fā)板接口如下:如果客戶有20PIN的jlinkv8或者jlinkv9,則對照下圖端口進行連接:青風帶你玩藍牙青風帶你玩藍牙/開發(fā)板通電,同時連接好仿真器和開發(fā)板,這時候就可以開始了:工程1:協(xié)議棧燒寫:外設(shè)程序例子不需要協(xié)議棧,這個步驟略過直接燒錄HEX采用nrfgo進行,如國仿真器和開發(fā)板正確連接,打開nrfgo會發(fā)現(xiàn)分三步實現(xiàn):1:發(fā)現(xiàn)設(shè)備2:刪除所有內(nèi)容:點擊Erase3:燒錄應用程序點擊:Browse,選擇對應版本的協(xié)議棧,然后點擊Program燒錄。如下圖所示選2:工程項目的燒寫:打開MDK工程項目,設(shè)置仿真器的選項。Debug選擇:jlink/J-TraceCortex,如下圖所示,設(shè)計setting,如下圖所示選擇SW模式,提示發(fā)現(xiàn)硬件:選擇其中 Download選擇相應的器件的FLASH大小,我們選擇2M最后Utilities選項也要設(shè)置成jlink/J-TraceCortex方式,如下圖所示以上設(shè)置好后就可 并且仿真了。點擊 直 青風帶你玩藍牙/青風帶你玩藍牙/工程項目的仿真調(diào)第二篇4.x技術(shù)入門4章藍牙工程樣例的個通過BLE的應用實例。后面我們開發(fā)自己的應用實例的時候都可以通過修改這個BLE第一部分,main主函數(shù)。工程建立是分層設(shè)置的,也就是應用層,協(xié)議層和硬件第三部分:Startup文件夾,作為的啟動函數(shù),這個面的外設(shè)篇里有過講解,設(shè)置了nrf52832的啟動項和設(shè)置了系統(tǒng)時鐘。第四部分BLE文件夾,本文件夾提供一些藍牙服務代碼。第五部分drivers文件夾,提供外設(shè)驅(qū)動函數(shù)代碼。第六部分Libraies文件夾,nrf52832提供的一些現(xiàn)成的庫函數(shù),這些函數(shù)是和硬件緊密相連的,這樣帶有BLE前綴的就是和藍牙相關(guān)的庫函數(shù),帶有app前綴的文件是和app應用有關(guān)系的文件夾。 青風帶你玩藍牙 青風帶你玩藍牙青風帶你玩藍牙/ 藍牙協(xié)議的分層應用層簡介:告通知(alertnotificantion),血壓測量(bloodpressure),心率(heartrate),牙特別小組SIG的進行了解。在樣例中源文件如下路徑給出了SIG發(fā)布的應控制器的控制如上圖所示,實際分為三部分HCI特別注意:對應控制程采用的是封裝函數(shù)格式,也就是說源程序沒有開源,而是通過SoftDeviceAPI函數(shù)是經(jīng)過封裝后,無法查看源函數(shù),大家只要通過幫助文檔查找函sdftDevicePI函數(shù)。:通用規(guī)范(GenericAccess注意:GAP的詳細介紹見《BluetoothCoreSpecification》(藍牙規(guī)范)的3C角為了創(chuàng)建和維持一個BLE連接,引入了“角色”這一概念。一個BLE設(shè)備不是集中器角 在應用例程中,使用在應用例程中,使用 或 注意:在接的另一端的設(shè)備被稱為對等設(shè)備,不管它是集中器還是設(shè)備廣集中器能夠與設(shè)備建立連接,設(shè)備必須處于廣播狀態(tài),它每經(jīng)過一個時間間隔發(fā)送一次廣播數(shù)據(jù)包,這個時間間隔稱為廣播間隔,它的范圍是20ms到10.24s。廣回應最多可以攜帶31字節(jié)的數(shù)據(jù)。頻率上,以防止被WiFi干擾。掃發(fā)連隔必須在7.5ms到4s之間??梢酝ㄟ^在每接間隔中傳輸多個數(shù)據(jù)包以獲得更高的數(shù)據(jù)吞吐量,每一個傳輸青風帶你玩藍牙/青風帶你玩藍牙/機延時(slavelatency)通用屬性配置文件(GenericAttribute角GAP定義了角色之外,BLE還定義了另2種角色:GATT服務器GATT客戶端,它們完全獨立于GAP的角色。提供數(shù)據(jù)的設(shè)備稱為GATT服務器,GATT服務器而獲得數(shù)據(jù)的設(shè)備稱為GATT客戶端。在應用中在應用中 GATT的規(guī)范層次屬GATT表中可能有許多屬性,這些屬性能可能有相同的UUID。特所有通過GATT服務傳輸?shù)臄?shù)據(jù)必須成一系列的特性,可以把特性中的這些數(shù)據(jù)看描述符CharacteristicConfigurationDescriptor,CCCD),這個描述符是給任何支持通知或服GATT服務一般包含幾塊具有相關(guān)的功能,比如特定傳感器的和設(shè)置,人機接口(SIG)而設(shè)計,SIG建議根據(jù)它們的規(guī)范設(shè)計自己的file(數(shù)據(jù)配置文件profileprofile文件包含需要的服務的信息或者為對等設(shè)備如何交互的配置文件的選項信息。設(shè)備GAPGATT的角色都可能在數(shù)源代碼分析intint{boolerase_bonds;//Initialize.淘寶地址淘寶地址 gap_params_init();//GAP參數(shù)初始化//Startexecution.err_codeble_advertising_start(BLE_ADV_MODE_FAST);//廣播開始//Entermainloop.for(;;){}}青風帶你玩藍牙 外設(shè)初始外設(shè)初始化實現(xiàn)需要使用的一些外部設(shè)備,外部設(shè)備的使用大家可以參考的第一部分。1.staticvoidtimers_init(void)函staticvoidstaticvoid{APP_TIMER_OP_QUEUE_SIZE,true);err_code=app_timer_create(&m_app_timer_id,APP_TIMER_MODE_REPEATED,APP_ERROR_CHECK(err_code);青風帶你玩藍牙 青風帶你玩藍牙 淘寶地址 }創(chuàng)建要由應用程序使用的任何定時器。并且給了如何創(chuàng)建一個計時器的實例。后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發(fā)生變化,如果有變化了,系統(tǒng)就回調(diào)的bsp_event_handler,也就是bsp中斷服務函數(shù)如下,實現(xiàn)多個事件,比如BSP_EVENT_SLEEPBSP_EVENT_DISCONNECTBSP_EVENT_WHIIST_OFF重新廣播沒有白事件等,對應事件執(zhí)行對應操作。voidbsp_event_handler(bsp_event_tvoidbsp_event_handler(bsp_event_t{uint32_t青風帶你玩藍牙 青風帶你玩藍牙/switch{caseBSP_EVENT_SLEEP:caseerr_code=sd_ble_gap_disconnect(m_conn_handle,if(err_code!={}case err_code=ble_advertising_restart_without_whi if(err_code!=NRF_ERROR_INVALID_STATE){}}}協(xié)議棧初始化ble_stack_init()協(xié)議初始化:協(xié)議棧初始化工作主要做下面幾點:系統(tǒng)時鐘配青風帶你玩藍牙 青風帶你玩藍牙 2:默認啟動協(xié)議棧的參數(shù)設(shè)置staticvoid{staticvoid{uint32_tnrf_clock_lf_cfg_tclock_lf_cfg=//初始化SoftDevice系統(tǒng)時鐘和相關(guān)參數(shù).ble_enable_params_terr_code= ////RegisterwiththeSoftDevicehandlermoduleforBLEevents.err_code=softdevice_ble_evt_handler_set(ble_evt_dispatch);//RegisterwiththeSoftDevicehandlermoduleforBLEevents.err_code=softdevice_sys_evt_handler_set(sys_evt_dispatch);}青風帶你玩藍牙青風帶你玩藍牙/ble_evt_dispatch,這個函數(shù)主要就是基礎(chǔ)的藍牙事件和連接的派發(fā),函數(shù)staticstaticvoidble_evt_dispatch(ble_evt_t*{bsp_btn_ble_on_ble_evt(p_ble_evt);//板上按鍵事件派ble_advertising_on_ble_evt(p_ble_evt);//藍牙廣播事件/*YOUR_JOBaddcallsto_on_ble_evtfunctionsfromeachserviceyourapplicationisusingble_xxs_on_ble_evt(&m_xxs,p_ble_evt);ble_yys_on_ble_evt(&m_yys,}GATT標準,都需要加入自己的服務回調(diào)scheduler_init():初始化事件調(diào)度置SDK的模塊初始化函數(shù)中相關(guān)的標識使用調(diào)度的參數(shù)為假gap_params_init():gap初始化;通用配置文件(GenericAccessProfile,GAP),該Profile保證不同同時還處理一些有關(guān)連接的業(yè)務(如鏈路建立、信道和連接建立)除此之外,GAP還定義了下列內(nèi)容:關(guān)于GAP的詳細分析請參考我們的另一篇《青云藍牙---GAP設(shè)置詳談》廣播初始staticvoidadvertising_init(void):函數(shù)初始化廣播功能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_enabled=BLE_ADV_FAST_ENABLED;options.ble_adv_fast_interval=APP_ADV_INTERVAL;options.ble_adv_fast_timeout=APP_ADV_TIMEOUT_IN_SECONDS;err_code=ble_advertising_init(&advdata,NULL,&options,on_adv_evt,}}advertising_init()中,設(shè)置廣播數(shù)據(jù)結(jié)構(gòu)體,并調(diào)用ble_advertising_init來設(shè)置,它使用NULL。如果自己設(shè)置任務時,你就必須typedeftypedef{/**<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.*/ /**<NumberofServicedatastructures.}如果有自有服務,需要設(shè)置服務UUID樣例里直接用的一個電池服務UUID,這個是GATT類似的方式定義UUID:先增加一個特定的基本UUID,再定義一個16UUID(類似說明如何添加自己的私有服務的UUID。服務初始staticvoid{//YOUR_JOB:Addstaticvoid{//YOUR_JOB:Addcodetoinitializetheservicesusedbythe} 例請看后面的連接參數(shù)和安全參數(shù)初始化conn_params_init();連接參數(shù)初始化/**@brief/**@briefFunctionforinitializingtheConnectionParametersstaticvoid{ble_conn_params_init_tmemset(&cp_init,0, cp_init.first_conn_params_update_delay=======err_code=/青風帶你玩藍牙/青風帶你玩藍牙}SDK提供了一個名為ble_conn_params的模塊用于管理連接參數(shù)更新,它通過SoftDeviceAPI進行處理,包括請求的時間和第一次請求被再發(fā)送一個新的請求。找函數(shù)意義,所有帶sd前綴的函數(shù)名就是SoftDeviceAPI函數(shù)。CCCD,是否使用連接參數(shù),發(fā)送更新請求的延時等等。大家可以查看源碼,在BLE_CONN_PARAMS.H文件內(nèi)在初始化函數(shù)ble_conn_params_init()中,使用封裝了初始化連接參數(shù)err_codeerr_code=ble_conn_paramsSDK模塊確保與主機(集中器)的連接參數(shù)相適應,如果4.4.7.廣播開始power_manage();電源管理staticvoidstaticvoid{uint32_terr_code=sd_app_evt_wait();編寫請參看《1.BLE實驗第一節(jié):藍牙工程樣本使用說明點擊設(shè)備,顯示連接成功,LED1燈熄滅,LED2青風帶你玩藍牙青風帶你玩藍牙/ 5章藍牙協(xié)議棧初始化與調(diào)度機GAP協(xié)議棧初始化這講將詳細討論協(xié)議棧 藍牙協(xié)議棧初始化函數(shù)結(jié)構(gòu):青風帶你玩藍牙/青風帶你玩藍牙/1:協(xié)議棧時鐘初始化2:初始化協(xié)議棧3:派發(fā)回調(diào)函數(shù)的設(shè)置:NRF_CLOCK_LFCLKSRC為一個結(jié)構(gòu)體,結(jié)構(gòu)體下有設(shè)置4個參數(shù),如下所示: = = = .xtal_accuracy=a.RC時#define /**<RC時鐘#define /**<外部晶振時鐘青風帶你玩藍牙/青風帶你玩藍牙/#define /**<02.05.16.值的變化量。如果漂移了百萬分之一,稱之為1ppm。ppm是一個相對變化量,1ppm指百萬分之一,也就是相對標稱頻率的變化量。時當選擇外部晶振的時候,其他另外兩個參數(shù).rc_ctiv和 2:RC時鐘,如果需要使用RC時鐘時,進行校準的時候的32MHZ高4s間隔67ua的的平均電RC功能也消耗一點的電流,因此相比于使用外部晶振,將增加8到10ua的電流消耗。多消耗一定電流,節(jié)省一定成本,你會選擇嗎兩個參數(shù).rc_ctiv和.rc_temp_ctiv實際上就是針對NRF_CLOCK_LF_SRC_RC模式.rc_ctiv1/4秒單位下的校準時間間隔,為了避免過度的時間漂移,在一個刻度時間間隔下,最大的溫度變化允許為0.5度nRF52NRF_CLOCK_LF_SRC_RC 協(xié)議棧的使能/青風帶你玩藍牙/青風帶你玩藍牙議棧事件分配RAM空間。代碼如下:err_code=//Checktheramsettingsagainsttheusednumberoflinks檢測內(nèi)存設(shè)置使用的err_code=softdevice_enable_get_default_configCENTRAL_LINK_COUNT(主機設(shè)備數(shù)量)和PERIPHERAL_LINK_COUNT(從機設(shè)#defineCENTRAL_LINK_COUNT #definePERIPHERAL_LINK_COUNT 1(1個可使用外部從機設(shè)備進行連#define #definePERIPHERAL_LINK_COUNT 0(1個可使用中心主機設(shè)備進行連18#define #definePERIPHERAL_LINK_COUNT 0(8個可使用中心主機設(shè)備進行連接的鏈路,也就是連接8路從機)#define #definePERIPHERAL_LINK_COUNT 為從機可以接1個主機)在softdevice_enable函數(shù)中調(diào)用sd_ble_enable使能協(xié)議棧?;卣{(diào)派發(fā)函數(shù)與調(diào)度機制://回調(diào)派發(fā)函數(shù),藍牙事errcode=softdevicebleevthandlerset(bleevtAPPERRORCHECK(err//回調(diào)派發(fā)函數(shù),系統(tǒng)事errcode=softdevicesysevthandlerset(sysevtstatic {dm_ble_evt_handler(p_ble_evt);//設(shè)備管理事件處理ble_conn_params_on_ble_evt(p_ble_evt);//bsp_btn_ble_on_ble_evt(p_ble_evt);//板級藍牙事件處理on_ble_evt(p_ble_evt);//通用的事件處理函ble_advertising_on_ble_evt(p_ble_evt);//廣播藍牙事件處理函/*YOUR_JOBaddcallsto_on_ble_evtfunctionsfromeachserviceyourapplicationis p_ble_evt);ble_yys_on_ble_evt(&m_yys,19.這里要談談NRF52的藍牙協(xié)議棧處理機制。在任何與BLE相關(guān)的事件被協(xié)議棧上拋上來給應用時,be_evt_dispach藍牙派發(fā)函數(shù)就會被調(diào)用,從而將事件拋給各個服務函數(shù)或處理派發(fā)模塊,如上圖所示。每種在事件結(jié)構(gòu)體be_evt_t中通過d來標注。不同的處理函數(shù)只需要處理自己要去做的事件(也就是感的事件,設(shè)計者在程序中編寫的需要去處理的事件)。在FSH的時候就需要設(shè)置。數(shù)(有幾個添加幾個廣播藍牙事數(shù)函設(shè)備管理事/青風帶你玩藍牙如何添加的參考《LED讀寫任務》,《按鍵反饋任務》等詳解。對應處理函數(shù),我{switch(p_ble_evt-{casecasecasecase//Noimplementation41.}代碼中加黑的代碼就表示為evt_id傳遞的事件,那么這些事件是如何定義的了?協(xié)議棧拋給程序的是什么數(shù)據(jù)?下面就詳細的討論下,在ble_rangesh文件中,定義了一組事件ID的類,為什么說是類?實際就是分群的意思。比如紅框里的BLE_GAP_EVT_BASE為GAP藍牙事件基青風帶你玩藍牙 青風帶你玩藍牙 BLE_GAP_EVT_LAST32第6章藍牙協(xié)議通用規(guī)范GAP入層,討論協(xié)議棧中的通用規(guī)范GAP,GAP是和用戶應用層緊密相連的。。GAP初始這講將詳細討論下GAP青風帶你玩藍牙/青風帶你玩藍牙/:nrf52832GAP通用配置文件(GenericAccessProfile,GAP),該Profile保證不同GAP是所有其他配置文件的基礎(chǔ),它定義了在藍牙設(shè)備間建立基帶鏈路的通用方法.除此之外,GAP還定義了下列內(nèi)容:GAP確保了應用程序和設(shè)備間的高度互操作性,還允許開發(fā)利用現(xiàn)有的定義更加容易地定義新的配置文件。GAP處理未連接的兩個設(shè)備間的發(fā)現(xiàn)和建立連接過程。此配置文件定義了一些通用的操作,這些操作可供GAP的配置文件,以及實施多個配置文件的設(shè)備使用。GAP確保了兩個藍牙設(shè)備可通過藍牙技術(shù)交換信息,以發(fā)現(xiàn)GAPnrf52832藍牙樣例,找到GAP初始化函數(shù)gap_params_init,配置GAP代碼來進行對照分析,結(jié)staticvoid{ sec_mode;//安全模式,安全權(quán)限設(shè)置BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);//連接模式,主要是是否需要加err_code=(constuint8_t*)gap_conn_params.min_conn_interval=gap_conn_params.max_conn_interval= = sd_ble_gap_ppcp_set(&gap_conn_params);//連接參數(shù)設(shè)置,主要是時間間隔設(shè)置64. 初始化安全模式配置GAP通常還會負責啟動BLE連接的安全功能。只有對通過驗證的連接而言某些數(shù)據(jù)是可讀或可寫的。一旦形成接,兩個設(shè)備可以通過一個過程被稱為配對。進行配對時,密鑰建立加密和認證的。在一個典型的案例,設(shè)備需要設(shè)備提供兩臺設(shè)備交換安全密鑰加密和驗證的。在許多情況下,相同的設(shè)備和設(shè)備將會經(jīng)常建立連接和斷開連接。BLE具先查看GAP連接要求SecurityMode0Level0:Noaccesspermissionsatall(thislevelisnotdefinedbytheBluetoothCorespecification).SecurityMode1Level1:Nosecurityisneeded(akaopenSecurityMode1Level2:Encryptedlinkrequired,MITMprotectionnotSecurityMode1Level3:MITMprotectedencryptedlinkrequired.SecurityMode1Level4:MITMprotectedLESCencryptedlinkrequired.SecurityMode2Level1:Signingorencryptionrequired,MITMprotectionnotnecessary.SecurityMode2Level2:MITMprotectedsigningrequired,unlesslinkisMITMprotectedencrypted.0,1,2三種模式,0,1,2,3,4五種水平,代碼定義如下:(1or2)0水平定義函數(shù):介紹水平有(12or3,40Level(1,2or3,4),0fornopermissionsattypedef{uint8_tsm: /**<SecurityMode(1or2),0fornopermissionsatall.uint8_tlv: /**<Level(1,2or3,4),0fornopermissionsatall.}安全模式1水平2:需要加密,無MITM保護22:MITM保護簽名或者加密中間人(MITM)的保護大家可以查找相關(guān)資料進行了解,也歡迎到發(fā)布經(jīng)驗。BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode選擇了上面的哪種 do{(ptr)->sm=0;(ptr)->lv=0;}while(0)設(shè)置模式?jīng)]有權(quán)限,0模式0水 do{(ptr)->sm=1;(ptr)->lv=1;}while(0)設(shè)置為無需保護,開放性,1模式1水 do{(ptr)-=1;(ptr)->lv=2;}需要加密,無MITM保護,1模式2水 {(ptr)->sm=1;(ptr)->lv=3;}加密和MITM保{(ptr)->sm=2;(ptr)->lv=1;}{(ptr)->sm=2;(ptr)->lv=2;}青風帶你玩藍牙青風帶你玩藍牙/設(shè)備名稱修改sd_ble_gap_device_name_set是一個SoftDeviceAPI函數(shù),SoftDeviceAPIsd前綴的函數(shù)名就是SoftDeviceAPI函數(shù)。err_code=(constuint8_t*)
MITM保護簽名或者加密uint8_tconstMITM保護簽名或者加密 )GAP[inp_write_perm指定名稱的設(shè)備寫入安全特[in] 設(shè)備名稱[in]len NRF_ERROR_INVALID_ADDR提供的是無效的設(shè)備指針.NRF_ERROR_INVALID_PARAM無效的參數(shù)修改自己的名稱,符號自己的要求,比如設(shè)置DEVICE_NAME為:#define 青風帶你玩藍牙/青風帶你玩藍牙/ 初始化設(shè)置連接間廣播間隔為了省電,可以廣播一段時間之后 設(shè)備,接情況包含一些連接參數(shù):連接間隔BLE連接中跳頻機制需要被間之后會跳到一個新的通道上,LL層負從機潛伏周期忽略主設(shè)備的事件的最大值。比如:個可以到主設(shè)備發(fā)送來的數(shù)據(jù)都可以主設(shè)備的數(shù)據(jù)包監(jiān)督超時10ms的步進。監(jiān)督超時時間從最小10時超時時間必須大于有效連接事件。有效連接事件時間=連接間X(1從機延遲值短連接間隔長連接間隔低或0高潛伏值機收到從機的數(shù)廣播者發(fā)送者,不是可連接的設(shè)備觀察者掃,不能夠啟動連接備設(shè)發(fā)送者,是可連接的設(shè)備,在單一鏈路層連接時作為一個從機備設(shè)啟動連接,在單一或者多鏈路層連接時作為主機,支持三個同時連在某些情況下,設(shè)備請求與設(shè)備建立連接包含連接參數(shù)對設(shè)備而言是不利的。在其他情況下,設(shè)備可以在連接過程中改變連接參數(shù)這個取決于設(shè)備的應用程序。設(shè)備可以請求設(shè)備改變連接參數(shù)通過設(shè)置連接參數(shù)更新請求。這個請求是被協(xié)議棧的L2CAP處理的。* typedef{ uint16_tmin_conn_interval; /**<in1.25msunits,@ref青風帶你玩藍牙/青風帶你玩藍牙/uint16_t /**<in1.25msunits,see uint16_tslave_latency; /**<Slavelatency的數(shù)量see@ref /**<in10msunits,see}SoftDeviceAPI sd_ble_gap_ppcp_set(&gap_conn_params);//連接參數(shù)設(shè)置,主要是時間間隔設(shè)置
(blegapconnparams
設(shè)置設(shè)置 首選的連接參數(shù)p_conn_paramsPointertoablegapconnparamststructurewiththe
NRFNRFNRFERRORINVALIDADDR無效的指針提供NRFERRORINVALIDPARAM無效的參數(shù)提供功能,因此GAP的其他的具體規(guī)范要后面的內(nèi)容一起來討論。這講在后面的講義中說明。7章藍牙廣播初始化青風帶你玩藍牙/青風帶你玩藍牙/廣播初始化廣播初始化這講將詳細討論廣播初BLE廣播初始化步驟staticstaticvoid{ ble_advdata_tadvdata;//Buildadvertisingdatastructtopassinto@refble_advertising_init.memset(&advdata,0,sizeof(advdata));_typeBLE_ADVDATA_FULL_NAME廣播時的名稱顯示BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;//藍牙設(shè)備式 =ble_adv_modes_config_toptions= options.ble_adv_fast_interval=APP_ADV_INTERVAL;//廣播間隔 =APP_ADV_TIMEOUT_IN_SECONDS;///青風帶你玩藍牙/青風帶你玩藍牙err_code=ble_advertising_init(&advdataerr_code=ble_advertising_init(&advdata,NULL,&options,on_adv_evt,}廣播初始化實際上就是初始化兩個結(jié)構(gòu)體,一個是&advdata廣播數(shù)據(jù),一個是&advdata要選擇自己需要設(shè)置的,比如我們之前講的時候就需要添加p_tx_power__typeBLE_ADVDATA_FULL_NAME;//廣播時的名稱顯示廣播模式設(shè)置2.advdata.flags=BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;式如上表所示,藍牙nrf52832實際上設(shè)置的藍牙類型是嚴格限定的,2式和不支持BR/EDR模式。BluetoothSmart活的配置也讓應用能夠更好地管理連接間隔(connectioninterval),以優(yōu)化的BR/EDR,由于其數(shù)據(jù)吞吐量更高,功耗也會相應增加。BR/EDR呢?BluetoothSmart可否用于音頻應用?通常情況下,如果耳機支持4.x,4.xBR/EDR規(guī)格,而不兼容低功耗規(guī)格或BluetoothSmart??梢酝ㄟ^辨認產(chǎn)品包裝上的BluetoothSmart商標確認其是否為BluetoothSmart產(chǎn)品。所以注意nrf52832是無法傳輸音頻的。青風帶你玩藍牙/青風帶你玩藍牙/這些數(shù)據(jù)可以被BluetoothSmartReady設(shè)備上的應用轉(zhuǎn)化成有用的信息,比如智能BluetoothSmartReady plete.p_uuids=廣播類型設(shè)置程序設(shè)置為: 型options.ble_adv_fast_enabled=BLE_ADV_FAST_ENABLED;//廣播類那么整個廣播事件就拋給了廣播回調(diào)函數(shù),如這個是回調(diào)函數(shù)里必須有的一個部分,bl_dvrtiin_on_bl_vt(p_bl_vt)深入到這棧4.1開始分成了低速定向廣播(owutyleirtddvrtiing)和普通定向廣播(utylertddvrtiing青風帶你玩藍牙青風帶你玩藍牙/那么如何啟動廣播了,看主函詳細看下ble_advertising_start函數(shù)設(shè)置,設(shè)置廣播模式的時候是遞進設(shè)置的,這四種模式(5種,定向廣播分2種)是遞進的,比如你設(shè)置了啟動廣播時選擇 Fast模式和Slow模式并沒景是希望設(shè)備上電后以30ms快速廣播20s30s后切換成200ms3最后一個問題,設(shè)置模式成功后執(zhí)行什么操作?就是廣播初始化最后一個函數(shù):err_codeble_advertising_init(&advdata,NULL&optionson_adv_evt,NULL);//廣播參數(shù)IDLEstaticstaticvoid{ble_advdata_t//Buildadvertisingdatastructtopassinto@refble_advertising_init.memset(&advdata,0,sizeof(advdata));=== =ble_adv_modes_config_toptions={0}; options.ble_adv_fast_interval=APP_ADV_INTERVAL; =err_code=ble_advertising_init(&advdata,NULL,&options,on_adv_evt,}示OK。1打開打開進,可以參考軟件篇介紹如圖所示起始地址 首先整片擦除,后首先整片擦除,后協(xié)議棧完后可以工程,首先把工程編譯一下,通過后點擊KEIL上的下成成功后提示如圖,程序開始運行,同時開發(fā)板上廣播 開始廣播2測試:本實驗需要使用抓包器,觀察廣播信號,廣播信號一直廣播,不切換模式。 第8章藍牙參數(shù)更在鏈路層的配置過程完成后,GAP設(shè)置中的參數(shù)connInterval(連接事件間隔),connSlaceLatency(從機延遲)connTimeout(監(jiān)督超時參數(shù)可以實現(xiàn)更新。關(guān)于這三個參數(shù)的定義請詳細看《青風帶你學藍牙:藍牙gap初步入門》。并且通過分析基本原理,在匹配的SDK11.0的藍牙樣例的例子基礎(chǔ)上就行分析與講解,使用的協(xié)議連接參數(shù)初始化連接參數(shù)初始化GAP這講將詳細討論連接參8.1 藍牙協(xié)議棧初始化函數(shù)結(jié)構(gòu):staticvoid86. //設(shè)置連接參數(shù)更新 = = = = = = = =//啟動藍牙BLE連接參數(shù)初始化函數(shù),err_code=103. typedef105.ble_gap_conn_params_t /**<GAP連接參數(shù),ble_conn_params_initp_conn_params參數(shù)設(shè)置為NULL,那么連接參數(shù)從主機獲得(正在使用的參數(shù))*/ 初始化事件(連接或者啟動通知)到第一次連接參數(shù)更新的時間. 113./**<放棄協(xié)商連接參數(shù)前嘗試的最大的次數(shù)*/ /**<CCCD的句柄.如果是從連接開始時啟動的,則設(shè)置為BLE_GATT_HANDLE_INVALID*/ ble_conn_params_evt_handler_t/**<連續(xù)參數(shù)更新參數(shù)對應的處理事件 /**<} 參數(shù)參數(shù)更新描發(fā)起更新申請希望修改當前的參數(shù)則可以使用該命令。在低功耗藍牙中,為了實現(xiàn)極低的功耗,低功耗藍牙協(xié)議主設(shè)備射頻時徹底將空中射頻關(guān)斷。所以,盡可能降低從機鏈瞬瞬參數(shù)更新參數(shù)更新響應鏈瞬.回原因代碼為“命令不理解”的指令命令。那么在nrf52832系列處理器中,會嘗試多次L2CAP參數(shù)更新請求申請次數(shù),如果還是失敗,則斷開連接。next_conn_params_update_delay8.2.2參數(shù)更新應從機設(shè)備可以在任何時候發(fā)送參數(shù)更新請求命令。收到該信息的主設(shè)備如果可以修改參數(shù),則將返回參數(shù)更應答命令,其中的結(jié)果代碼設(shè)置為接受。然后,主設(shè)備將會啟動鏈路層參數(shù)更新控制規(guī)程對參數(shù)進行更新。如果主設(shè)備不同意從設(shè)備的請求命令,它可以發(fā)送結(jié)果代碼為的參數(shù)更新應答來請求,此時,從設(shè)備有兩種選擇:接收主設(shè)備希望的正在使用的參數(shù)或者終止。:參數(shù)更新初始化配置上面講述了參數(shù)協(xié)商的過程,實際的函數(shù)配置如下,如果p_conn_params參數(shù)設(shè)置為非NULL,則需要我們在GAP中調(diào)用sd_ble_gap_ppcp_set函數(shù)設(shè)置下三個參數(shù)。如果設(shè)置下為NULL,則直接從GAP的堆棧中直接設(shè)置,這個再GAP初始化中已經(jīng)設(shè)置好三個參數(shù)。那么這里直接把p_conn_params設(shè)置為NULL:uint32_tble_conn_params_init(constble_conn_params_init_t*{if(p_init->p_conn_params!={m_preferred_conn_params=*p_init-//err_code=if(err_code!={return {//從堆棧stack中參err_code=if(err_code!={return =m_update_count=//啟動定時器開始定return青風帶你玩藍牙/青風帶你玩藍牙/ 156.設(shè)置完了,就會啟動一個軟件定時器,關(guān)于軟件定時器的使用請參考《青風帶你{if(m_conn_handle!={if(m_update_count<={err_code=sd_ble_gap_conn_param_update(m_conn_handle,{ {m_update_count=//if{err_code=sd_ble_gap_disconnect(m_conn_handle,if((err_code!=NRF_SUCCESS)&&(m_conn_params_config.error_handler!={}}//{ble_conn_params_evt_tevt.evt_type=}} 200.數(shù)sd_ble_gap_conn_param_update進行參數(shù)更新。 ( blegapconnparamstconst )在在的角色這將發(fā)起一個鏈路層連接參數(shù)更新過程,否則 的角色,這將發(fā)相應的L2CAP請求,等待 執(zhí)行過程。在這兩種情況下,不管成功或失敗,應用程序?qū)⒅狟LE_GAP_EVT_CONN_PARAM_UPDATE事件的結(jié)果。這個函數(shù)可以用來 。事件生成:BLE_GAP_EVT_CONN_PARAM_UPDATE參NULL,那么將用GAP服務中的PPCP特征值取代。如果主設(shè)備設(shè)置NULL,會被返回值:BLE_ERROR_INVALID_CONN_HANDLE青風帶你玩藍牙青風帶你玩藍牙/ 在鏈路層的連接配置過程完成后,參數(shù)connInterval,connSlaceLatency和connTimeoutCONN_PARAM_UPDATE_REQ數(shù)據(jù)包去Host層的處理去影響這些參數(shù)。本講主要是探討如何設(shè)置從9章藍牙協(xié)議棧下板件:協(xié)議棧下按鍵初始化調(diào)用:按鍵和LED的初始化函數(shù)如下所示,協(xié)議棧下實現(xiàn)了一個BSP(板級支持包)的,主要是整合了按鍵模塊的功能和一些“板級指令”以及與ble事件的交互。而實現(xiàn)這個功能的主要就是下面紅色標注的兩個函數(shù)bsp_init和bsp_btn_ble_init:staticstaticvoidbuttons_leds_init(bool*{bsp_event_tuint32_terr_code=bsp_init(BSP_INIT_LED|err_codebsp_btn_ble_init(NULL,&startup_event);//初始化按鍵觸}}*p_erase_bonds=(startup_event==bsp_init函數(shù)就為按鍵和LED外設(shè)的初始化,同時觸發(fā)對應的板級任務。函數(shù)可以直接查uint32_tbsp_init( )ApplicationTimerforLEDGPIOTEHandlerforbuttonUARTmoduleforUART使用設(shè)備的類型(LED和按鍵ticks_per_100msNumberofRTCticksfor100 NRF_ERROR_INVALID_PARAMGPIOTE有多個使用者 這個函數(shù)的功能就是初始化板級設(shè)備,包括LED和按鍵的初始化。同時定義按鍵按下:板件事件的觸發(fā)板級事件指的是一些定義的特殊狀態(tài),程序中給了對應的結(jié)構(gòu)體:青風帶你玩藍牙青風帶你玩藍牙/{{BSP_EVENT_NOTHING=0, }那么回調(diào)函數(shù)內(nèi)執(zhí)行的內(nèi)容,大家可以根據(jù)自己的要求進行設(shè)置,比如樣例里,當方式了BSP_EVEBNT_SLEEP事件后,系統(tǒng)會進入休眠模式,執(zhí)行sleep_mode_enter().當然我們也可以設(shè)置自己的事件,比如我們在最后添加一個BSP_EVENT_KEY3事件后,執(zhí)行開燈操作:那么如何觸發(fā)這些定義的事件了?這里面有一個關(guān)鍵函數(shù)uint32_tbsp_event_to_button_action_assign(uint32_tbutton,bsp_button_action_taction,bsp_event_tevent)個按鍵那么使用的id就是0-3,是bsp_init函數(shù)中的第三個參數(shù)的回調(diào)函數(shù)的事件。bsp_event_to_button_action_assign函數(shù)在使能按鍵模式,是按鍵和BLE事件交互的函數(shù)bsp_btn_ble_init中被調(diào)用,首先看下bsp_btn_ble_init函數(shù)介紹:uint32_tbsp_btn_ble_init( )初始化藍牙按鍵模式,在使用這個功能之前,板級必須要初始化按鍵青風帶你玩藍牙青風帶你玩藍牙/ 按鍵模式出錯下返回錯誤碼p_startup_bsp_evtBLE事件BSP_EVENT_NOTHING).比如,如果綁定接觸喚醒模式按鍵NRF_SUCCESSReturnNRF_SUCCESS:事件觸發(fā)任務上面這個函數(shù)的就定義了bsp_event_to_button_action_assign函數(shù),也就是按鍵同件BSP_EVENT_KEY_3也沒用到,可以加入代碼如下: 本例使用的協(xié)議棧為S132版本,位于文件夾第4部分這個位置:打開打開進,可以參考軟件篇介紹如圖所示起始地址 首先整片擦除,后首先整片擦除,后協(xié)議棧完后可以工程,首先把工程編譯一下,通過后點擊KEIL上的下成成功后提示如圖,程序開始運行,同時開發(fā)板上廣播 開始廣播測LED1廣播閃爍,按下按鍵4后,LED4會點亮,廣播閃爍后LED4熄滅。10章藍牙協(xié)議棧下定時器的應定時循環(huán)執(zhí)行任務,定時器就成了必須,其實面的心電例子里,溫濕度的例子里BLE定時器staticvoid{uint32_tuint32_tAPP_TIMER_OP_QUEUE_SIZE,false); 上面主要關(guān)注app_timer_create函數(shù),函數(shù)源碼說明下,&m_timer_id為我們的定時器ID,如果你要使用多個定時器,你就可以定義不同的ID就可以了,這個指向你所定義的定時器ID.APP_TIMER_MODE_REPEATED:定時器模式:有兩種模式,如下說明:TIME_timeout_handler:這個函數(shù)是創(chuàng)建一個定時器超時中斷處理函數(shù),需要處理的是里只需要執(zhí)行電池更新函數(shù):staticstaticvoidTIME_timeout_handler(void*{}//{uint32_t2 err_code=ble_nus_string_send(&m_nus,&TIME_level,1);if((err_code!=NRF_SUCCESS)&&(err_code!=NRF_ERROR_INVALID_STATE)(err_code!=BLE_ERROR_NO_TX_BUFFERS)&&(err_code!=BLE_ERROR_NO_TX_BUFFERS)&&){}}數(shù)字變化后我們?nèi)绾胃嬷??這里面直接用串口上傳函數(shù)ble_nus_string_send,因為rx被定義了通知類型,所以數(shù)據(jù)會被上傳到通知中,當通知使能就可以觀察定時器開始定staticvoid{uint32_t//Startapplicationtimers.定時時間間隔 }時器ID,第二個參數(shù)就是時間間隔,第三個參數(shù)沒有返回值就選NULL.#defineTIME_LEVEL_MEAS_INTERVAL intint{bool start_string[]=//Initialize.APP_TIMER_OP_QUEUE_SIZE,青風帶你玩藍牙 青風帶你玩藍牙 淘寶地址淘寶地址 //Entermainloop.for(;;){}}應用與調(diào)本例使用的協(xié)議棧為S132版本,位于文件夾第4部分這個位置: 首先整片擦除,后協(xié)議棧青風帶你玩藍牙 打開 進行可以參考軟件篇介紹如圖所示起始首先整片擦除,后協(xié)議棧青風帶你玩藍牙 完后可以工程,首先把工程編譯一下,通過后點擊KEIL上的下成成功后提示如圖,程序開始運行,同時開發(fā)板上廣播 開始廣播青風帶你玩藍牙青風帶你玩藍牙/ 測本實驗采用寫mcpapp軟件,返現(xiàn)電池服務應用名QFDZ_time,如下圖所示點擊打開,找 Service,如下圖所示特性:通知類型:點擊通知使能,可以比較變化值: 青風帶你玩藍牙 青風帶你玩藍牙/青風帶你玩藍牙/第三篇藍牙任務的建11章藍牙任務的介紹(待更新12章LED讀寫任務的BLELEDnrf52832BLE應用,它是一個通過BLE功能進行通信的BLE應用的簡單演示。當它運行時,你可以通過集中器觸發(fā)nrf52832上LED的輸出。關(guān)于集中器的概念等下來講。這個應用通過一個服務“GATT層”服務被建么這個服務應該1個特性:LED的我們設(shè)置LED特性這里應該為:通過沒有回應的寫操作LED的亮滅,不發(fā)通知給角GAP定義了角色之外,BLE還定義了另2種角色:GATT服務器GATT客戶端,它們完全獨立于GAP的角色。提供數(shù)據(jù)的設(shè)備稱為GATT服務器,GATT服務器而獲得數(shù)據(jù)的設(shè)備稱為GATT客戶端。以以BLE GATT的規(guī)范層屬GATT表中可能有許多屬性,這些屬性能可能有相同的UUID。特所有通過GATT服務傳輸?shù)臄?shù)據(jù)必須成一系列的特性,可以把特性中的這些數(shù)據(jù)看以BLELED應用為例,設(shè)備(帶有LED)作為服務器,集中器作為客戶端獨立地改變,因此,可以讓它們成為獨立的特性,所以我們用一個特性用來表示當前LED的狀態(tài)。描述符CharacteristicConfigurationDescriptor,CCCD),這個描述符是給任何支持通知或服GATT服務一般包含幾塊具有相關(guān)的功能,比如特定傳感器的和設(shè)置,人機接口(SIG)而設(shè)計,SIG建議根據(jù)它們的規(guī)范設(shè)計自己的profile。/青風帶你玩藍牙/青風帶你玩藍牙對于BLE對于BLE profile(數(shù)據(jù)配置文件profileprofile文件包含需要的服務的信息或者為對等設(shè)備如何交互的配置文件的選項信息。設(shè)備GAPGATT的角色都可能在數(shù)BLELEDprofileprofileprofile參加本文2.1接描述。標準的定務和特藍牙技術(shù)(SIG)已經(jīng)定義一些profile、服務、特性和根據(jù)協(xié)議棧的GATT層定義的屬性。但是,協(xié)議棧中只實現(xiàn)了一部分應用的BLE服務,那就意味著,只要協(xié)議棧支持GATT,就可能為一個應用建立一個它需要的profile和服務。既然在一個應用中可以支持profile和服務,那么就可以在這個應用中建立一個個人定制的服務。定制的服務,包括1個定制的特性。如果定制私有profile藍牙技術(shù) UUID,因此它完整的128位UUID為:性,必須使用另外完整的128位UUID。供應商特定的UUID的方式使得應用變?yōu)楦雍唵危珺LELED性的UUID??罩胁僮骱托詌llll寫和沒有回應的寫讀通知和指示BLELEDLEDLEDLED特 中ble_gap_conn_sec_mode_tGAP 中ble_advdata_terr_codeerr_code=err_code=ble_advdata_set(&advdata);廣播參數(shù)(ble_gap_adv_params_t)必須通過sd_ble_gap_adv_start()來傳遞:err_codeerr_code=SDK提供了一個名為ble_conn_params的模塊用于管理連接參數(shù)更新,它通過SoftDeviceAPI進行處理,包括請求的時間和第一次請求被再發(fā)送一個新的請求。找函數(shù)意義,所有帶sd前綴的函數(shù)名就是SoftDeviceAPI函數(shù)。CCCD,是否使用連接參數(shù),發(fā)送更新請求的延時等等。大家可以查看源碼,在BLE_CONN_PARAMS.H文件內(nèi)在初始化函數(shù)ble_conn_params_init()中,使用封裝了初始化連接參數(shù)err_codeerr_code=ble_conn_paramsSDK模塊確保與主機(集中器)的連接參數(shù)相適應,如果服同的服務,函數(shù)設(shè)置如下所示,這是一個典型的SoftDeviceAPI函數(shù)。err_codeerr_c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 流程管理年中工作總結(jié)
- 思想政治教育主要實施方法
- 建筑石膏抹灰施工課件
- 2025企業(yè)租賃合同范本模板
- 2025企業(yè)合同審核與流轉(zhuǎn)管理流程
- 2025年土地租賃合同附加協(xié)議
- 2025標準商業(yè)租賃合同示范文本
- 2025石油貿(mào)易居間合同
- 2025代理合同風險評估與委托協(xié)議樣本
- 讓硬幣浮起來課件
- 一人有限公司章程(范本)
- 員工懲罰通知單
- 2022全國高考真題化學匯編:專題 烴 鹵代烴
- GB/T 25742.4-2022機器狀態(tài)監(jiān)測與診斷數(shù)據(jù)處理、通信與表示第4部分:表示
- 特殊感染手術(shù)的配合與術(shù)后處理
- 蕭紅《呼蘭河傳》課件
- 腦血管病介入診療并發(fā)癥及其處理課件
- 機動車駕駛?cè)丝荚噲龅丶捌湓O(shè)施設(shè)置規(guī)范
- 大學生三生教育主題班會
- 2023年宜昌市中醫(yī)醫(yī)院醫(yī)護人員招聘筆試題庫及答案解析
- 內(nèi)部控制建設(shè)課件
評論
0/150
提交評論