单片机/MCUwilliam hill官网
直播中

John

8年用户 23经验值
擅长:可编程逻辑 MEMS/传感技术 嵌入式技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[文章]

【CC2640R2F蓝牙4.2试用体验】昇润科技CC2640R2F SDK 点灯实验

本帖最后由 769484623 于 2017-7-12 12:38 编辑

这次我打算做个心率+骑行速度计算的小项目,如果时间允许,我也会做下APP,并上传上来共享给大家。

我以前曾经使用过CC2540,并进行了一些相关开发,但当我第一次上手CC2640的时候仍然让我感觉不太适应。
拿到昇润科技提供的SDK后,我又从官网下载了最新的SDK,用来对比使用。毕竟基于ti-RTOS,了解了原系统有助于了解二次封装的系统。
昇润科技的SDK目标致力于让开发者能够快速的进行开发,所以底层的很多细节如密码配对、UUID描述的更改,都是开发者不可控的。有利即有弊嘛,这个也是可以理解的。CC2640的TI-RTOS添加了多线程的一些特性,如信号量、句柄等。M4内核让较复杂的调度成为了可能

昇润科技的SDK给了相关的使用说明,但有的地方还是有一点错误的(因为举例所用SDK比较老),比如SDK从机模板的目录就不是文档说明中的Project,而是在TTC_CC2640_R2_SDKexamplesrtosCC2640R2_LAUNCHXLblestackSDKtirtosiar下面。

