首先要下载开发使用的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入门的第一课结束。