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

下載本文檔

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

文檔簡介

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

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

PCON 喚醒中斷}/***************************主函數(shù)voidmain(void){ucharcount= IEN1|=0X20; //開P0口總中斷P0IFG|=0x00; EA={{ //5次閃爍后進(jìn)入睡眠狀態(tài)//等待按鍵S1中斷喚醒}}}中斷處理函數(shù)-系統(tǒng)喚#pragmavector=P0INT_VECTORinterruptvoid{{P0IFG //清標(biāo)志}P0IF=SysPowerMode(4);//正常工作模}實(shí)驗(yàn)12.19定時(shí)器喚醒CC2540睡眠定時(shí)器除了1之外還需要配置的寄存器如下:ST0,ST1,ST2也就是文初提及到24bit2-9所示:(詳細(xì)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|= //設(shè)置系統(tǒng)睡眠PCON 睡眠模式過中斷打}{PCON 喚醒通過中斷}//初始化SleepTimer(設(shè)定后經(jīng)過指定時(shí)間自行喚醒voidInit_SLEEP_TIMER(void){ST2=0X00;ST1=0X0F;ST0=EA //開中STIE=1;//SleepTimerinterruptSTIF0;//SleepTimerinterruptflag還沒處理}設(shè)置睡眠時(shí)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; }實(shí)驗(yàn) 2.20前言看門狗,眼名字。無論在普通的51,還是高級(jí)的ARM。都離不開他的身影。一個(gè)完整的系統(tǒng)總需要一個(gè)看門狗,在你程序跑飛的時(shí)候幫你一把,使系統(tǒng)重新進(jìn)入工作狀態(tài)。它無疑是世界上最忠誠的狗。不過可千萬別忘了喂它。實(shí)驗(yàn)功能:演示打開看門狗后沒有喂狗系統(tǒng)不斷復(fù)位的情況。實(shí)驗(yàn)講解:CC2540的看門狗很簡單,只需要配置1個(gè)寄存器WDCTL。功能如表2-10(CC253xandCC2540User'sGuide.pdf)2-10CC2540WDCTLBit7:Bit40xA,0x5,Bit3:Bit2WDT00 01IDLE(未使用 看門狗模 11定時(shí)器模 001 010.251015.625毫 11 毫WDCTL= IDLEWDCTL|= WDCTL= WDCTL=源程序代碼(全/**************************************/程序描述:打開看門狗后,得記得喂狗,不然系統(tǒng)就會(huì)不停地復(fù)位了。把喂狗注釋掉觀察LED1現(xiàn)象#include<ioCC2540.h>#defineuintunsignedint#defineucharunsignedchar//定義控制LED燈的端#defineLED1#defineLED2 //定義LED2為P11口控//函數(shù)voidDelayms(uintxms); voidInitLed(void); //延時(shí)函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才能設(shè)置看門WDCTL| //時(shí)間間隔一秒,看門狗模}void{WDCTL=WDCTL=}//主函數(shù)voidmain(void){ { //通過注釋測(cè)試,觀察LED1,系統(tǒng)在不停復(fù)位。 }}實(shí)驗(yàn)2.21第3BLE議棧演標(biāo)題:實(shí)驗(yàn)內(nèi)容。前言:簡單介紹這個(gè)版塊的應(yīng)用。實(shí)驗(yàn)平臺(tái):硬件和軟件平臺(tái)。實(shí)驗(yàn)現(xiàn)象:提前讓大家知道此程序?qū)崿F(xiàn)的現(xiàn)象。實(shí)驗(yàn)步驟:簡單明確的實(shí)驗(yàn)步驟,先操作再講解。實(shí)驗(yàn)講解:對(duì)實(shí)驗(yàn)過程、現(xiàn)象及代碼進(jìn)行解讀。實(shí)驗(yàn):記錄程序到開發(fā)板上的示例BLE圖 BLE棧架協(xié)議棧包括兩個(gè)部分:控制器和主機(jī)??刂破骱椭鳈C(jī)在標(biāo)準(zhǔn)藍(lán)牙BR/EDR設(shè)備這兩個(gè)部分通常是單獨(dú)實(shí)現(xiàn)。任何配置文件和應(yīng)用程序都是建立在GAP和GATT協(xié)議層上。PHY層:1Mbps自適應(yīng)跳頻 頻移鍵控運(yùn)行在免證的2.4GHz(scanning(initiating(API外部硬件控制接口,可以通過串口、SPI、USB來實(shí)現(xiàn)設(shè)備控制。接接觸的主要是GAPGATT這兩個(gè)層。協(xié)議棧工作原理介紹工程文件介紹 圖 BLE可看到ProjectsSimpleBLECentralSimpleBLEPeripheralHIDEmuKbdProfile(即通用的協(xié)其中還有4SimpleBLEBroadcasterSimpleBLECentralObserver觀察 ——掃描得到,但不能Peripheral從 ——可,在單個(gè)鏈路層中作為從Central主機(jī) OSAL我們當(dāng)初學(xué)習(xí)51LED令LED1一秒閃爍一次,LED2二秒閃爍一次。這樣就有2個(gè)任務(wù)了。再進(jìn)一nLED,n圖3.3TexasInstruments\BLE-CC254x-\ble\SimpleBLEPeripheral\CC2540DBSampleApp.eww圖3.4打開后在IAR左邊可看到左邊的工程 如圖3.5所示:3.5任何程序都在main函數(shù)開始運(yùn)行,BLE也不例外。打開覽一下main函數(shù)代碼:3.6* * Startof* * int{/*Initializehardware //初始化系統(tǒng)時(shí)鐘//InitializeboardInitBoard(OB_COLD //初始化I/OLEDTimer/*InitialzetheHALdriver //初始化各硬件模/*InitializeNVsystem Flash存儲(chǔ)/*Initializetheoperatingsystem 化操作系/*Enableinterrupts 全部中//Finalboard 始化按#ifdefined(POWER_SAVING/*StartOSALNoReturnfromhere執(zhí)行操作系統(tǒng),進(jìn)去后不會(huì)返return}我們大概看了上面的代碼后,可能感覺很多函數(shù)不認(rèn)識(shí)。沒關(guān)系,代碼很有條理性,開始先執(zhí)行初始化工作。包括硬件、GATT、GAP層、任務(wù)等的初始化。然osal_start_system();操作系統(tǒng)。進(jìn)去后可不會(huì)回來了。在這里,我們重點(diǎn)了解2個(gè)函數(shù):初始化操作系統(tǒng)運(yùn)行操作系**怎么看?在函數(shù)名上單擊右鍵——gotodefinitionof…,便可以進(jìn)入函數(shù)。1、我們先來看osal_init_system();系統(tǒng)初始化函數(shù),進(jìn)入函數(shù)。發(fā)現(xiàn)里面有6個(gè)圖3.7終于到盡頭了。這一下子代碼更不熟悉了。不過我們可以發(fā)現(xiàn),函數(shù)好像能在taskID這個(gè)變量上找到一定的規(guī)律。請(qǐng)看下面程序注釋。圖 voidosalInitTasks(void{uint8taskID=//分配內(nèi)存,返回指向緩沖區(qū)的tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16) //設(shè)置所分配的內(nèi)存空間單元值為osal_memset(tasksEvents,0,(sizeof(uint16) 務(wù)優(yōu)先級(jí)由高向低依次排列,高優(yōu)先級(jí)對(duì)應(yīng)taskID的值反而/*HalTask/*HCITask#ifdefined(OSAL_CBTIMER_NUM_TASKS/*CallbackTimerTasksosal_CbTimerInit(taskIDtaskID+=/*GAPTask/*ProfilesGAPRole_Init(taskID++ /*ApplicationSimpleBLEPeripheral_Init(taskID //應(yīng)用初始化,重45.第9-41行:BLE中各層的任務(wù)添加,越底層優(yōu)先級(jí)越高第44行:用戶任務(wù)初始化,用戶可根據(jù)要求定制需要的功能我們可以這樣理解,函數(shù)對(duì)taskID個(gè)東西進(jìn)行初始化,每初始化一個(gè),taskID++。TI公司協(xié)議棧已完成的東西。至此,osal_init_system();大概了解完畢。2再來看第二個(gè)函數(shù)osal_start_system();運(yùn)行操作系統(tǒng)。同gotodefinition的方法進(jìn)入該函數(shù)。再進(jìn)入osal_run_system()圖 osal_start_system()函圖 * *** ThisfunctionwillmakeonepassthroughtheOSALtaskEvents andcallthetask_event_processor()functionforthefirsttask isfoundwithatleastoneeventpending.Ifthereareno events(alltasks),thisfunctionputstheprocessorinto** ** 翻譯:這個(gè)是任務(wù)系統(tǒng)輪詢的主要函數(shù)。他會(huì)查找發(fā)生的事件然后調(diào)用相應(yīng)的事件執(zhí)行函數(shù)。如果沒有事件登記要發(fā)生,那么就進(jìn)入睡眠模式。這個(gè)函數(shù)是不會(huì)返回的。voidosal_run_system(void{uint8idx=#ifndef//這里是在掃描哪個(gè)事件被觸發(fā)了,然后置相應(yīng)的標(biāo)志doif //Taskishighestprioritythatis{ 得到待處理的最高優(yōu)先級(jí)任務(wù)索引號(hào) }while(++idx< if(idx {uint16halIntState_t //進(jìn)入臨界區(qū),保events //提取需要處理的任務(wù)中的事件tasksEvents[idx]= //清除本次任務(wù)的事HAL_EXIT_CRITICAL_SECTION(intState);//退出臨界activeTaskID=events=(tasksArr[idx])(idx,events);//通過指針調(diào)用任務(wù)處理函關(guān) //進(jì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一一對(duì)應(yīng)。這就是初始化與調(diào)用的關(guān)系。taskID把任務(wù)聯(lián)系起來了。圖 關(guān)于協(xié)議棧的介紹先到這里,其他會(huì)在以后的實(shí)例中結(jié)合程序來介紹,這樣會(huì)更直觀。大家可以根據(jù)需要再熟悉一下函數(shù)里面的內(nèi)容。游一下這個(gè)代碼的海洋。我們可以總結(jié)出一個(gè)協(xié)議棧簡單的工作流程,如3.12所示。始始束協(xié)議棧簡圖 BLE棧的工作流協(xié)議棧的串口實(shí)驗(yàn)前言串口作為一種最簡單的協(xié)議棧和調(diào)試者接口,在BLE的學(xué)習(xí)和應(yīng)用過程中具有非常重要的作用。所以,在進(jìn)行藍(lán)牙無線發(fā)送之前,我們需要先學(xué)習(xí)在協(xié)議棧里加入串口功能。WeBeeCC2540BLE協(xié)議棧(BLE-CC254x-3CC2540串口發(fā)實(shí)驗(yàn)現(xiàn)象 WEBEE”給電腦串口調(diào)試助手打印出來。整個(gè)例程很簡單,兩步就能實(shí)現(xiàn)串口的發(fā)送,步驟如下1、串口初2、串口發(fā)送打開BLE下的:Projects\ble\SimpleBLEPeripheral\CC2540DB里面的SimpleBLEPeripheral.eww工程。這次試驗(yàn)我們直接基于協(xié)議棧的SimpleBLEPeripheral工程來進(jìn)行的。經(jīng)過上節(jié)的講解,我們對(duì)工程有初步的了解,下面主要在圖3.14第一步:串口初始化workspaceNPInpi.c圖 npi.c文{//configure = = =uartConfig.flowControlThreshold= = = = = //start//Note:AssumesnoissueopeningUART 21.第7uartConfig.baudRate是配置波特率為NPI_UART_BR,進(jìn)入NPI_UART_BR,可看到具體的波特率3.16115200gotodefinitionofHAL_UART_BR_115200選擇其它設(shè)置:3.17注意:2根線的串口通訊(TTL電平模式)連接務(wù)必關(guān)流控,不然是收3.18option——C/C++CompilerPreprocessor3.19化;我們將在simpleBLEPeripheral.c文件中的初始化函數(shù)voidSimpleBLEPeripheral_Init(uint8task_id)中調(diào)用這個(gè)函數(shù)。找到voidSimpleBLEPeripheral_Init(uint8task_id),在里面中添加3.20第二步:串口發(fā)送碼后面加入一條上電提示oWorld的語句。如圖3.21所示: 圖3.21"3.223.23CC2540至此,可通過調(diào)用NPI_WriteTransport(uint8*,uint16)實(shí)現(xiàn)串口發(fā)送功能串口接實(shí)驗(yàn)現(xiàn)象模塊返回串口接收到的數(shù)據(jù)給電腦串口調(diào)試助手打印出來。整個(gè)實(shí)驗(yàn)在協(xié)議棧(B-C254-1.3.)中進(jìn)行。實(shí)驗(yàn)講解整個(gè)例程分為以下步驟: =的回調(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)函 運(yùn)行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é)議棧的按鍵實(shí)驗(yàn)前言BLE協(xié)議棧中提供的按鍵驅(qū)動(dòng)是針對(duì)TI不同的硬件平臺(tái)的,在SimpleBLECentral5向搖桿按鍵,SimpleBLEPeripheralKeyFob硬件平臺(tái)的按實(shí)現(xiàn)平臺(tái):WeBeeCC2540模塊及功能底板實(shí)驗(yàn)現(xiàn)象按下S1或S2按鍵,串口返回對(duì)應(yīng)的按鍵號(hào)。這個(gè)實(shí)驗(yàn)在協(xié)議棧(BLE-CC254x-1.3.2)中進(jìn)行。實(shí)驗(yàn)講解網(wǎng)蜂的按鍵驅(qū)動(dòng)對(duì)用于工程中的CC2540_MINIDK平臺(tái),工程是通過宏定義來SimpleBLECentral首先我們要清楚SimpleBLECentralCC2540_MINIDK硬件平臺(tái)的,如果直接在預(yù)編譯中直接添加CC2540_MINIDK,則會(huì)把CC2540_MINIDK平打開Projects\ble\SimpleBLECentral\CC2540DB里面的SimpleBLECentral工程,先在預(yù)編譯中加入網(wǎng)蜂平臺(tái)的宏定義WEBEE_BOARD。3.34WEBEE_BOARDCC2540_MINIDKhal_key.c文件中按鍵的配置和操作,這里我們直接在hal_key.c文件中搜索CC2540_MINIDK來進(jìn)行快速修改。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工程中會(huì)傳遞到SimpleBLECentral_ProcessEvent(uint8task_id,uint16events)中去。simpleBLECentral.cSimpleBLECentral_ProcessEvent(uint8task_id,uint16events)SYS_EVENT_MSG事件中的,所以再進(jìn)入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),因?yàn)槲覀冎挥袃蓚€(gè)按鍵,所以修改成:staticvoidsimpleBLECentral_HandleKeys(uint8shift,uint8keys{ //Intentionallyunreferencedif(keys&HAL_KEY_SW_1{ //S1 if(keys&HAL_KEY_SW_2{ //S2 13.3.51SimpleBLEPeripheral同SimpleBLECentral工程一樣先在預(yù)編譯中加入網(wǎng)蜂平臺(tái)的宏定義WEBEE_BOARD,hal_key.c文件已經(jīng)在上部分修改好了,接下來主要是在SimpleBLEPeripheral工程中按鍵任務(wù)傳遞的處理過程的修改。打開Projects\ble\SimpleBLECentral\CC2540DB里面的SimpleBLECentral工程,找到SimpleBLEPeripheral.c文件下的按鍵處理程序:添們的平臺(tái)#ifdefined(CC2540_MINIDK)||(WEBEE_BOARD3.52simpleBLEPeripheral_HandleKeysuint8shiftuint8keys在SimpleBLEPeripheral_Init(uint8task_id)中按鍵任務(wù)圖3.53按鍵任中,傳遞過程可以參照SimpleBLECentral工程中的講解。接下來我們直接進(jìn)行修改,就不過多分析;修改staticvoidsimpleBLEPeripheral_ProcessOSAg(osal_event_hdr_t*pMsg)圖 g(osal_event_hdr_t*pMsgstaticvoidsimpleBLEPeripheral_HandleKeysuint8shiftuint8keys圖 simpleBLEPeripheral_HandleKeys(uint8shift,uint8keys至此SimpleBLEPeripheral工程修改完成,編譯并打開打開串口調(diào)試3.56藍(lán)牙無線數(shù)據(jù)傳輸入前言想要理解整個(gè)協(xié)議棧是比較難的,在這里通過TI提供的例程快速進(jìn)行藍(lán)牙數(shù)據(jù)的傳輸,對(duì)BLE有一個(gè)簡單的了解。實(shí)現(xiàn)平臺(tái):WeBeeCC2540模塊及功能底3.57CC2540實(shí)驗(yàn)現(xiàn)象兩個(gè)模塊建立連接并進(jìn)行簡單的數(shù)據(jù)傳輸,整個(gè)過程可通過串口觀察到模塊的連接狀況和數(shù)據(jù)的變化。這個(gè)實(shí)驗(yàn)在協(xié)議棧(B-C254-1..)中進(jìn)行。實(shí)驗(yàn)講解整個(gè)實(shí)驗(yàn)用到兩個(gè)模塊,一個(gè)主機(jī)和一個(gè)從機(jī),重點(diǎn)為下面兩個(gè)步驟:1、建立連2、數(shù)據(jù)傳輸測(cè)試部分代碼簡析在實(shí)現(xiàn)數(shù)據(jù)傳輸之前我們簡單介紹一下SimpleBLECentral 的SimpleBLEPeripheral.eww,可以看到一下工程結(jié)構(gòu):圖3.58接下來主要關(guān)注以下幾個(gè)函數(shù)圖 3.60taskArr圖 圖 圖 事件定SimpleBLEPeripheral_Inituint8task_idGAPGATT進(jìn)行配置,最SimpleBLEPeripheral_ProcessEvent(uint8task_iduint16events包含對(duì)傳遞進(jìn)staticvoid gaprole_States_tnewState圖 (5)staticvoidsimpleProfileChangeCB(uint8paramID——simpleProfile特征值改變時(shí)的回調(diào)函數(shù)(simpleProfile在后面會(huì)介紹圖 simpleProfileChangeCB(uint8paramID建立連voidSimpleBLEPeripheral_Init(uint8task_id,這里我們進(jìn)3.66CC2540_MINIDKGAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8),&initial_advertising_enable)進(jìn)行設(shè)置。功能,直接看按鍵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的板,是通過按鍵來實(shí)現(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論