TIwilliam hill官网
直播中

李宪

8年用户 163经验值
擅长:MEMS/传感技术 嵌入式技术 控制/MCU
私信 关注
[经验]

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就按可以闪烁啦!
如果在接收数据那里将接收到的数据进解析,那么就可以防止别人操作啦!

回帖(9)

林工

2017-2-10 15:25:52
原来你还有料...
举报

闫微东

2017-2-14 14:13:26
感觉CC2640R2F还可以
举报

24不可说

2017-2-21 16:19:38
讲解的很详细,希望楼主多多分享
举报

李宪

2017-2-28 09:00:31
引用: 24不可说 发表于 2017-2-21 16:19
讲解的很详细,希望楼主多多分享

好啊。好啊,后续会持续推出更多的技术性内容
举报

更多回帖

发帖
×
20
完善资料,
赚取积分