NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rough and crude

rough:物理上的粗糙或者说不平,高尔夫球场的生草区 crude:原始、未经加工的那种粗,即没有精加工转载于:https://www.cnblogs.com/dgyw/p/5767078.html

views 多个文件夹 netcore_.NET Core中的使用Kestrel服务器理解及应用

Kestrel是一个基于libuv的跨平台.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。Kestrel支持以下功能:HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix socketsKestrel 被.NET…

使用PowerMock测试对象的内部状态

大多数单元测试都集中于测试对象的行为以证明其有效。 这可以通过编写一个JUnit测试来实现,该测试调用对象的公共方法,然后测试这些调用的返回值是否与先前定义的一组期望值匹配。 这是一种非常常见且成功的技术。 但是,不应忘记对象也显示状…

布局

1)ul li 把ul宽度设置大一点,然后overflowhidden;(最好不要嵌套使用,原因看清除浮动方法),然后外面必须有包裹的div壳,div壳的宽度就按设计稿来,这样就避免了需要给最后一个li设置m…

10个职场故事,让人不得不看

1、强盗师徒 有一次,一个老强盗带着徒弟去抢劫银行,被警方追捕。两人狂逃,差点儿连裤子都跑掉了。好不容易甩掉了警察,两人上气不接下气,瘫倒在地上。 良久,惊魂稍定,徒弟说:“师父啊师父&#…

NXP UWB NCJ29D5开发(一)环境搭建

1、从NXP的共享账号下载资料 共享账号需要找对接的NXP人员拿到,他会把资料分享到这个账号,在这个账号里面可以下载 进入nxp官网,登录后点击my nxp,选择Software Licensing and Support 进入后接着选择View accounts 进入后选择…

西瓜创客python编程进阶收费_西瓜创客和编程猫有什么不同?哪个更值得报名?...

看情况来决定即可,在课程内容上其实出入我觉得不是很大,重点是教学服务、师资、授课模式等,单纯我自己的角度来说,我个人偏向于西瓜创客多一点,他们家的课程更具有趣味性,游戏化教学,融入卡通人…

Stack的三种含义

作者:阮一峰 学习编程的时候,经常会看到stack这个词,它的中文名字叫做”栈”。 理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。…

NXP UWB NCJ29D5开发(二)BlinkyLed例程

路径为UWB\NCJ29D5\NCJ29D5_CAS_Examples_v1.4\onic\BlinkyLed\toolsupport\keil 例程怎么来的可以看看上一篇NXP UWB NCJ29D5开发(一)环境搭建 1、 //系统选择外部晶振,时钟频率为55.2Mhz phscaAppHal_Init(PHSCA_APPHAL_XO_CLOCK_SOURCE_…

你要看透的56条人生哲理

当你踌躇不前、站在人生十字路口时候,这56条哲理或许能助你一臂之力!      1.拿得起,放得下      我们每个人都有很多“宝贝”,但你不可能什么都得到,在某些时候一定要学会拿得起,放得下…

使用Spring和Java泛型简化数据访问层

1.概述 本文将着重于通过对系统中的所有实体使用单个通用的数据访问对象来简化DAO层 ,这将导致优雅的数据访问 ,而不会造成不必要的混乱或冗长。 2. Hibernate和JPA DAO 大多数生产代码库都有某种DAO层。 通常,实现范围从没有抽象基类的多个…

强肝保肝养肝4大食物

“强肝的食物,保肝的食物有哪些,养肝的食物有哪些”如果您对这些食物不了解不明白。那就看看专家为您推荐的四款强肝保肝养肝的食物。荔枝(供图/华盖)一、是荔枝,荔枝可以保肝,对肝有好处根据《本草纲目》记载荔枝有强肝健胰的效果…

如何查看注解实现_该怎么运用注解呢?Java团队元老有话说

来源 | 异步 15讲能学好诞生24年的JAVA吗?你当然会感到怀疑,众所周知,在技术向的IT论坛上,“如何在十天之内快速掌握好Java?”这类问题,往往会招来嘲笑。来源于知乎但在当下,5分钟能看完一部电影…

NXP S32K144开发(一)环境搭建和新建工程

1、首先需要安装S32 Design Studio for ARM,在NXP官网可以搜索到,这玩意也是基于eclipse的 安装好后就可以打开了。 2、新建工程 过程可以参考NXP官网: https://www.nxp.com/document/guide/get-started-with-the-s32k144evb:NGS-S32K144E…

首先记录异常的根本原因

Logback日志库的0.9.30版本带来了一个很棒的新功能:从根(最内部)异常而不是最外部异常开始记录堆栈跟踪。 当然,我的兴奋与我贡献了此功能无关。 用塞西尔德米勒(Cecil B. de Mille) 的话来解释&#xff1a…

成功醒言

成功醒言 C01 只有敢犯错误的人才能成事; 只有不犯同样错误的人才能成大事。 C02 固执≠执著; 幻想≠希望。 固执是无目标的执著; 执著是有目标的固执。 幻想是无法兑现的希望; 希望是有望实现的幻想。 固执地执著幻想&#xf…

Android 中的 Service 全面总结

1、Service的种类 按运行地点分类: 类别区别 优点缺点 应用本地服务(Local)该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不…

python基础学习1-三元表达式和lambda表达式

#!/usr/bin/env python # -*- coding:utf-8 -*- 三元运算 if else 的简写name "alex" if 11 else "SB" #如果条件成立 赋alex 否则 赋SB print(name)#--------------lambda表达式 f2 lambda a1,a2:a1a2100 #等价 下边函数定义 def f1(a1,a2): return …

怎么让存储过程通用化_怎么做分布式存储的面试?

cholerae 大神已经做了详细回答,http://zenlife.tk/interview-for-distributed-storage.md写于几年前,内容有点稚嫩,WAL辨识度很高, 其他问题一般.CAP不会再问了,专业的存储文献中很少(几乎不)提及CAP或PACELC, 这个词用于市场和销…

Java EE中的配置管理

我尝试配置管理在云计算中具有很多相关性 争论 较早。 实际上,我大胆地宣称配置管理是任何认真尝试从软件中节省几美元的基石。 那么什么是配置管理及其主要目标? 在不使事情变得过于复杂的情况下,我认为接下来的两个目标与事实相差不远。 以…