背景

手头有块CC2540开发板,TI比较老的片子,已经过渡到了CC2541,2540很早以前有做过项目,抽空把之前调试学习的重新整理下
如有异议,欢迎留言指正

概述

CC2540 2.4GHz低功耗的蓝牙片上方案,单模芯片,8051的CPU内核(外设寄存器配置和STC51单片机相似),256/128K FLASH和8kB RAM,BLE4.0可适用于小数据低功耗的通讯应用

特性:

  • 内核32Mhz 接收电流 19.6mA,发送电流(-6dBm)24mA
  • 3uS唤醒工作模式下功耗为235uA
  • 外部中断唤醒低功耗模式电流消耗0.4uA
  • 8051 CPU内核
  • 8Kb SRAM,可选的128Kb/256Kb 可编程Flash
  • 两路串口,8通道的12位ADC
  • 电压范围2V~3.6V
  • 21个通用IO口,19个IO支持4mA,其他两个IO支持20mA
  • 支持硬件AES

架构图

  • 可选的时钟源片外的高速32Mhz 低速32.768kHz
  • 可选的时钟源内的高速RC和低速32kHz
  • 硬件PIN脚与watcDog看门狗共同引入到RESET模块来实现复位
  • 射频模块通过Radio Arbiter仲裁器挂载到总线上
  • 休眠时钟与电源管理控制器进行关联
  • 下载器通过通过DEBUG接口实现对内核的调试

PIN脚图

开发工具

  • IAR For 8051 编译环境安装,下载地址
  • SDK协议栈安装,下载地址
  • CC Debugger下载器,用于程序下载调试


例程

  • 打开SDK安装目录,在BLE-CC254x-1.5.1.1\Project\ble文件目录下是官方提供的应用例程,选择SimpleBLEPeripheral作为第一个蓝牙应用测试用例
主函数main入口

main入口位于SimpleBLEPeripheral_Main.c文件中

int main(void)
{/* Initialize hardware */HAL_BOARD_INIT();//配置内核时钟16Mhz和低速32kHz低速时钟// Initialize board I/OInitBoard( OB_COLD );//初始化Demo板载IO外设(关闭LED)/* Initialze the HAL driver */HalDriverInit();//初始化驱动/* Initialize NV system */osal_snv_init();//NV系统初始化,初始化Flash/* Initialize LL *//* Initialize the operating system */osal_init_system();//初始化OSAL任务系统/* Enable interrupts */HAL_ENABLE_INTERRUPTS();//使能中断// Final board initializationInitBoard( OB_READY );//初始化按键#if defined ( POWER_SAVING )//低功耗,需要使能宏osal_pwrmgr_device( PWRMGR_BATTERY );#endif/* Start OSAL */osal_start_system(); // 进入任务return 0;
}
蓝牙参数修改

BLE参数配置位于simpleBLEPeripheral.c

  • 修改广播间隔,单位0.625ms,即广播周期为100ms
// What is the advertising interval when device is discoverable (units of 625us, 160=100ms)
#define DEFAULT_ADVERTISING_INTERVAL          160
  • 修改连接间隔
// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     80
// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     80
  • 断连的超时检测
// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY         0
// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT          1000
  • 修改广播名称,可在数据结构scanRspData修改,也可以手动在advertData手动修改广播报文数据
// GAP - SCAN RSP data (max size = 31 bytes)
static uint8 scanRspData[] =
{// complete name0x14,   // length of this data 长度GAP_ADTYPE_LOCAL_NAME_COMPLETE,0x53,   // 'S'0x69,   // 'i'0x6d,   // 'm'0x70,   // 'p'0x6c,   // 'l'0x65,   // 'e'0x42,   // 'B'0x4c,   // 'L'0x45,   // 'E'0x50,   // 'P'0x65,   // 'e'0x72,   // 'r'0x69,   // 'i'0x70,   // 'p'0x68,   // 'h'0x65,   // 'e'0x72,   // 'r'0x61,   // 'a'0x6c,   // 'l'// connection interval range0x05,   // length of this dataGAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),   // 100msHI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),   // 1sHI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),// Tx power level0x02,   // length of this dataGAP_ADTYPE_POWER_LEVEL,0       // 0dBm
};
应用

主任务位于OSAL_SimpleBLEPeripheral.c中,基于OSAL模型进行任务调度

任务表单:被周期性循环执行,task0~task10属于蓝牙协议栈的处理,部分已经被封装到ble静态库中,任务10是Ble的对外供开发可修改的应用任务处理,可以对事件触发进行处理,开发中也可以自定义增加事件任务

