由浅入深蓝牙40BLE协议栈开发攻略大全1Word文件下载.docx
《由浅入深蓝牙40BLE协议栈开发攻略大全1Word文件下载.docx》由会员分享,可在线阅读,更多相关《由浅入深蓝牙40BLE协议栈开发攻略大全1Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
![由浅入深蓝牙40BLE协议栈开发攻略大全1Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-10/9/2573f8e4-a530-4d5a-bf19-1e3f71987989/2573f8e4-a530-4d5a-bf19-1e3f719879891.gif)
第四节控制LED
第五节LCD12864显示
第二部分知识点:
第六节独立按键之查询方式
第七节独立按键之中断方式
第八节CC254x内部温度传感器温度采集
第九节五向按键
第十节蜂鸣器
第三部分知识点:
第十一节串口通信
第十二节Flash的读写
第十三节BLE协议栈简介
第十四节OSAL工作原理
第十五节BLE蓝牙4.0协议栈启动分析
第四部分知识点:
第十六节协议栈LED实验
第十七节协议栈LCD显示
第十八节协议栈UART实验
第十九节协议栈五向按键
第二十节协议栈Flash数据存储
第五部分知识点:
第二十一节DHT11温湿度传感器
第二十二节蓝牙协议栈之从机通讯
第二十三节蓝牙协议栈主从一体之主机通讯
第二十四节OAD空中升级
第二十五节SBL串口升级
第六部分知识点:
第二十六节UBL-USB升级
第二十七节MT-iBeacon基站使用iPhone空中升级
第二十八节MT-iBeacon基站在PC端实现OAD空中升级
第二十九节MT-iBeacon基站关于LightBlue软件的使用
第三十节如何使用MT-USBDongle的透传功能
有关TI的CC254x芯片介绍,可点击下面链接查看:
主流蓝牙BLE控制芯片详解
(1):
TICC2540
BLE是蓝牙4.0规范中的一种,其中master最多有7个外设,低功耗,低延迟,低吞吐量。
六种设备状态
待机状态(standby):
设备没有传输和发送数据,并且没有连接到任何设备
广播状态(Advertiser):
周期性广播状态
扫描状态(Scanner):
主动寻找正在广播的设备
发起链接状态(Initiator):
主动向扫描设备发起连接。
主设备(Master):
作为主设备连接到其他设备。
从设备(Slave):
作为从设备连接到其他设备。
五种工作状态
准备(standby),广播(advertising),监听扫描(Scanning),发起连接(Initiating),已连接(Connected)
四种设备类型
Cnetral主机(常作为client端):
如手机,PC
Peripheral从机(常作为Service端):
如心率计,血糖计
Observer观察者:
Broadcast广播者:
连接过程:
Peripheral开启广播-->
Central扫描从机广播-->
Peripheral接收到Central的扫描请求,Peripheral向Central发送扫描回应数据-->
Central向Peripheral发起连接-->
开始通信。
兼容性
第一节BLE开发环境的搭建
1.1硬件准备
要进行BLE的开发,首先我们需要一个硬件环境。
(1)MT254xBoard开发板(最好有两块,方便进行数据收发实验);
(2)USBDongle-BLE抓包工具(多个固件,一个硬件多种用途),协议开发时辅助我们分析数据包;
(3)开发必备CC-Debug,用于下载和调试程序;
有关本文的工具下载,大家可以到以下这个地址:
朱兆祺ForARM
1.2BLE协议栈的安装
我们使用的是最新版本的协议栈BLE-CC254x-1.4.0,首先在配套的资料文件夹中的tools文件夹下找到BLE-CC254x-
我们提供了一个安装包和一个免安装的源码,根据我的开发经验,建议使用安装包安装到C盘,直接使用免安装源码在后期的开发中会遇到一些莫名其妙的问题。
下面开始安装协议栈,安装方式很简单,记得选择C盘安装。
在安装的最后阶段,默认的会安装Btool。
成功安装了协议栈后,将会出现说明文件。
在说明文件中我们可以看到,这个版本的协议栈需要使用IARfor8051
注:
如果使用的是Win8以上的系统建议使用IARfor8051,安装方式和
下面我们就开始安装这个版本的软件。
1.3IAR安装
在配套的文件目录下找到如下文件。
安装IAR,然后安装Dongle驱动。
到这步,说明IAR已经安装完成,下面开始进行和谐,你懂得!
解压此文件夹,得到如下文件:
将解压得到的文件全部复制到IAR安装目录(如下图),直接覆盖原始文件。
这样IAR的安装就完成了。
先开启软件来体验一下安装成果吧!
1.4安装烧写软件
至此,我们目前需要用到的开发软件就安装完成了。
第二节BLE快速体验
经过前面的安装,我们的开发环境已经搭建好了,现在我们先来体验一下BLE,给自己点动力,comeon!
使用SmartRFFlashProgrammer烧写从机固件:
CC2540_SmartRF_SimpleBLEPeripheral.hex,烧写方法见SmartRFFlashProgrammer的使用章节。
协议栈默认自带了一些已经编译好的文件,可以直接烧写,具体路径如下图:
从机固件路径:
读取设备的IEEE地址:
烧写完成后,如果你有支持Ble的手机或平板就可以搜索到设备了,或者使用本公司开发的USBDongle(抓包固件或HostTestRelease固件)也可以搜索到设备,具体的使用可以阅读相应的产品使用手册,我这里用andriod平板搜索:
通过MAC地址可以知道我们的设备已经在正常的广播了,我这里使用本公司开发的andriod端软件TruthBlue可以正常搜索到我们的设备。
如果用户手上有支持BLE的设备并且系统在andriod4.3以上也可以安装我们的这个软件。
连接上设备后如图,这里我们不要求大家能够看懂这些,这里仅仅是为了体验,后面的章节中我们会详细的讲述这些知识。
第三节创建IAR工程-点亮LED
经过前面的准备工作,这章开始我们开始正式的开发过程。
这个教程是为有一定51基础和C基础的人准备的,如果读者这方面还欠缺,请找相关方面的书籍恶补一下。
CC2540的本质就是一个8051的单片机,所以我们裸机开发就可以作为一个51单片机来开发,裸机开发的目的是为了让大家熟悉整个硬件以及开发环境,这并不是我们的最终目的,但这是一个必须的过程,为后面开发协议栈奠定基础。
打开我们前面安装的IAR软件,创建一个新的工程。
因为我们使用的CC2540是增强型51单片机,这里我们创建一个空的8051工程,具体配置选项如图:
选择目录保存工程;
我们这里创建一个最简单的例程,点亮一个LED,这个例程就像我们学习每种编程语言是都是先来个HelloWorld!
。
虽然简单,但是能够让我们最快的掌握一个开发环境的使用。
新的工程为空工程,没有任何文件,我们这里新建一个文件并且保存为C文件。
添加文件到工程:
保存WorkSpace,在IAR中每个工程都必须要有一个Workspace,而且一个Workspace中可以有多个工程,所以这里我也必须要保存一个Workspace,点击file->
saveWorkspaceAs就会弹出如下对话框,这里和保存文件一样需要对这个WorkSpace命名,我们这里一样取名LED。
接下来我们需要对工程进行一些配置,使它适应我们的CPU。
在工程处右击,进入配置界面。
CPU配置:
这里我们第一个要做的就是选择我们的CPU,我们使用的是TI公司生产的CC2540F256,所以这里选择CC2540F256。
配置好CPU后,我们还需要配置编译输出的文件格式,选择到Linker选项,配置如下图:
debug选项:
选项配置:
经过这些配置后,我们可以开始编码了,下面开始编写我们的第一个代码,功能是点亮2个LED,开发板上有两个LED灯,分别对应P1.0和P1.1。
代码如下,可能觉得都是注释,这里我还是建议大家有一个好的编码风格,在开发大项目时就能够看到它的优势。
intmain(void)
{
P1SEL&
=~0X03;
//将P1.1、0设置为IO功能
P1DIR|=0X03;
//设置P1.1、0为输出功能
while
(1)
P1=(P1&
0XFC)|0X01;
//设置P1.0输出高电平
}
return0;
编写好代码后,就可以编译下载到开发板上了。
点击图中所示图标全速运行。
根据原理图,P1.0对应的是LED2,这里我们能够看到LED2处于点亮的状态。
根据CC254X的数据手册,我们可以很快知道P1SEL是设置IO功能,P1DIR是设置输入输出。
至于为什么程序是这么写,我们来看下,CC254X芯片的P1口一共有8个IO口,那就是说刚刚好由两位十六进制进行控制:
11111111(FF),这里仅仅是LED1和LED2,也就是P1.1和P1.0两个IO口,为了不影响其他引脚的使用,我们这里巧妙使用与或控制其功能。
比如:
P1=(P1&
P1与上11111100,这样不影响其他引脚的基础上,清除了P1.0和P1.1的输出,再或上0X01,这样将P1.0设置为高电平,根据原理图,高电平是点亮LED2.
第四节控制LED
上一节点亮了单个LED灯,我们这堂课接着控制LED灯。
这堂课我们要完成的是LED闪烁10次,蜂鸣器响1s钟。
这里我们先使用延时函数进行。
我们的程序一定要做到结构清晰,可移植性强,阅读性高。
程序设计不仅仅是实现了功能,如果那样的代码,那只有你自己可以看懂,是一手垃圾。
真正的漂亮代码具有阅读性高、可移植性强、代码规范性好。
delay.h:
#ifndef__DELAY_H__
#define__DELAY_H__
externvoidDelay1ms(unsignedintuiDelay);
#endif
/*endfile*/
延时函数的执行程序delay.c:
#include“delay.h”
voidDela