2775|0

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

昇润CC2640 SDK应用入门教程二 [复制链接]

 
通过上次的演示说明,相信大家对蓝牙的开发环境及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就按可以闪烁啦!
如果在接收数据那里将接收到的数据进解析,那么就可以防止别人操作啦!


此内容由EEWORLD论坛网友昇润科技原创,如需转载或用于商业用途需征得作者同意并注明出处

查看本帖全部内容,请登录或者注册
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表