// The order in this table must be identical to the task initialization calls below in osalInitTask.
const pTaskEventHandlerFn tasksArr[] =
{LL_ProcessEvent,                                                  // task 0Hal_ProcessEvent,                                                 // task 1HCI_ProcessEvent,                                                 // task 2
#if defined ( OSAL_CBTIMER_NUM_TASKS )OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ),           // task 3
#endifL2CAP_ProcessEvent,                                               // task 4GAP_ProcessEvent,                                                 // task 5SM_ProcessEvent,                                                  // task 6GATT_ProcessEvent,                                                // task 7GAPRole_ProcessEvent,                                             // task 8GAPBondMgr_ProcessEvent,                                          // task 9GATTServApp_ProcessEvent,                                         // task 10SimpleBLEPeripheral_ProcessEvent                                  // task 11
};

程序烧录
打开nRF Connect手机APP,进行扫描可搜索到广播名称为SimpleBLEPeripheral,点击连接可查看支持的服务

总结

OSAL属于模拟的任务系统,不存在真正的高优先级任务对低优先级的抢占中的PSP压栈,所以自定义的任务中如果存在较长时间的堵塞则会影响蓝牙协议栈的正常运行

CC2540蓝牙开发一BLE例程相关推荐

  1. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

  2. android低耗能蓝牙开发,Android BLE低功耗蓝牙开发

    最近做了一个智能硬件开发(针灸仪)的项目,有一部分涉及到低功耗蓝牙的开发,就是通过蓝牙和设备进行数据的交互,比如控制改设备的LED的开关,设备的开关机,设置设备的时间和温度等,下面就项目中遇到的坑一一 ...

  3. 使用C#进行蓝牙开发-接收BLE广播

    使用BluetoothLEAdvertisementWatcher类来接收附近的蓝牙广播,这个是UWP的类,关于如何在WPF或者命令行程序中使用这个类,随便一搜就有了,很简单,.NET6之后简单设置一 ...

  4. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  5. android pin码 经典蓝牙_Android蓝牙开发—经典蓝牙详细开发流程

    Android蓝牙开发-经典蓝牙详细开发流程 发布时间:2018-07-16 13:41, 浏览次数:637 , 标签: Android Android蓝牙开发前,首先要区分是经典蓝牙开发还是BLE( ...

  6. CC2540蓝牙协议栈开发简介

    本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程.教程共分为六部分,本文为第三部分: 第三部分知识点: 第十一节 串口通信 ...

  7. java 蓝牙4.0_《蓝牙4.0 BLE开发完全手册---物联网开发技术实战

    图书目录: 第1章 蓝牙4.0 BLE简介 1.1 无线网络数据传输协议对比 1.2 短距离无线网络的分类 1.2.1 什么是蓝牙4.0 BLE 1.2.2 蓝牙4.0 BLE的特点 1.3 蓝牙4. ...

  8. iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发

    1 前言 当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy).对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持 ...

  9. Android ble covana,Android BLE低功耗蓝牙开发

    最近做了一个智能硬件开发(针灸仪)的项目,有一部分涉及到低功耗蓝牙的开发,就是通过蓝牙和设备进行数据的交互,比如控制改设备的LED的开关,设备的开关机,设置设备的时间和温度等,下面就项目中遇到的坑一一 ...

  10. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

    找到一篇介紹BT与BLE使用差别的文章, 写的很清晰,看完基本明白了 ----------------------------------------------------------------- ...

最新文章

  1. IDEA万能快捷键,你必须知道的17个实用技巧,提升撸码效率!
  2. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
  3. java communal_平台用英语怎么说
  4. HTML5 Canvas和EaselJS入门(译)
  5. mysql 存储过程 is_Mysql存储过程语法问题...
  6. Robots.txt 协议——百度之星
  7. Unity中Temporal AA
  8. python中文件操作的相关函数有哪些_Python常见文件操作的函数示例代码
  9. Mac支持NTFS两款软件
  10. 基于ubuntu的tcpdump抓包总结
  11. 数据包的忽略打印与脱敏打印
  12. Linux之shell脚本编程、多命令、脚本、bc计算器、反引号、if语句、for语句
  13. 利用Bootstrap框架制作WordPress自适应主题
  14. 网络综合布线应用指南
  15. 最值得看的电影,一生必看的50部电影,您看过几部影
  16. S7-1200PLC程序PN总线三路V90伺服轴控制实际应用项目
  17. 2020计算机会计初级,2020年初级会计官网登录入口
  18. 【毕业设计1】基于单片机的智能灌溉系统 - 物联网 嵌入式 stm32 c51
  19. 盛科推出新一代超融合网络交换机E550系列
  20. Linux 减,linux下的shell运算(加、减、乘、除)

热门文章

  1. 嵌入式--需要懂的网站
  2. 手把手DES加密解密详解-Java,Python
  3. 【STC15系列】STC15软串口输出打印示例程序
  4. 计算机获取信息的过程是,“获取信息的过程与方法”的教学案例
  5. Android jetpack-DataStore
  6. 生而美者,若知之,若不知之,若闻之,若不闻之
  7. 锁定Excel部分单元格不能编辑,可以这样操作
  8. 百旺如何看是否清卡_【问吧】如何查看是否清卡成功,出现这些问题,如何处理?...
  9. 统信UOS升级Python3及安装spyder5
  10. 使用python判断素数