8N0%9NL%XZV`)UK{Y2T[VYW.png

我使用的是最新的IAR FOR ARM,大家可以从官网下载,可以完美支持昇润科技的SDK。插上XDS调试器后发现没有驱动(万恶的360),只能手动安装。(位于IAR FOR ARM 的 /arm/drivers/ti-xds中。唯一的那个EXE就是驱动安装包)

OQD9@_7_])(ZCPOMV~)C9]Y.png
装好驱动后的样子

打开工程文件后,第一件事当然就是生成固件烧录了。这里我们需要注意,需要先生成并烧录Stack,之后才能烧录APP。

就在这里我出现了一个问题:找不到XXXXXX.flash.
这不是啥大问题,把Override 恢复就好了。
APP设置同理。

1.jpg

之后我们成功的生成并download了对应的固件!
打开手机蓝牙,能搜索到TTC_CC2640的蓝牙,代表固件生成成功。

]GS2@OWEP5W5S]CKY8{_Q]1.jpg

之后该是点灯了。
点灯这个在CC2540上很简单,因为51的内核无法添加过多功能,其RTOS也是比较简陋的。但在CC2640的RTOS上就比较麻烦了。
昇润科技将IO0~IO31分为了4个组,每个IO对应的组如下图:

@~BT`C[85JU({_220VX$`E4.png
由于只有一个带跳线的LED,所以我将其与最近的IO口相连(IO0,即IO3_6),用一个跳线帽就可以搞定。
按键使用的是下降沿触发,所以按键一端接IO3_5,另一端直接接地。
没添加按键去抖,所以各位做复现实验时可能发现LED会多次翻转。这个是正常现象……(好吧,怪我懒)
下面放出代码。
  1. //LED.C
  2. #include "Led.h"
  3. #include "TTCBLESDKCommDef.h"
  4. #include "TTCSDKBoard.h"
  5. #include "TTCBleSDKManager.h"
  6. #include

  7. #define SYSTEM_CLOCK_EVENT  0x01

  8. static Clock_Struct sysClock;
  9. static Event_Handle sysClockEventHandle;
  10. static PIN_Handle systemClockPinHandle;
  11. static PIN_State  systemClockPinState;

  12. PIN_Config GPIO[] = {
  13.     IO3_5           | PIN_INPUT_EN | PIN_PULLUP ,
  14.     IO3_6           | PIN_GPIO_OUTPUT_EN  | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,  
  15.     PIN_TERMINATE  
  16.   };  
  17. //使用DIO0来作为WAKE_LED,输出模式,默认低电平,推挽,中等推力
  18. //使用DIO1作为按键中断引脚,内接上拉
  19. void GPIO_Int(PIN_Handle eventHandle, PIN_Id id)
  20. {
  21.   if(id == IO3_5)//判断中断是哪个引脚引起的
  22.   {
  23.     TTCDriverIOSetOutputVaule(&systemClockPinHandle,IO3_6,~TTCDriverIOGetOutputValue(IO3_6));//翻转IO
  24.   }
  25. }
  26. void ledInit(Event_Handle eventHandle)
  27. {
  28.   sysClockEventHandle = eventHandle;
  29.   TTCDriverIOOpen(&systemClockPinHandle,
  30.                   &systemClockPinState,
  31.                   (const PIN_Config *)GPIO);//初始化IO组
  32.   TTCDriverIORegisterIntCallBack(&systemClockPinHandle,GPIO_Int);//注册中断回调
  33.   TTCDriverIOSetConfig(&systemClockPinHandle,PIN_BM_IRQ,IO3_5|PIN_IRQ_NEGEDGE);//下降沿触发
  34. #ifdef POWER_SAVING//如果开启了节能模式,需要按照下面设置中断唤醒
  35.   TTCDriverIOSetConfig(&systemClockPinHandle,PINCC26XX_BM_WAKEUP,IO3_5|PINCC26XX_WAKEUP_NEGEDGE);//下降沿触发
  36. #endif
  37.   Util_constructClock(&sysClock,
  38.                         systemClockCB,
  39.                         0,
  40.                         1000,
  41.                         true,
  42.                         SYSTEM_CLOCK_EVENT);
  43. }//1000ms的定时,systemClockCB为SYSTEMCLOCK定时器中断的回调函数
  44. void systemClockCB(UArg arg)
  45. {
  46.   if(arg & SYSTEM_CLOCK_EVENT)//1000ms唤醒
  47.   {
  48.     Event_post(sysClockEventHandle, UTIL_QUEUE_EVENT_ID);//触发队列任务
  49.   }
  50. }
  51. void ledFlash()
  52. {
  53.   //TTCDriverIOSetOutputVaule(&systemClockPinHandle,IO3_6,~TTCDriverIOGetOutputValue(IO3_6));//这个打开的话就是2s闪一次,同时会响应按键的翻转LED
  54. }
LED.H
  1. #ifndef Led
  2. #define Led

  3. #include

  4. void ledInit(Event_Handle eventHandle);
  5. void systemClockCB(UArg arg);
  6. void ledFlash();
  7. #endif

将这两个文件加入工程,之后在TTCBlePeripheral.c中的TTCBlePeripheralTaskInit()的末尾添加LedInit(),并且在TTCBlePeripheralTaskFxn()添加ledFlash(),如下图:
{Z1_EDBC$F8FU`O~9OIZ056.png


添加完成后烧录,效果如下:
P70707-173226.gif

还是很简单的对吧?

  • HT`URDEL(DZ4UMCKBK~C)49.png

回帖(6)

laoda

2017-7-13 09:30:10
和视频里的没多大差别啊
举报

John

2017-7-15 17:40:41
引用: xyzxyz76 发表于 2017-7-13 09:30
和视频里的没多大差别啊

一点一点来嘛~
举报

zengbike

2017-7-17 14:24:42
举报

zengbike

2017-7-17 14:28:10
举报

xjtu114

2017-11-21 15:19:56
Error[Li005]: no definition for "TTCDriverIOSetOutputVaule" [referenced from C:TTC_BLE_CC2640_R2_SDK3.2.0TTC_CC2640_R2_SDKexamplesrtosCC2640R2_LAUNCHXLblestackSDKtirtosiarappperipheralAppROMObjLED.o]
直接复制了你的代码,这个错误怎么解决,按帖子内容来的
举报

xjtu114

2017-11-21 15:22:04
Warning[Pe223]: function "TTCDriverIOSetOutputVaule" declared implicitly C:TTC_BLE_CC2640_R2_SDK3.2.0TTC_CC2640_R2_SDKexamplesrtosCC2640R2_LAUNCHXLblestackSDKsrcappDemoLED.c 26
还有一个警告
举报

更多回帖

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