NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止
首先要下載開(kāi)發(fā)使用的IDE:MCUXpresso IDE
下載鏈接:
進(jìn)入nxp的官網(wǎng),搜索KW38
向下翻看,找到Xpresso,點(diǎn)擊進(jìn)入
習(xí)慣使用IAR開(kāi)發(fā)的同學(xué)也可以下IAR版本,這里以Xpresso為例
下載好后安裝,一路默認(rèn)下去就行了 ,安裝后打開(kāi)。
在下面的窗口,選擇installed SDKs,然后選擇右邊的藍(lán)框X
找到frdmkw38,選中,點(diǎn)擊install下載SDK,我這里已經(jīng)下載好了所以install是灰的,只能Uninstall卸載
下載好后,在主界面看看有沒(méi)有顯示出來(lái)
接下來(lái)點(diǎn)擊主界面左下角的import SDK example(s)
選中KW38,點(diǎn)擊下一步
選擇wireless_examples–>bluetooth–>adv_ext_peripheral–>freertos–>adv_ext_peripheral_freertos,點(diǎn)擊下一步(我這里是添加過(guò)了的),從工程名可以看出,這是從機(jī)的擴(kuò)展廣播程序
等待安裝好后左側(cè)的工程界面會(huì)顯示出來(lái)
點(diǎn)擊錘子構(gòu)建項(xiàng)目,看能否成功
沒(méi)有錯(cuò)誤和警告,工程是OK的
首先打開(kāi)startup–>startup_mkw38a4.c,找到Flash_Config,將最后的一個(gè)數(shù)值由0xFFFFFFFE改成0xFFFFFBFE,這個(gè)是NMI中斷的禁能,我第一跑的時(shí)候總是進(jìn)入NMI中斷,查了很多資料才知道要改這個(gè)FLASH配置。
對(duì)了,這里插一句,可能不熟悉eclipse的同學(xué)不知道我這黑色主題是怎么弄的,在工具欄,窗口–>首選項(xiàng),打開(kāi)的首選項(xiàng)窗口里,常規(guī)–>外觀
接下來(lái)打開(kāi)source–>comment–>AppMain.c,找到
這個(gè)是低功耗的開(kāi)關(guān),我們第一次跑KW38,不需要休眠,所以把這個(gè)宏定義屏蔽掉
按住Ctrl鍵,鼠標(biāo)左鍵點(diǎn)擊cPWR_UsePowerDownMode,這里會(huì)彈出三個(gè)選項(xiàng),看最后是文件app_preinclude.h的,點(diǎn)擊進(jìn)去
app_preinclude.h里面的,屏蔽掉
接下來(lái)AppMain.c里繼續(xù)向下翻,找到main_task,這個(gè)就是主任務(wù)了,前面是一些初始化,之后進(jìn)入App_Thread來(lái)執(zhí)行功能
按住Ctrl點(diǎn)擊跳轉(zhuǎn),App_Thread的定義正好在下面
這里主要看App_HandleHostMessageInput(pMsgIn);,按住Ctrl跳轉(zhuǎn)進(jìn)入其定義
看App_HandleHostMessageInput(pMsgIn)的內(nèi)容,和藍(lán)牙相關(guān)的是BleApp_GenericCallback(&pMsg->msgData.genericMsg);
BleConnManager_GenericEvent(pGenericEvent)這個(gè)函數(shù)執(zhí)行后根據(jù)事件進(jìn)行每一個(gè)CASE的執(zhí)行,比如最開(kāi)始進(jìn)入,正常情況第一個(gè)事件一定是第一個(gè)case gInitializationComplete_c:,這時(shí)候去執(zhí)行BleApp_Config();配置藍(lán)牙
case gExtAdvertisingParametersSetupComplete_c:和case gExtAdvertisingDataSetupComplete_c:是相互配合的
1、當(dāng)ext adv的參數(shù)設(shè)置好后
2、進(jìn)入case gExtAdvertisingParametersSetupComplete_c:,這里執(zhí)行Gap_SetExtAdvertisingData
3、執(zhí)行成功后進(jìn)入case gExtAdvertisingDataSetupComplete_c:,這里執(zhí)行App_StartExtAdvertising,這就意味著KW38藍(lán)牙開(kāi)始廣播,這時(shí)在手機(jī)藍(lán)牙是可以搜到KW38的。
那么,ext adv的參數(shù)設(shè)置是在哪進(jìn)行的?
在BleApp_GenericCallback函數(shù)的同一個(gè)文件adv_ext_peripheral.c里面,可以找到函數(shù)BleApp_Start()這個(gè)函數(shù),里面有一個(gè)執(zhí)行內(nèi)容就是
Gap_SetExtAdvertisingParameters,即設(shè)置廣播參數(shù)。
但是用souceinsight發(fā)現(xiàn),這個(gè)例程調(diào)用BleApp_Start()的地方是Key_HandleOption()
用官方開(kāi)發(fā)板的小伙伴,這候就可以直接構(gòu)建后下載到板子上了,程序運(yùn)行后,按按鍵PB2即可開(kāi)始廣播
而像我這樣沒(méi)有官方開(kāi)發(fā)板,是自制板子的,就需要讓藍(lán)牙主動(dòng)廣播
回到函數(shù)BleApp_GenericCallback()
在BleApp_Config()下面加入BleApp_Start(0);
接下來(lái)還要給同學(xué)們看看關(guān)鍵的兩個(gè)參數(shù)所在文件,藍(lán)牙的名字是在app_config.c里,extAdvScannableData是廣播時(shí)看到的名字
下面還有一個(gè)extAdvConnectableData,意思是連接后的名字
MAC地址是在ble_controller_task.c里面ControllerSetBD_ADDR()函數(shù),gHardwareParameters.bluetooth_address就是藍(lán)牙地址,是初始化的時(shí)候從flash里讀出來(lái)放在這,可以在這里打個(gè)斷點(diǎn)看看地址數(shù)據(jù)
點(diǎn)擊錘子編譯后,我們點(diǎn)擊DEBUG按鈕
我用的是JLINK,所以雙擊JLINK
調(diào)試配置出來(lái)后點(diǎn)擊調(diào)試
可以看到調(diào)試用的按鈕都不是灰色了,而且程序也跑到main停下
點(diǎn)擊全局運(yùn)行
打開(kāi)nrf connect APP,搜索設(shè)備,可以看到EA*PRPH的設(shè)備,這和程序里面設(shè)置的一直,MAC地址也是相同的,斷點(diǎn)看到的是7F,AF,5F,55,60,00,55這個(gè)字節(jié)不正確,這個(gè)后面我研究好后再補(bǔ)充。TODO
點(diǎn)擊CONNECT連接,配對(duì)密碼是1234,連接成功以后如下圖
到此,KW38入門的第一課結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全自动洗衣机多少钱啊?
- 下一篇: 地下城与勇士名刀——观世正宗哪里最容易爆