藍牙4.0實戰(zhàn)演練網(wǎng)蜂團隊傾力打造_第1頁
藍牙4.0實戰(zhàn)演練網(wǎng)蜂團隊傾力打造_第2頁
藍牙4.0實戰(zhàn)演練網(wǎng)蜂團隊傾力打造_第3頁
藍牙4.0實戰(zhàn)演練網(wǎng)蜂團隊傾力打造_第4頁
藍牙4.0實戰(zhàn)演練網(wǎng)蜂團隊傾力打造_第5頁
已閱讀5頁,還剩297頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

前藍牙4.0是2012年藍牙版本,是3.0的升級版本,較3.0版本更省電、成本低、3毫秒低延遲、超長有效連接距離、AES-128加密等。藍牙4.0是一款低功耗產(chǎn)品,目前,4s,ipad4等等都配備支持了4.0,剛剛發(fā)布不久的安卓本書內(nèi)容第一章:藍牙4.0簡介和開發(fā)環(huán)境快速建立。本章內(nèi)容主要對藍牙4.0第二章:基礎實驗。本章內(nèi)容主要是對藍牙4.0CC2540的片上資源進CC2540第三章:BLE協(xié)議棧演練。本章主要是對藍牙4.0協(xié)議棧BLE-CC254x-1.3.2進行介紹和開發(fā)。BLE-CC254x-1.3.2是TI公司為其藍牙4.0CC2540專門編寫的一個片上運行系統(tǒng),在系統(tǒng)上運行藍牙4.0協(xié)議。本章通過剖析系統(tǒng)的工作能通過學習后,DIY自己想要的功能。第四章:項目實戰(zhàn)。本章主要利用藍牙4.0協(xié)議棧,在棧上開發(fā)項目2013.8網(wǎng)店 :《藍牙4.0實戰(zhàn)演練》已經(jīng)由網(wǎng)蜂科技于廣州局備案,任何單位或個人同意其中內(nèi)容的網(wǎng)蜂科技將以法律形式責任。4.0練》由網(wǎng)蜂科技傾力打造,始終堅持開源原則,開源全部源代碼、學習資料,以及部分藍牙4.0學習模塊的原理圖和PCB。當前版本為V2第二版。采用全新文檔編寫方法,規(guī)范內(nèi)容和排版;協(xié)議棧版本更新至BLE-stack1.3.1版;項目實戰(zhàn)新增藍牙臺燈、藍牙防丟器、藍牙鍵盤、藍牙鼠標;新增網(wǎng)蜂藍牙4.0周邊學習模塊介多個TI重要工具的使用;修正了蜂迷學習第一版過程中所有發(fā)現(xiàn)的BUG。歷史版本第一版。內(nèi)容涵蓋了藍牙4.0的簡介、開發(fā)環(huán)境的建立、基礎實驗、BlE協(xié)議棧演練和項目實戰(zhàn)。第1章藍牙4.0簡介和開發(fā)環(huán)境快速建 藍牙4.0簡 網(wǎng)蜂藍牙4.0開發(fā)平臺介 網(wǎng)蜂藍牙4.0 藍牙4.0MINI模 網(wǎng)蜂藍牙4.0功能底 網(wǎng)蜂藍牙4.0增強型功能底 網(wǎng)蜂藍牙4.0普通底板(PCB開源 網(wǎng)蜂藍牙4.0USB 網(wǎng)蜂藍牙4.0 網(wǎng)蜂ZigBee仿真器 網(wǎng)蜂TICC系列仿真器CC 網(wǎng)蜂藍牙4.0開發(fā)套 開發(fā)環(huán)境快速建 相關(guān)軟件和驅(qū)動安 IAR工程文件的快速建 附錄 使用TISmartRFFlashProgrammer程 第2章基礎實 點亮第一個 按 外部中 定時 定時器T1(查詢方式 定時器T3(中斷方式 串口通 串口發(fā)送(o 串口接收和發(fā)送(send& UART0-控制 AD控制(自帶溫度計 睡眠喚 中斷喚 定時器喚 看門 第3章BLE協(xié)議棧演 BLE協(xié)議棧簡 協(xié)議棧工作原理介 工程文件介 OSAL介 協(xié)議棧的串口實 串口發(fā) 串口接 協(xié)議棧的按鍵實 SimpleBLECentral工程按鍵配 SimpleBLEPeripheral工程按鍵配 藍牙無線數(shù)據(jù)傳輸入 部分代碼簡 建立連 連接和簡單數(shù)據(jù)傳輸測 實現(xiàn)上電自動連 Profile簡單介 SimpleGATTProfile及Btool的使 串口透 客戶端接收串口數(shù)據(jù)并寫入特征 服務器接收串口數(shù)據(jù)并寫入特征值,再通知主 傳感器應用(開發(fā)中 溫度傳感器 溫濕度度傳感器 紅外收 附 packetSniffer協(xié)議棧分析軟件使用說 藍牙4.0在IOSAPP中測 其它工具及源碼獲 第4章項目實 藍牙臺 藍牙防丟 藍牙鍵 藍牙無線操作 藍牙無線操作音樂 藍牙無線鼠 無線飛 藍牙4.0系列穿戴設備(項目開發(fā)中 第1章藍牙4.0簡介和開發(fā)環(huán)境快速建立4.01.1藍牙4.01.2電池連續(xù)工作數(shù)年之久。此外,低成本和跨廠商互操作性,3毫秒低延遲、100單模式面向高度集成、緊湊的設備,使用一個輕量級連接層(LinkLayer)制、醫(yī)療及運動感應器等廣大新興市場的應用奠定基礎。另外藍牙4.0依舊向下兼容,包含經(jīng)典藍牙技術(shù)規(guī)范和最高速度24Mbps的藍具。FitbitFuelbandMOTACTV,和時尚的基1.3網(wǎng)蜂藍牙4.0開發(fā)平臺介紹網(wǎng)蜂藍牙4.0圖1.4網(wǎng)蜂藍牙4.0板TI圖1.5藍牙4.0板效果功能特點:1、尺寸:3.6*2.75、功耗:接收電流<20mA,發(fā)射電流6、使用2.4G全向天線,可靠傳輸距離達200米。4.0MINI1.64.0MINI模塊功能特點:1、尺寸:2.0*1.55、功耗:接收電流<20mA,發(fā)射電流7、超低功耗,睡眠功耗<10uA,應用于物聯(lián)網(wǎng)智能家居、穿戴設備等嵌入式領(lǐng)域。網(wǎng)蜂藍牙4.01.74.0功能特點:1、底板尺寸:7*5網(wǎng)蜂藍牙4.01.8功能特點:底板尺寸:7*5串口通訊:自帶USB(PL-2303),方便筆記本用戶引腳以及5V/3.3V引腳模塊支持:支持WeBeeCC2540網(wǎng)蜂特色:模塊可以使用7號3.7V鋰電池通過LDO進行穩(wěn)壓供電,此時可以由學習板變身為移動節(jié)點,學習使用2計大大提高了節(jié)點的工作時間和節(jié)約用戶開支。加入鋰電池充電電路,USB即插即充電。非常方便!網(wǎng)蜂藍牙4.0普通底板(PCB開源圖1.9圖 PCB開功能特點:底板尺寸:5*55V引腳以及5V/3.3V引腳功能按鍵:1個復位,1個普通按鍵模塊支持:支持WeBeeCC2540網(wǎng)蜂藍牙 圖 藍牙4.0USB功能特點:1、尺寸:4.5*1.73、4、5、功耗:接收電流<20mA,6、PCB7、SmartRFPacketSnifferBLE能;同時可利用BToolPC上位機。8、設計,兼容所有應用。全網(wǎng)唯一超窄邊框設計USBDongle采用人性化設計,板子寬度縮小達到1.7cm,這使得USBDongle插入電腦USB口后,不會擋住相鄰USB口的位置,而這是其他很多USBDongle所沒有考慮的,特別適合USB接口缺乏的筆記本電腦用戶。網(wǎng)蜂藍牙4.0圖 功能特點:9、尺寸:6*3.311、12、13、功耗:接收電流<20mA,、15、設計,兼容所有應用。全網(wǎng)唯一弧形設計,方便直接應網(wǎng)蜂Keyfob采用人性化設計,帶有扣孔,可以變成隨身產(chǎn)品。集成重力感應傳感器,開發(fā)應用2不誤。ZigBee仿真器1.13功能特點:支持仿真器直接供電;支持IAR調(diào)試、程序、SmartRFSTUDIO和packetsniffer協(xié)議支持TIzigbee系列,如支持TI藍牙4.0網(wǎng)蜂特色:預留 更新接口,允許用戶自行更新USB_bootloader網(wǎng)蜂TICC系列仿真器CC1.14CC功能特點:支持IAR調(diào)試、程序、SmartRFSTUDIO和packetsniffer協(xié)議支持USB更新固件;兼容TI全CC系列CC1110,CC1111CC2430,CC2431CC2510,CC2530,CC2531,CC2533CC2540,CC2541CC2543,CC2544,CC2545CC1120,CC1121,CC1125,CC1175CC1100,CC1101,CC110L,CC113L,CC115LCC2500,CC2520CC8520,CC8521CC8530,網(wǎng)蜂藍牙4.01.15本開發(fā)套件平臺具有一下特點·板上資源豐富,引出全部IO口,更適合學習DIY自己的作品·LED、按鍵應有盡有,符合國內(nèi)學習者的開發(fā)習慣·USB串口電路,方便筆記本以及沒有串口的電腦用戶使用5號3.7V電池供電?!鴥?nèi)首創(chuàng)物聯(lián)網(wǎng)接口。通過配套的網(wǎng)蜂物聯(lián)網(wǎng)盒子可以與嵌入式網(wǎng)關(guān)、ZigBee、RFID、WIFI通1.164.0開發(fā)套件+USB開發(fā)環(huán)境快速建立這里我們使用IAR編譯環(huán)境,IAR開發(fā)最大優(yōu)勢就是能夠直接使用TI公司提供的BLE協(xié)議棧進行開開發(fā)過程中只需要調(diào)用API接口函數(shù)無需編寫底層代碼本選用以下版本進行學習本節(jié)內(nèi)容分兩部分:12、IAR項目工程文件的快速相關(guān)軟件和驅(qū)動安裝第一步:安裝IAR8.10方法 1.171.12后生成License,到License#處:圖1.18碼輸圖1.19IAR1.20IAR圖1.21IAR8.10第二步:TI議棧BLE-CC254x-1.3.2法1.22 1.23BLEBLE協(xié)議棧我們還沒需要用得這么快,在接下來的里,我們先把它當?shù)木彤斪鰪拖聠纹瑱C吧。第三步CCDEBUGGER動圖1.24IAR6連接CC2540開發(fā)板,按下DEBUGGER復位鍵,指示燈亮(表示檢測到開發(fā)板上CC2540,則完成連接工作。圖1.27仿真器識別指示燈第四步:USB轉(zhuǎn)串口驅(qū)動的安裝ZigBee所有開發(fā)板上集成PL2303的USB轉(zhuǎn)串口,我們通過安裝相應的驅(qū)動可通過USB直接開發(fā)調(diào)試。打開PL2303_driver軟件直接進行安(安裝時USBzigbee)1.28PL2303屬性—硬件—設備管理器,查看到USB-to-SerialCom,說明驅(qū)動安裝成功。1.29至此,相關(guān)開發(fā)軟件和仿真器驅(qū)動都安裝好了,接下來我們講一下 編譯環(huán)境中如何快速建立自己的工程和修改相關(guān)配置。IAR工程文件的快速建立選擇默認選項可以了,點擊1.301.31有這個頭文件。然后保存為.c格式到工程文件路徑下。怎么樣,是不是跟KEIL開發(fā)51很相似呢?1.32保存為.c程里單擊右鍵add剛保存的C文件,成功添加后如圖所示。1.33第四步:IARProjectOptions,1.34GeneralOptions選擇Linker—Config—Linkercommandfile選項1.27所示按鈕,導出文件,先向上返回上一級,然后打TexasInstruments件夾,選擇lnk51ew_cc2540F256.xcl(這里是使用CC2540F256。1.35Linker–Config1.36CC2540F256第五步:然后在Debugger選項的Driver里選擇TexasInstruments(使用編程器仿真),下面選擇ioCC2540F256.ddf文件,如圖1.29所示。至此,基圖 Debugger參數(shù)配第六步:Project-Make編譯后顯示00CCDEBUGGER和快捷鍵如圖1.30所示:圖1.38程 圖1.39程序圖1.40調(diào)試。結(jié)束后程序仍然保留在flash內(nèi),相當于燒寫工具。非常方便。1.41全速運行后,LED1使用TISmartRFFlashProgrammer程非常方便。在這里我們補充一下另一種程序燒寫方法,使用TISmartRFFlash 下的Debug—Exe找到生成的.hex文件圖 Options-圖 第二步:TISmartRFFlashProgrammerSystem-on-chip(切記別選錯),添加剛剛生產(chǎn)的.hex文件。點擊程序按鈕,.hex文件變被圖 TISmartRFFlash第2礎實學習本章將能令你快速掌握CC2540的編程方在以后學習完組網(wǎng)及數(shù)據(jù)傳標題:基礎實驗內(nèi)容前言:簡單介紹這個版塊的應用實驗現(xiàn)象:提前讓大家知道此程序?qū)崿F(xiàn)的現(xiàn)象。實驗講解:對寄存器、代碼、編程方法詳細講解,代碼為了方便大家會使用顏分,盡量做到像編譯器一樣。實 :記錄程 到開發(fā)板上 示例點亮第一個前言實驗現(xiàn)象:程序?qū)嶒烖c亮圖 點亮實驗講解:我們先來看看BlueTooth底板的LED部分原理圖:如下圖2.2LED口2-1(CC253xandCC2540User's2-1CC2540IOP1SEL(0:IO口1:P1DIR(0:輸 1:輸 P1INP(0:上拉/下 1:三 出低電平時LED1被點亮。所以配置如下:P1SEL&=~0x01;IOP1DIR|=0x01;//P1_0P1INP&=~0X01;//打開上拉P1SELP1DIR|=0xff;P1INP=0X00;P1DIR|=0x01;//P1_0源程序代碼(全程序描述:點亮#include<ioCC2540.h>#defineLED1 //定義P10LED1制void{P1DIR|= //P1_0定義為輸}void{ //調(diào)用初始化程序LED1 //點亮}實驗2.3按前言相信大家經(jīng)過例1LED實驗CC2540的編程以IAR的編譯方法有一定的了解。我們來講解一下BlueTooth模塊的按鍵實驗,按鍵是實現(xiàn)人機交互必不可少的東西,我們實驗就用來實現(xiàn)按鍵控制LED。實驗現(xiàn)象:依次按下按鍵S1控制LED1的亮和滅2.4S1LED1實驗講解圖 LED、按鍵電路能如表2-2(CC253xandCC2540User'sGuide.pdf)表2- CC2540P0口寄存P1SEL(0:IO1:P1DIR(0:輸 1:輸 P1INP(0:上拉/下 1:三 P1SEL&=~0x01;//作為普通IOP1DIR|=0x01;//P1_0P1INP&=~0X01;//打開上拉P0SEL&= P0DIR&= P0_0P0INP&= P0_0P1SEL=0x00;P1DIR=0xff;P1INP=P1DIR|= //P1_0P0DIR&= 源程序代碼(全程序描述:依次按下S1LED1#include<ioCC2540.h>#defineuintunsignedint#defineucharunsignedchar//定義控制LED燈的端口#defineLED1 //LED1P1.0口控#defineKEY1 //KEY1P0.0控//函數(shù)voidDelayms(uint); voidInitLed(void); void //按鍵初始化uchar //按鍵掃描程序延時函數(shù)voidDelayms(uint {uinti,j;for(j=587;j>0;j--}LED初始化函數(shù)voidInitLed(void){P1DIR| //P1_0定義為輸LED1 //LED1燈熄}/****************************按鍵初始化函數(shù)voidInitKey(){P0SEL&= //設置P00為普通IOP0DIR& //按鍵在P00口,設置為輸入模P0INP& //打開P00拉電阻,不影}/****************************按鍵檢測函數(shù)ucharKeyScan(void){{{while(!KEY1);//松手檢測return //有按鍵按}}return //無按鍵按下}/***************************主函數(shù)voidmain(void){ { //按鍵改變LED狀}}實驗2.6前言中斷在MCU里面應用是非常廣泛的,比如應用在時鐘上的按鍵,我們可以發(fā)資源。也就是具有良好的實時性,本節(jié)將講述CC2540的中斷應用。實驗現(xiàn)象:通過外部中斷方式依次按下按鍵S1控制LED1的亮和2.7實驗講解:我們先來看看BlueTooth底板的KEY和LED部分原理圖:如下圖2.8CC2540的外部中斷我們需要配置三個寄存器P0IENPICTLP0IFGIEN1。CC253xandCC2540User'sGuide.pdf)2-3CC2540P0按照表格寄存器內(nèi)容,我們對LED1和按S1,也就P1.0P0.0口進行配置,當P1.0輸出高電平時LED1被點亮,S1按下時P0.0產(chǎn)生外部中斷從而控制LED1的亮滅。所以配置如下:P1DIR|=0x01;//P1_0P0IEN|= //P00PICTL|= IEN1|=0X20; //允許P0口中斷;P0IFG= //初始化中斷標志源程序代碼(全程序描述:按鍵S1外部中斷方式改變LED1狀#include<ioCC2540.h>#defineuintunsignedint#defineucharunsignedchar//定義控制LED燈的端口#defineLED1 //定義LED1P1.0#defineKEY1 //中斷//函數(shù)voidDelayms(uint); voidInitLed(void); voidKeyInit(); ucharKeyValue=0;//延時函voidDelayms(uint {uintI,j;for(j=587;j>0;j--}LED初始化程序void{P1DIR|0x01/P1_0義為LED1 //LED1燈熄}KEY初始化程序–外部中斷方voidInitKey(){P0IEN|=//P00置為中斷方PICTL|=沿觸IEN1|=P0IFG=//初始化中斷標志}EA=//開總中/****************************中斷處理函數(shù)#pragmavector //格式:#pragmavector向量//緊接著是中斷處理interruptvoid{ //去除抖 //改變LED1狀態(tài)P0IFG //清中斷標志P0IF //清中斷標志}主函voidmain(void){ //等待外部中斷}實驗2.9前言實驗現(xiàn)象:分別利用定時T1T3LED周期性閃爍實驗講解:我們先來看看BlueTooth底板的LED部分原理圖:如下圖圖 LED電定時器T1(查詢方式CC2540T1(16我們需要配置三個寄存器T1CTLT1STATIRCON。IO口配置請留意第一節(jié)內(nèi)容。各寄存器功能如表2-4所示:(詳細參考CC253xandCC2540User'sGuide.pdf)2-4CC25401Timer1Bit3:Bit200:01:810:3211:128Bit1:Bit0 01:自動重裝0X0000- 比較計數(shù)0X0000-11:方Timer1Bit5: 14 13 12 11 10T1LED11S的周期閃爍。具體配置如下:P1DIR|= T1CTL=0x0d; T1STAT=0x21; //通道0,中斷有效源程序代碼(全程序描述:通過定時器T1查詢方式控制LED1周期性閃#include<ioCC2540.h>#defineuintunsignedint#defineucharunsignedchar//定義控制LED燈的端口#defineLED1 //定義LED1為P10口控制//函數(shù)voidDelayms(uintxms); voidInitLed(void); void //初始化定時器//延時函voidDelayms(uint {uintI,j;for(j=587;j>0;j--}//初始化程序voidInitLed(void){P1DIR| //P1_0定義為輸LED1 //LED1燈初始化熄}//定時器初始化void //系統(tǒng)不配置工作時鐘時默認是2分頻,即{T1CTL=0x0d; //128分頻,自動重裝0X0000-0XFFFFT1STAT=0x21; //通道0,中斷有效}/***************************主函數(shù)voidmain(void){uchar { //查詢方{ 1s周期性閃爍{LED1 //LED1閃爍}}}}T=1/(16M/128)*65536=0.5s,Ta=T*count=0.5*2=1S定時器T3(中斷方式2-52-5CC25403Timer3Bit7:Bit5 001:2分 010:4分頻011:100:16101:32110:64Bit4 T3Bit3 溢出中斷掩碼0:關(guān)溢出中 1:開Bit2 清計數(shù) 高電平有Bit1:Bit0:T300:自動重裝0X00-01:DOWNT3CC00X0010:模計數(shù)(0X00T3CC011UP/DOWN0X00T3CC0 0Bit6:T3通道0中斷掩 Bit5:Bit3T30Bit2:T3通道0模式選擇 0:捕 1:比Bit1: 沒有捕 上升沿捕10下降沿捕 邊沿捕T30捕獲/比較值寄存器 1Bit6:T3通道1中斷掩 Bit5:Bit3T31Bit2:T3通道1模式選擇 0:捕 1:比Bit1: 沒有捕 上升沿捕10下降沿捕 邊沿捕T31捕獲/比較值寄存器在此對定時器3做一個簡單介紹:倒計數(shù)到0x00。當使能中斷時,在計數(shù)到0時將產(chǎn)生一個中斷4TxCC0AT1定時器查詢方式的區(qū)別就是此處T3定時器(8位),|=0x08//開溢出中斷=//開總中斷和T3中斷//128分頻&=//自動重裝//啟動65200/256=254EA=//開總中源程序代碼(部分程序描述:利用定時器T3中斷方式控制LED1狀態(tài)周期性改變……voidInitT3(){T3CTL|=;//開溢出中斷T3IE=//開總中斷和T3中斷//128分頻T3CTL&=~0X03; //自動重裝00->0xff65200/256=254(次)T3CTL|=0X10; EA //開總中}//主函數(shù)voidmain(void){ while(1){}中斷函數(shù)#pragmavector=T3_VECTOR interruptvoid{IRCON=//清中斷標志,也可由硬件自動完//254次中LED取反,閃爍一輪(約為0.5時間{count=}實驗圖 LED定時閃哈哈,你看不了閃爍吧。趕快把程序燒進去看看吧前言無論學習哪款MUC串口對于我們進行實驗調(diào)試都是非常方便實用我們可以調(diào)試,許多MUC和PC機通信都是通過串口來進行的。下面一起來學習BlueTooth的串口實驗。實驗現(xiàn)象:實驗將使用BlueTooth開發(fā)板實現(xiàn)3個功能。發(fā)送、收發(fā)、控制LED圖 PL2303USB轉(zhuǎn)串口電串口發(fā)送(oUART0對應的外部設備IO引腳關(guān)系為 UART1對應的外部設備IO引腳關(guān)系為 在CC2540中,USART0和USART1是串行通口,它們能夠分別運行于異步USART模式或者同步SPI模式。兩個USART的功能是一樣的,可以通過設置在單獨的IO引腳上。1、894LSBMSB6DMACC2540配置串口的一般步驟:1、配置IO,使用外部設備此處配置P0_2和P0_3用作串口2、配置相應串口的控制和狀態(tài)寄存器。此處配置UART0的工作寄存器3、配置串口工作的波特率。此處配置為波特率為UTX0IF。各寄存器功能如下表所示:(詳細參考CC253xandCC2540User's2-6CC2540UART控制和狀態(tài)寄存1:使11:USART通用控制寄存器0:SPI1:SPIBit[4-波特率指數(shù) BAUD_E連同BAUD_MBit[7- 起決定了UART的波特率中斷標志中斷標志IRCON2PERCFG= P0SEL= P2DIR&= //P0=串口發(fā)送函數(shù)請參考下面源程序:源程序代碼(全#include<ioCC2540.h>#include<string.h>#defineuintunsignedint#defineucharunsigned//定義LED端口#defineLED1P1_0#defineLED2//函數(shù)voidDelay_ms(uint);voidvoidUard_String(char*Data,intchar //存放"oBlueTooth4.0\n"共19個字符延時函數(shù)voidDelay_ms(uintn){uintI,j;{}}void{P1DIR //P1_0IO方向輸LED1 }串口初始化函數(shù)voidInitUART(void){PERCFG //位置1P0P0SEL //P0_2,P0_3用作串口(外部設備功能P2DIR& //P0先作為U0CSR| //設置為UART方U0GCR|=U0BAUD|= //波特率設為UTX0IF //UART0TX中斷標志初始置位}串口發(fā)送字符串函數(shù)voidUard_String(char*Data,intlen){intj;{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=}}主函數(shù)voidmain(void){CLKCONCMD&=~0x40; while(CLKCONSTA&0x40); //等待晶振穩(wěn)定為32MCLKCONCMD&=~0x47; //設置系統(tǒng)主時鐘頻率為32MHZ//將發(fā)送內(nèi)容copy到Txdata;strcpy(Txdata,"oBlueTooth4.0\n");{`//串口發(fā)送數(shù)據(jù)Uard_String(Txdata,sizeof("oBlueTooth4.0\n")); //標志發(fā)送狀態(tài)}}實驗圖 USB轉(zhuǎn)串口連接方圖2.14上位機接收到發(fā)來的 o串口接收和發(fā)送(send&寄存器配置請參考上方實1的表格。實驗2較實1增加了串口接收功CLKCONCMD&= 置系統(tǒng)時鐘源為32MHZwhile(CLKCONSTA& 待晶振穩(wěn)CLKCONCMD&= 系統(tǒng)主時鐘頻率為PERCFG //位置1P0 //P0_2,P0_3,P0_4,P0_5用作串口,第二功能P2DIR&= //P0作為UART0先U0CSR|= //UARTU0GCR|= //U0GCR與U0BAUD配合U0BAUD|= 率設為UTX0IF //UART0TX斷標志初始置位1(收發(fā)時候|=//允許接|=中斷,接源程序代碼(部分)程序描述:例以abc#方式發(fā)送,#為結(jié)束符,返回abc。波特率:115200bps……/***************************************************************串口初始化函數(shù)voidInitUart(){CLKCONCMD&= 置系統(tǒng)時鐘源為32MHZwhile(CLKCONSTA& 待晶振穩(wěn)CLKCONCMD&= 系統(tǒng)主時鐘頻率為PERCFG //位置1P0P0SEL //P0_2,P0_3,P0_4,P0_5用作串口,第二功能P2DIR&= //P0先作為UART0優(yōu)先U0CSR|= //UARTU0GCR|= //U0GCR與U0BAUD配合U0BAUD|= 率設為UTX0IF //UART0TX斷標志初始置位1(收發(fā)時候U0CSR| //允許接IEN0|= 總中斷,接收}串口發(fā)送字符串函數(shù)voidUart_Send_String(char*Data,intlen){intj;{U0DBUF=while(UTX0IF==0); UTX0IF=0;}}/***************************主函數(shù)voidmain(void){ {if(RXTXflag //接收狀{ if(temp!=0){ //’?!欢x為結(jié)束字Rxdata[datanumber++]=temp;{RXTXflag //進入發(fā)送狀態(tài) //關(guān)指示}temp=}}if(RXTXflag //發(fā)送狀{LED2=U0CSR&=~0x40; Uart_Send_String(Rxdata,datanumber);//發(fā)送已記錄的字符串。U0CSR|=0x40; RXTXflag //恢復到接收狀datanumber=0; //指針歸0LED2=0; //關(guān)發(fā)送指示}}}串口接收一個字數(shù)據(jù)從串口傳至CC2540,進入中斷,將接收到的數(shù)據(jù)賦值給變量temp.#pragmavector=URX0_VECTORinterruptvoid{URX0IF //清中斷標temp=}實驗 2.15發(fā)送:ILoveBlueTooth4.0!#接收到:ILoveBlueTooth4.0UART0-控制程序描述:依次發(fā)送L1#L2#指令分別控制LED1、LED2亮滅,波特率:……//主函數(shù)voidmain(void){ {if(RXTXflag== //接收狀{if(temp!={if((temp!=’#’)&&(datanumber<3))//’?!欢x為結(jié)束字符,最//多能接收50個字Rxdata[datanumber++]=temp;{RXTXflag //進入發(fā)送狀態(tài)}temp=}}if(RXTXflag== //檢測接收到的數(shù)據(jù){switch(Rxdata[1]-48)//很重要,ASICC碼轉(zhuǎn)成數(shù)字,判斷L后面第一個數(shù)

{case1:LED1=~LED1; case2:}RXTXflag=datanumber= //指針歸}}}實驗 2.16L1# 控制(自帶溫度計前言溫度傳感器是我們學習MCU經(jīng)常使用的傳感器,在CC2540里就集成里片的溫度傳感器有人會想到如果發(fā)熱怎么辦?這個你得問問TI的工程師了。而實驗功能:將到內(nèi)部溫度傳感器信息通過串口發(fā)送到上位機實驗講解:CC2540的內(nèi)部溫度檢測需要配置的寄存器比較多,包括溫度和 CCON1,ADCCON3,ADCH,ADCL。各寄存器功能如下表所示:(詳細參考2-7CC2540ADCBit7: 0:AD轉(zhuǎn)換進行 1:AD轉(zhuǎn)換完Bit6: 0: 1啟動AD轉(zhuǎn)換(需要Bit5: 00:外部觸 01 10:T1通道0比較觸 11:手動觸Bit3: 1600:普通模 (13x打開 開啟LFSR時鐘一次 打開10:保留 11:Bit7:Bit6 01:AIN711AIN6-AIN7Bit5: 00:64dec,7位有 01:128dec,9位效10:256dec,10位有 11:512dec,12Bit3:Bit0設置序列AD否則置位后立即開始AD轉(zhuǎn)換,轉(zhuǎn)換完成后自動清0.0000:AIN00001:AIN10010:AIN20100:AIN40101:AIN50110:AIN61000:AIN0-AIN1差 1001:AIN2-AIN3分1010:AIN4-AIN5差 1011:AIN6-AIN7分1100:1101:保留1110:溫度傳感器11111/3Bit7:Bit6 01:AIN711AIN6-AIN7Bit5: 00:64dec,7位有 01:128dec,9位有10:256dec,10位有 11:512dec,12位有Bit3:Bit0AD后立即開始AD轉(zhuǎn)換,轉(zhuǎn)換完成后自動清0.0000: 0001: 0010:AIN20011:0100: 0101: 0110:AIN60111:1000:AIN0-AIN1差 1001:AIN2-AIN3差1010:AIN4-AIN5差 1011:AIN6-AIN7差1100: 111011111/3Bit0:1ADCBit0:1temperaturesensorADADCCON10x33;//TR0=0x01;ATEST=0x01;源程序代碼(全程序描述:通過內(nèi)部AD控制把溫度信息通過#defineuintunsignedint#defineucharunsignedcharvoidmain(){ { //初始化ADC}}實驗圖2.17手摸著CC2540后溫度變前言實驗功能實驗講解系統(tǒng)進入低功耗模式后,維持MAC定時器(T2)的定時。其特性如下:有中斷和DMA觸發(fā)功能在PM2低功耗模式下運行系統(tǒng)電源管理(工作方式如下全部工作,數(shù)字處理模塊正常工作。PM1(16M32M)關(guān)閉,低頻晶振(32.768KRCOSC/XOSC)PM2:低頻晶振(32.768KRCOSC/XOSC)工作,數(shù)字模塊關(guān)閉,系統(tǒng)通過RESET,外部中斷或者睡眠計數(shù)器溢出喚醒。2.18中斷喚(CC253xandCC2540User's2-8CC2540 00全功能模式 SLEEPCMD|= PCON=0x01; //進入睡眠模式,通過中斷打斷PCON=0x00; //系統(tǒng)喚醒,通過中斷打斷源程序代碼(全程序描述:LED2閃爍5次后進入睡眠狀態(tài),通#include<ioCC2540.h>#defineuintunsignedint#defineucharunsigned//定義控制LED燈和按鍵的端口#defineLED2 //定義LED2P11控#defineKEY1//函數(shù)void //延時函void //初始化P1voidSysPowerMode(ucharsel);//系統(tǒng)工作模延時函數(shù)voidDelayms(uint {uintI,j;for(j=587;j>0;j--}//初始化程序voidInitLed(void){P1DIR| //P1_1定義為輸LED2 //LED2燈熄P0INP&= //設置P0口輸入電路模式為上拉/下P0IEN| //P01設置為中斷方PICTL|= 降沿觸}系統(tǒng)工作模式選擇函數(shù)*para1012*modePM0PM1PM2voidSysPowerMode(ucharmode){uchari,j;i=mode;{SLEEPCMD|= //設置系統(tǒng)睡眠模PCON 入睡眠模式通過中斷打}{}

PCON 喚醒中斷}/***************************主函數(shù)voidmain(void){ucharcount= IEN1|=0X20; //開P0口總中斷P0IFG|=0x00; EA={{ //5次閃爍后進入睡眠狀態(tài)//等待按鍵S1中斷喚醒}}}中斷處理函數(shù)-系統(tǒng)喚#pragmavector=P0INT_VECTORinterruptvoid{{P0IFG //清標志}P0IF=SysPowerMode(4);//正常工作模}實驗12.19定時器喚醒CC2540睡眠定時器除了1之外還需要配置的寄存器如下:ST0,ST1,ST2也就是文初提及到24bit2-9所示:(詳細CC253xandCC2540User'sGuide.pdf)2-9CC2540Bit7UINT32sleepTimer=(UINT32)ST1(UINT32)ST2((UINT32)sec ST2=(UINT8)(sleepTimer>>16);ST1=(UINT8)(sleepTimer>>8);ST0=(UINT8)sleepTimer;源程序代碼(部分………系統(tǒng)工作模式選擇函數(shù)*para1012*modePM0PM1PM2voidSysPowerMode(ucharmode){uchari,j;i=mode;{SLEEPCMD|= //設置系統(tǒng)睡眠PCON 睡眠模式過中斷打}{PCON 喚醒通過中斷}//初始化SleepTimer(設定后經(jīng)過指定時間自行喚醒voidInit_SLEEP_TIMER(void){ST2=0X00;ST1=0X0F;ST0=EA //開中STIE=1;//SleepTimerinterruptSTIF0;//SleepTimerinterruptflag還沒處理}設置睡眠時voidSet_ST_Period(uintsec){UINT32sleepTimer=0;sleepTimer|=ST0;sleepTimer|=(UINT32)ST1<<sleepTimer|=(UINT32)ST2<<sleepTimer+=((UINT32)sec*(UINT32)32768);//低頻晶振PM2模式

=(UINT8)(sleepTimer>>=(UINT8)(sleepTimer>>ST0=(UINT8)}//主函數(shù)voidmain(void){uchar {for(i=0;i<6;i閃爍3{} }}//睡眠中斷喚醒#pragmavector=ST_VECTORinterruptvoidST_ISR(void){STIF=0; }實驗 2.20前言看門狗,眼名字。無論在普通的51,還是高級的ARM。都離不開他的身影。一個完整的系統(tǒng)總需要一個看門狗,在你程序跑飛的時候幫你一把,使系統(tǒng)重新進入工作狀態(tài)。它無疑是世界上最忠誠的狗。不過可千萬別忘了喂它。實驗功能:演示打開看門狗后沒有喂狗系統(tǒng)不斷復位的情況。實驗講解:CC2540的看門狗很簡單,只需要配置1個寄存器WDCTL。功能如表2-10(CC253xandCC2540User'sGuide.pdf)2-10CC2540WDCTLBit7:Bit40xA,0x5,Bit3:Bit2WDT00 01IDLE(未使用 看門狗模 11定時器模 001 010.251015.625毫 11 毫WDCTL= IDLEWDCTL|= WDCTL= WDCTL=源程序代碼(全/**************************************/程序描述:打開看門狗后,得記得喂狗,不然系統(tǒng)就會不停地復位了。把喂狗注釋掉觀察LED1現(xiàn)象#include<ioCC2540.h>#defineuintunsignedint#defineucharunsignedchar//定義控制LED燈的端#defineLED1#defineLED2 //定義LED2為P11口控//函數(shù)voidDelayms(uintxms); voidInitLed(void); //延時函voidDelayms(uint {uinti,j;for(j=587;j>0;j--}//初始化程序voidInitLed(void){P1DIR|=0x03;//P1_0、P1_1義為輸LED1 //LED1燈熄LED2 //LED2燈熄}void{WDCTL //這是必須的,打開IDLE才能設置看門WDCTL| //時間間隔一秒,看門狗模}void{WDCTL=WDCTL=}//主函數(shù)voidmain(void){ { //通過注釋測試,觀察LED1,系統(tǒng)在不停復位。 }}實驗2.21第3BLE議棧演標題:實驗內(nèi)容。前言:簡單介紹這個版塊的應用。實驗平臺:硬件和軟件平臺。實驗現(xiàn)象:提前讓大家知道此程序?qū)崿F(xiàn)的現(xiàn)象。實驗步驟:簡單明確的實驗步驟,先操作再講解。實驗講解:對實驗過程、現(xiàn)象及代碼進行解讀。實驗:記錄程序到開發(fā)板上的示例BLE圖 BLE棧架協(xié)議棧包括兩個部分:控制器和主機??刂破骱椭鳈C在標準藍牙BR/EDR設備這兩個部分通常是單獨實現(xiàn)。任何配置文件和應用程序都是建立在GAP和GATT協(xié)議層上。PHY層:1Mbps自適應跳頻 頻移鍵控運行在免證的2.4GHz(scanning(initiating(API外部硬件控制接口,可以通過串口、SPI、USB來實現(xiàn)設備控制。接接觸的主要是GAPGATT這兩個層。協(xié)議棧工作原理介紹工程文件介紹 圖 BLE可看到ProjectsSimpleBLECentralSimpleBLEPeripheralHIDEmuKbdProfile(即通用的協(xié)其中還有4SimpleBLEBroadcasterSimpleBLECentralObserver觀察 ——掃描得到,但不能Peripheral從 ——可,在單個鏈路層中作為從Central主機 OSAL我們當初學習51LED令LED1一秒閃爍一次,LED2二秒閃爍一次。這樣就有2個任務了。再進一nLED,n圖3.3TexasInstruments\BLE-CC254x-\ble\SimpleBLEPeripheral\CC2540DBSampleApp.eww圖3.4打開后在IAR左邊可看到左邊的工程 如圖3.5所示:3.5任何程序都在main函數(shù)開始運行,BLE也不例外。打開覽一下main函數(shù)代碼:3.6* * Startof* * int{/*Initializehardware //初始化系統(tǒng)時鐘//InitializeboardInitBoard(OB_COLD //初始化I/OLEDTimer/*InitialzetheHALdriver //初始化各硬件模/*InitializeNVsystem Flash存儲/*Initializetheoperatingsystem 化操作系/*Enableinterrupts 全部中//Finalboard 始化按#ifdefined(POWER_SAVING/*StartOSALNoReturnfromhere執(zhí)行操作系統(tǒng),進去后不會返return}我們大概看了上面的代碼后,可能感覺很多函數(shù)不認識。沒關(guān)系,代碼很有條理性,開始先執(zhí)行初始化工作。包括硬件、GATT、GAP層、任務等的初始化。然osal_start_system();操作系統(tǒng)。進去后可不會回來了。在這里,我們重點了解2個函數(shù):初始化操作系統(tǒng)運行操作系**怎么看?在函數(shù)名上單擊右鍵——gotodefinitionof…,便可以進入函數(shù)。1、我們先來看osal_init_system();系統(tǒng)初始化函數(shù),進入函數(shù)。發(fā)現(xiàn)里面有6個圖3.7終于到盡頭了。這一下子代碼更不熟悉了。不過我們可以發(fā)現(xiàn),函數(shù)好像能在taskID這個變量上找到一定的規(guī)律。請看下面程序注釋。圖 voidosalInitTasks(void{uint8taskID=//分配內(nèi)存,返回指向緩沖區(qū)的tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16) //設置所分配的內(nèi)存空間單元值為osal_memset(tasksEvents,0,(sizeof(uint16) 務優(yōu)先級由高向低依次排列,高優(yōu)先級對應taskID的值反而/*HalTask/*HCITask#ifdefined(OSAL_CBTIMER_NUM_TASKS/*CallbackTimerTasksosal_CbTimerInit(taskIDtaskID+=/*GAPTask/*ProfilesGAPRole_Init(taskID++ /*ApplicationSimpleBLEPeripheral_Init(taskID //應用初始化,重45.第9-41行:BLE中各層的任務添加,越底層優(yōu)先級越高第44行:用戶任務初始化,用戶可根據(jù)要求定制需要的功能我們可以這樣理解,函數(shù)對taskID個東西進行初始化,每初始化一個,taskID++。TI公司協(xié)議棧已完成的東西。至此,osal_init_system();大概了解完畢。2再來看第二個函數(shù)osal_start_system();運行操作系統(tǒng)。同gotodefinition的方法進入該函數(shù)。再進入osal_run_system()圖 osal_start_system()函圖 * *** ThisfunctionwillmakeonepassthroughtheOSALtaskEvents andcallthetask_event_processor()functionforthefirsttask isfoundwithatleastoneeventpending.Ifthereareno events(alltasks),thisfunctionputstheprocessorinto** ** 翻譯:這個是任務系統(tǒng)輪詢的主要函數(shù)。他會查找發(fā)生的事件然后調(diào)用相應的事件執(zhí)行函數(shù)。如果沒有事件登記要發(fā)生,那么就進入睡眠模式。這個函數(shù)是不會返回的。voidosal_run_system(void{uint8idx=#ifndef//這里是在掃描哪個事件被觸發(fā)了,然后置相應的標志doif //Taskishighestprioritythatis{ 得到待處理的最高優(yōu)先級任務索引號 }while(++idx< if(idx {uint16halIntState_t //進入臨界區(qū),保events //提取需要處理的任務中的事件tasksEvents[idx]= //清除本次任務的事HAL_EXIT_CRITICAL_SECTION(intState);//退出臨界activeTaskID=events=(tasksArr[idx])(idx,events);//通過指針調(diào)用任務處理函關(guān) //進入臨界區(qū)Addbackunprocessedeventstothecurrenttask.保存未處理的tasksEvents[idx]|=HAL_EXIT_CRITICAL_SECTION(intState);//退出臨界 #ifdefined(POWER_SAVING //Completepassthroughalltaskeventswithno{ //Puttheprocessor/systeminto 58./*Yieldincasecooperativeschedulingisbeingused.#ifdefined(configUSE_PREEMPTION)&&(configUSE_PREEMPTION== 65.66.我們來關(guān)注一下events=tasksEvents[idx];tasksEvents[idx]數(shù)組定義,如下圖,發(fā)現(xiàn)恰好在剛剛osalInitTasks(void)函數(shù)上面。而且taskID一一對應。這就是初始化與調(diào)用的關(guān)系。taskID把任務聯(lián)系起來了。圖 關(guān)于協(xié)議棧的介紹先到這里,其他會在以后的實例中結(jié)合程序來介紹,這樣會更直觀。大家可以根據(jù)需要再熟悉一下函數(shù)里面的內(nèi)容。游一下這個代碼的海洋。我們可以總結(jié)出一個協(xié)議棧簡單的工作流程,如3.12所示。始始束協(xié)議棧簡圖 BLE棧的工作流協(xié)議棧的串口實驗前言串口作為一種最簡單的協(xié)議棧和調(diào)試者接口,在BLE的學習和應用過程中具有非常重要的作用。所以,在進行藍牙無線發(fā)送之前,我們需要先學習在協(xié)議棧里加入串口功能。WeBeeCC2540BLE協(xié)議棧(BLE-CC254x-3CC2540串口發(fā)實驗現(xiàn)象 WEBEE”給電腦串口調(diào)試助手打印出來。整個例程很簡單,兩步就能實現(xiàn)串口的發(fā)送,步驟如下1、串口初2、串口發(fā)送打開BLE下的:Projects\ble\SimpleBLEPeripheral\CC2540DB里面的SimpleBLEPeripheral.eww工程。這次試驗我們直接基于協(xié)議棧的SimpleBLEPeripheral工程來進行的。經(jīng)過上節(jié)的講解,我們對工程有初步的了解,下面主要在圖3.14第一步:串口初始化workspaceNPInpi.c圖 npi.c文{//configure = = =uartConfig.flowControlThreshold= = = = = //start//Note:AssumesnoissueopeningUART 21.第7uartConfig.baudRate是配置波特率為NPI_UART_BR,進入NPI_UART_BR,可看到具體的波特率3.16115200gotodefinitionofHAL_UART_BR_115200選擇其它設置:3.17注意:2根線的串口通訊(TTL電平模式)連接務必關(guān)流控,不然是收3.18option——C/C++CompilerPreprocessor3.19化;我們將在simpleBLEPeripheral.c文件中的初始化函數(shù)voidSimpleBLEPeripheral_Init(uint8task_id)中調(diào)用這個函數(shù)。找到voidSimpleBLEPeripheral_Init(uint8task_id),在里面中添加3.20第二步:串口發(fā)送碼后面加入一條上電提示oWorld的語句。如圖3.21所示: 圖3.21"3.223.23CC2540至此,可通過調(diào)用NPI_WriteTransport(uint8*,uint16)實現(xiàn)串口發(fā)送功能串口接實驗現(xiàn)象模塊返回串口接收到的數(shù)據(jù)給電腦串口調(diào)試助手打印出來。整個實驗在協(xié)議棧(B-C254-1.3.)中進行。實驗講解整個例程分為以下步驟: =的回調(diào)函數(shù)。在SimpleBLEPeripheral.c中傳入以下串口回調(diào)函數(shù):圖3.24串口回調(diào)函3.25staticvoidNpiSerialCallback(uint8port,uint8events{uint8numBytes=uint8ifevents& //串口有數(shù){numBytes { 18. /*UARTEvents #define #define #define #define #define注意:staticvoidNpiSerialCallbackuint8portuint8events需要圖3.26回調(diào)函 運行3.27提示:TI的例程是利用LCD來輸出信息的,我們沒有LCD所以可以利用UART來輸出信息。 找到HAL\Target\CC2540EB\Drivers\hal_lcd.c文件打開,并 NPI_WriteTransport3.28HalLcdWriteString3.29hal_lcd.c#include3.30#include"npi3.313.32協(xié)議棧的按鍵實驗前言BLE協(xié)議棧中提供的按鍵驅(qū)動是針對TI不同的硬件平臺的,在SimpleBLECentral5向搖桿按鍵,SimpleBLEPeripheralKeyFob硬件平臺的按實現(xiàn)平臺:WeBeeCC2540模塊及功能底板實驗現(xiàn)象按下S1或S2按鍵,串口返回對應的按鍵號。這個實驗在協(xié)議棧(BLE-CC254x-1.3.2)中進行。實驗講解網(wǎng)蜂的按鍵驅(qū)動對用于工程中的CC2540_MINIDK平臺,工程是通過宏定義來SimpleBLECentral首先我們要清楚SimpleBLECentralCC2540_MINIDK硬件平臺的,如果直接在預編譯中直接添加CC2540_MINIDK,則會把CC2540_MINIDK平打開Projects\ble\SimpleBLECentral\CC2540DB里面的SimpleBLECentral工程,先在預編譯中加入網(wǎng)蜂平臺的宏定義WEBEE_BOARD。3.34WEBEE_BOARDCC2540_MINIDKhal_key.c文件中按鍵的配置和操作,這里我們直接在hal_key.c文件中搜索CC2540_MINIDK來進行快速修改。3.353.36#ifdefined(CC2540_MINIDK#ifdefined(CC2540_MINIDK)||3.371圖 按鍵修改第23hal_key.c254行,voidHalKeyConfig(boolinterruptEnable,halKeyCBack_tcback)3.3934hal_key.c312行,voidHalKeyConfig(boolinterruptEnable,halKeyCBack_tcback)3.4043.4153.4263.437(3.4489、第九處為hal_key.c文件582行,HAL_ISR_FUNCTION(P0INT_VECTOR圖 按鍵修改第910hal_key.c595行,HAL_ISR_FUNCTION(halKeyPort0Isr,P0INT_VECTOR)3.461011hal_key.c610行,HAL_ISR_FUNCTION(halKeyPort2Isr,P2INT_VECTOR)3.4711SimpleBLECentral工程中會傳遞到SimpleBLECentral_ProcessEvent(uint8task_id,uint16events)中去。simpleBLECentral.cSimpleBLECentral_ProcessEvent(uint8task_id,uint16events)SYS_EVENT_MSG事件中的,所以再進入simpleBLECentral_ProcessOSAg((osal_event_hdr_t*)pMsg)函數(shù)中來3.483.49在simpleBLECentral_ProcessOSA g((osal_event_hdr_t*)pMsg)函數(shù)中終于看到了按鍵處理函數(shù) *)pMsg)->state,((keyChange_t*)pMsg)->keys圖 staticvoidsimpleBLECentral_HandleKeys(uint8shift,uint8keys),因為我們只有兩個按鍵,所以修改成:staticvoidsimpleBLECentral_HandleKeys(uint8shift,uint8keys{ //Intentionallyunreferencedif(keys&HAL_KEY_SW_1{ //S1 if(keys&HAL_KEY_SW_2{ //S2 13.3.51SimpleBLEPeripheral同SimpleBLECentral工程一樣先在預編譯中加入網(wǎng)蜂平臺的宏定義WEBEE_BOARD,hal_key.c文件已經(jīng)在上部分修改好了,接下來主要是在SimpleBLEPeripheral工程中按鍵任務傳遞的處理過程的修改。打開Projects\ble\SimpleBLECentral\CC2540DB里面的SimpleBLECentral工程,找到SimpleBLEPeripheral.c文件下的按鍵處理程序:添們的平臺#ifdefined(CC2540_MINIDK)||(WEBEE_BOARD3.52simpleBLEPeripheral_HandleKeysuint8shiftuint8keys在SimpleBLEPeripheral_Init(uint8task_id)中按鍵任務圖3.53按鍵任中,傳遞過程可以參照SimpleBLECentral工程中的講解。接下來我們直接進行修改,就不過多分析;修改staticvoidsimpleBLEPeripheral_ProcessOSAg(osal_event_hdr_t*pMsg)圖 g(osal_event_hdr_t*pMsgstaticvoidsimpleBLEPeripheral_HandleKeysuint8shiftuint8keys圖 simpleBLEPeripheral_HandleKeys(uint8shift,uint8keys至此SimpleBLEPeripheral工程修改完成,編譯并打開打開串口調(diào)試3.56藍牙無線數(shù)據(jù)傳輸入前言想要理解整個協(xié)議棧是比較難的,在這里通過TI提供的例程快速進行藍牙數(shù)據(jù)的傳輸,對BLE有一個簡單的了解。實現(xiàn)平臺:WeBeeCC2540模塊及功能底3.57CC2540實驗現(xiàn)象兩個模塊建立連接并進行簡單的數(shù)據(jù)傳輸,整個過程可通過串口觀察到模塊的連接狀況和數(shù)據(jù)的變化。這個實驗在協(xié)議棧(B-C254-1..)中進行。實驗講解整個實驗用到兩個模塊,一個主機和一個從機,重點為下面兩個步驟:1、建立連2、數(shù)據(jù)傳輸測試部分代碼簡析在實現(xiàn)數(shù)據(jù)傳輸之前我們簡單介紹一下SimpleBLECentral 的SimpleBLEPeripheral.eww,可以看到一下工程結(jié)構(gòu):圖3.58接下來主要關(guān)注以下幾個函數(shù)圖 3.60taskArr圖 圖 圖 事件定SimpleBLEPeripheral_Inituint8task_idGAPGATT進行配置,最SimpleBLEPeripheral_ProcessEvent(uint8task_iduint16events包含對傳遞進staticvoid gaprole_States_tnewState圖 (5)staticvoidsimpleProfileChangeCB(uint8paramID——simpleProfile特征值改變時的回調(diào)函數(shù)(simpleProfile在后面會介紹圖 simpleProfileChangeCB(uint8paramID建立連voidSimpleBLEPeripheral_Init(uint8task_id,這里我們進3.66CC2540_MINIDKGAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8),&initial_advertising_enable)進行設置。功能,直接看按鍵HAL_KEY_SW_2處理程序:3.67Peripheral圖 廣播狀態(tài)切ifgapProfileStateGAPROLE_CONNECTED {uint8uint8if(current_adv_enabled_status==FALSE{new_adv_enabled_status= {new_adv_enabled_status= GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8圖3.69圖 廣播狀態(tài)切2、CentralscanningandSimpleBLECentral工程中,同樣是在voidSimpleBLECentral_Init(uint8task_idGAP和GATTTI的板,是通過按鍵來實現(xiàn)uint8keys)if(keys&HAL_KEY_UP{Startorstop {if(!simpleBLEScanning{simpleBLEScanRes= { simpleBLECharHdl!=0simpleBLEProcedureInProgress==FALSE 29.if(keys&HAL_KEY_LEFT{Displaydiscovery if(!simpleBLEScanning&&simpleBLEScanRes>0{//Incrementindexofcurrentresult(withif(simpleBLES

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論