完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
通过上次的演示说明,相信大家对蓝牙的开发环境及CC2640 SDK开发套件已基本熟悉。那么,这次我们教大家如何使用昇润SDK工具实现简单的蓝牙控制,通过APP实现LED的开、关和闪烁。
首先上图,目标板: 如上图示,利用开发套件中的HY-264022V1 开发目标板: 1:接好JTAG调试电缆,请注意方向; 2:把LED D1的跳线帽接上,该LED是通过DIO_0来控制; 3:外部供电电源的负极接上; 4:外部供电电源的1.8V-3.6V电源正极接上; 注:HY-264022V1的原理图在安装好的SDK的说明文档中,如下图所示: 连接上TTC XDS110也就是HY-129400: 打开IAR ARM 7.7 ,再打开程SDK的从机工程: 打开工程后,还是先编译蓝牙协议栈,并下载OK!再选择应用的工程1,打开我们将要改写的TTCBlePeripheralTask.c 2 改写之前,我们先验证手机与蓝牙模块之前能进行正常的数据传输:先编译蓝牙应用程序、将程式下载至目标板、全速运行,或是取掉调试器,断开外接电源,重新上电,我们回顾一下上次的蓝牙联线过程,并验证数发送接收,SDK刚安装好后,原始默认是接收到任何数据,均返回; 首先打开APP: 扫描,并选择要连线的设备; 提示联接设备; 连线成功后,我们在APP中选择:数传,发送1234567890,此时可经看到RX也会显示1234567890,证实发任何数据,模块会将数据回传回来! 刚才打开的文件中的函数如下: 如果把这条屏蔽掉,就不会回传数据,可以测试看看: 通过修正以下这二个参数,我们可以来控制蓝牙的联线间隔,参数与计算方式大家可以参考注释: DEFAULT_DESIRED_MIN_CONN_INTERVAL 最小连接间隔(单位为 1.25ms, 例如 80 = 100ms),该参数在蓝牙参数更新使能的情况下生效 DEFAULT_DESIRED_MAX_CONN_INTERVAL 最大连接间隔(单位为 1.25ms, 例如 800 = 1000ms),该参数在蓝牙参数更新使能的情况下生效 连接间隔最大值与最小值之间的差值,依苹果手机的规定,必须大于21,苹果一般情况下均是选择最大值;因此现在的联线间隔是:80x1.25 = 100ms;SDK默认关闭软件加密,因此每次最大通讯长度是20字节; 为什么将这二个参数更新就会有效呢?大家可以看一下这里: 工程在蓝牙初始化时就是.updateParEnable = TRUE, “参数更新使能” 经过上面的验证,我们开始来打开GPIO,通过接收数据来控制IO的状态,我们先找到项目的可选项: 再打开可选项: 1、先选择c++ compiler编译选项; 2、再先择preprocessor预处理设置; 3、找到SDK写好的GPIO宏定议开关项 4:我们打开GPIO的宏定议; 5:确认OK 我们再编译一下: 确定SDK打开GPIO后,编译正确。 找到设备的初始设定点: 进去找到GPIO的初始化部分: 进入这个函数所在的文档TTCDriverGPIODemo.c 1步,将下面的全部屏蔽掉2步: PIN_Config ioTestConfig[] = { IOID_0 | PIN_GPIO_OUTPUT_EN | PIN_INPUT_DIS | PIN_GPIO_HIGH, PIN_TERMINATE }; 在IO配置中将,IOID_0配置为输出态,并输出为高电平,即关闭LED;原理如下: 利用SDK GPIO演示代码,我们修改一下: /****************************************************************************** 【函 数】 TTCDriverDemoIOInit(keysPressedCB_t appKeyCB) 【概 述】 TTCDriver驱动初始化 【入口参数】 appKeyCB 【返回参数】 无 【说 明】 本函数配置IOID_0为输出口 ******************************************************************************/ void TTCDriverDemoIOInit(keysPressedCB_t appKeyCB){ TTCBleSDKManagerInfo_t err; err = TTCDriverIOOpen(&ioTestHandle,&ioTestState,(const PIN_Config *)ioTestConfig); if(err != MANAGER_INFO_REQUEST_IO_SUCCESS){ asm("nop"); return; } } /****************************************************************************** 【函 数】 KeyPressHandler(uint8_t keys) 【概 述】 用户的按键处理函数 【入口参数】 按键码 【返回参数】 无 【说 明】 无 ******************************************************************************/ void KeyPressHandler(u8 keys){ if(keys & 0x01){ //取反IOID_0脚的状态 TTCDriverIOSetOutputVaule(&ioTestHandle,IOID_0,!TTCDriverIOGetOutputValue(IOID_0)); } } 在从机线程文件中,我们把GPIO的初设定改一下: 再打开一个事件: 要把这个变量放出来,测试一下: 在线程处理函数中,增加用户事件: 然后在数据接收外理函数中,增加使能用户事件: 这样我们每发送一次数据,就可以将GPIO_0取反一次; 在APP中,将设定好数据发送间隔,并使能定时发送,这时LED就按可以闪烁啦! 如果在接收数据那里将接收到的数据进解析,那么就可以防止别人操作啦! |
|
相关推荐
5 个讨论
|
|
谢谢分享!!!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3061 浏览 3 评论
1534 浏览 3 评论
4675 浏览 1 评论
2020 浏览 1 评论
3276 浏览 2 评论
521浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 13:37 , Processed in 1.133852 second(s), Total 55, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号