首先要下載開發使用的IDE:MCUXpresso IDE
下載鏈接:
進入nxp的官網,搜索KW38
向下翻看,找到Xpresso,點擊進入
習慣使用IAR開發的同學也可以下IAR版本,這里以Xpresso為例
下載好后安裝,一路默認下去就行了 ,安裝后打開。
在下面的窗口,選擇installed SDKs,然后選擇右邊的藍框X
找到frdmkw38,選中,點擊install下載SDK,我這里已經下載好了所以install是灰的,只能Uninstall卸載
下載好后,在主界面看看有沒有顯示出來
接下來點擊主界面左下角的import SDK example(s)
選中KW38,點擊下一步
選擇wireless_examples–>bluetooth–>adv_ext_peripheral–>freertos–>adv_ext_peripheral_freertos,點擊下一步(我這里是添加過了的),從工程名可以看出,這是從機的擴展廣播程序
等待安裝好后左側的工程界面會顯示出來
點擊錘子構建項目,看能否成功
沒有錯誤和警告,工程是OK的
首先打開startup–>startup_mkw38a4.c,找到Flash_Config,將最后的一個數值由0xFFFFFFFE改成0xFFFFFBFE,這個是NMI中斷的禁能,我第一跑的時候總是進入NMI中斷,查了很多資料才知道要改這個FLASH配置。
對了,這里插一句,可能不熟悉eclipse的同學不知道我這黑色主題是怎么弄的,在工具欄,窗口–>首選項,打開的首選項窗口里,常規–>外觀
接下來打開source–>comment–>AppMain.c,找到
#if defined(cPWR_UsePowerDownMode) && (cPWR_UsePowerDownMode)
#include "PWR_Interface.h"
#endif
這個是低功耗的開關,我們第一次跑KW38,不需要休眠,所以把這個宏定義屏蔽掉
按住Ctrl鍵,鼠標左鍵點擊cPWR_UsePowerDownMode,這里會彈出三個選項,看最后是文件app_preinclude.h的,點擊進去
app_preinclude.h里面的,屏蔽掉
接下來AppMain.c里繼續向下翻,找到main_task,這個就是主任務了,前面是一些初始化,之后進入App_Thread來執行功能
按住Ctrl點擊跳轉,App_Thread的定義正好在下面
這里主要看App_HandleHostMessageInput(pMsgIn);,按住Ctrl跳轉進入其定義
看App_HandleHostMessageInput(pMsgIn)的內容,和藍牙相關的是BleApp_GenericCallback(&pMsg->msgData.genericMsg);
BleConnManager_GenericEvent(pGenericEvent)這個函數執行后根據事件進行每一個CASE的執行,比如最開始進入,正常情況第一個事件一定是第一個case gInitializationComplete_c:,這時候去執行BleApp_Config();配置藍牙
case gExtAdvertisingParametersSetupComplete_c:和case gExtAdvertisingDataSetupComplete_c:是相互配合的
1、當ext adv的參數設置好后
2、進入case gExtAdvertisingParametersSetupComplete_c:,這里執行Gap_SetExtAdvertisingData
3、執行成功后進入case gExtAdvertisingDataSetupComplete_c:,這里執行App_StartExtAdvertising,這就意味著KW38藍牙開始廣播,這時在手機藍牙是可以搜到KW38的。
那么,ext adv的參數設置是在哪進行的?
在BleApp_GenericCallback函數的同一個文件adv_ext_peripheral.c里面,可以找到函數BleApp_Start()這個函數,里面有一個執行內容就是
Gap_SetExtAdvertisingParameters,即設置廣播參數。
但是用souceinsight發現,這個例程調用BleApp_Start()的地方是Key_HandleOption()
用官方開發板的小伙伴,這候就可以直接構建后下載到板子上了,程序運行后,按按鍵PB2即可開始廣播
而像我這樣沒有官方開發板,是自制板子的,就需要讓藍牙主動廣播
回到函數BleApp_GenericCallback()
在BleApp_Config()下面加入BleApp_Start(0);
接下來還要給同學們看看關鍵的兩個參數所在文件,藍牙的名字是在app_config.c里,extAdvScannableData是廣播時看到的名字
下面還有一個extAdvConnectableData,意思是連接后的名字
MAC地址是在ble_controller_task.c里面ControllerSetBD_ADDR()函數,gHardwareParameters.bluetooth_address就是藍牙地址,是初始化的時候從flash里讀出來放在這,可以在這里打個斷點看看地址數據
點擊錘子編譯后,我們點擊DEBUG按鈕
我用的是JLINK,所以雙擊JLINK
調試配置出來后點擊調試
可以看到調試用的按鈕都不是灰色了,而且程序也跑到main停下
點擊全局運行
打開nrf connect APP,搜索設備,可以看到EA*PRPH的設備,這和程序里面設置的一直,MAC地址也是相同的,斷點看到的是7F,AF,5F,55,60,00,55這個字節不正確,這個后面我研究好后再補充。TODO
點擊CONNECT連接,配對密碼是1234,連接成功以后如下圖
到此,KW38入門的第一課結束。