首页资源分类嵌入式开发C2000 > 蓝牙4.0入门与提高

蓝牙4.0入门与提高

已有 453308个资源

下载专区

上传者其他资源

嵌入式开发热门资源

本周本月全部

文档信息举报收藏

标    签: 蓝牙4 0TIBLE

分    享:

文档简介

该文档是关于TI的蓝牙4.0的基础知识介绍及一些简单的 应用

文档预览

AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 BLE-入门与提高教程 SmartRF 系列开发板 www.AmoMcu.com AmoMcu 开源社区 出品 2014-06-16 v2.4 日期 2014-04-18 2014-05-01 2014-05-21 2014-06-16 版本 V2.1 V2.2 V2.3 V2.4 说明 初版 增加第八章 修改部分文字错误 增加开发板到手后安装驱动,如何连接,如何让板子跑起来等初级教程 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 1 AmoMcu 开源社区 电装科技 www.AmoMcu.com 目录 专注蓝牙 BLE 开发 目录.................................................................................................................................................. 2 前言.................................................................................................................................................. 6 开发板上手指南.............................................................................................................................. 6 第 1 章 BLE 简介.........................................................................................................................8 1.1 无线网络数据传输协议对比...........................................................................................8 1.2 蓝牙 4.0............................................................................................................................ 9 1.2.1 什么是蓝牙 4.0..................................................................................................... 9 1.2.2 蓝牙 4.0 与传统蓝牙之间的关系.....................................................................10 1.3 Bluetooth Low Energy......................................................................................................11 1.3.1 BLE 简介..............................................................................................................11 1.3.2 BLE 特点..............................................................................................................11 1.4 BLE 无线网络通信信道分析........................................................................................ 13 1.5 BLE 无线网络拓扑结构................................................................................................ 14 1.6 BLE 技术的应用领域.................................................................................................... 14 1.7 CC254xEK 开发套件硬件资源概述............................................................................. 14 1.8 本章小结......................................................................................................................... 15 第 2 章 IAR 开发环境及下载流程........................................................................................... 15 2.1 IAR 集成开发环境简介................................................................................................. 15 2.1.1 安装 IAR8.10...................................................................................................... 16 2.2 工程的编辑与修改......................................................................................................... 19 2.2.1 建立一个新工程.................................................................................................. 20 2.2.2 建立一个源文件.................................................................................................. 20 2.2.3 添加源文件到工程.............................................................................................. 21 2.2.4 工程设置.............................................................................................................. 23 2.2.5 源文件的编译...................................................................................................... 28 2.3 仿真调试与下载............................................................................................................. 29 2.3.1 仿真调试器驱动的安装......................................................................................29 2.3.2 程序仿真调试...................................................................................................... 31 2.4 本章小结......................................................................................................................... 34 第 3 章 CC254X 开发板硬件资源详解....................................................................................38 3.1 布局与尺寸..................................................................................................................... 38 3.2 核心板硬件资源............................................................................................................. 39 3.2.1 天线及巴伦匹配电路设计..................................................................................40 3.2.2 晶振电路设计...................................................................................................... 41 3.3 底板硬件资源................................................................................................................. 41 3.3.1 电源电路设计...................................................................................................... 41 3.3.2 LED 电路设计..................................................................................................... 42 3.3.3 TI 五向按键电路设计......................................................................................... 44 3.3.4 串口电路设计/USB 转 UART.......................................................................... 44 3.3.5 LCD12864 电路设计...........................................................................................46 3.3.6 开发板扩展接口设计..........................................................................................47 3.3.7 复位电路.............................................................................................................. 49 3.3.8 Debugger 接口..................................................................................................... 49 3.3.9 mpu6050 六轴传感器 接口..............................................................................50 3.9.10 光敏传感器...................................................................................................... 53 3.9.11 继电器接口...................................................................................................... 54 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 2 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 3.9.12 气体传感器接口................................................................................................ 55 3.9.13 人体感应器接口................................................................................................ 55 3.4 本章小结......................................................................................................................... 56 第 4 章 BLE 协议栈入门.......................................................................................................... 56 4.1 BLE 协议栈.....................................................................................................................56 4.1.1 什么是 BLE 协议栈.......................................................................................... 57 4.1.2 如何使用 BLE 协议栈...................................................................................... 57 4.1.3 BLE 协议栈的安装、编译与下载..................................................................... 57 4.2 BLE 协议栈基础实验:数据传输实验........................................................................ 63 4.2.1 SimpleBLECentral 主机编程.............................................................................. 63 4.2.2 SimpleBLEPeripheral 从机编程...................................................................... 69 4.2.3 Central 和 Peripheral 从机通信测试........................................................74 4.2.4 iPhone LightBlue 与开发板之间的通信实验.................................................. 80 4.2.5 PC 与开发板之间的通过 Btool 的通信实验.................................................. 84 4.3 BLE 数据传输实验剖析................................................................................................ 89 4.3.1 数据发送.............................................................................................................. 90 4.3.2 数据接收.............................................................................................................. 91 4.3.3 从机接收主机发来的数据..................................................................................91 4.4 BLE 数据包的捕获........................................................................................................ 91 4.4.1 如何构建 BLE 协议分析仪.............................................................................. 91 4.4.2 BLE 数据包的结构............................................................................................. 94 4.4.3 数据收发实验回顾.............................................................................................. 98 4.5 本章小结......................................................................................................................... 99 第 5 章 BLE 协议栈开发提高.................................................................................................. 99 5.1 深入理解 BLE 协议栈的构成..................................................................................... 99 5.1.1 BLE 协议层....................................................................................................... 100 5.1.2 拓扑结构和设备状态........................................................................................101 5.1.3 BLE 状态以及连接过程................................................................................... 101 5.1.4 BLE 和快递服务类比....................................................................................... 101 5.1.5 BLE 广播事件................................................................................................... 102 5.1.6 BLE 广播间隔................................................................................................... 102 5.1.7 BLE 扫描事件................................................................................................... 102 5.1.8 BLE 发起连接................................................................................................... 103 5.1.9 BLE 连接参数................................................................................................... 103 5.1.10 BLE 连接事件................................................................................................. 103 5.1.11 Slave 的潜伏.................................................................................................... 104 5.1.12 连接参数的设定..............................................................................................104 5.1.13 终止连接.......................................................................................................... 105 5.1.14 ATT 的 Client/Server 架构............................................................................ 105 5.1.15 ATT 的 AttributeTable Example(属性表示例)......................................... 105 5.1.16 GATT 的 Client/Server 架构......................................................................... 106 5.1.17 GATT 的 Profile 层次结构............................................................................106 5.1.18 GATT Service Example.................................................................................... 107 5.1.19 GATT 的 Characteristic Declaration...............................................................108 5.1.20 GATT 的 Characteristic Configuration...........................................................109 5.1.21 GATT 的 Client Commands............................................................................109 5.2 TI-BLE 协议栈简介......................................................................................................110 5.2.1 协议栈 demo 分类........................................................................................... 110 5.2.2 协议栈 demo 工程目录结构........................................................................... 111 5.2.3 BLE 协议栈执行流程....................................................................................... 113 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 3 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 5.3 BLE 协议栈 OSAL 介绍............................................................................................ 114 5.3.1 OSAL 常用术语.................................................................................................114 5.3.2 OSAL 运行机理.................................................................................................115 5.3.3 OSAL 消息队列.................................................................................................118 5.3.4 OSAL 添加新任务.............................................................................................118 5.3.5 OSAL 应用编程接口.........................................................................................119 5.3.6 OSAL 使用范例分析.........................................................................................120 5.4 硬件抽象层 HAL.........................................................................................................128 5.4.1 硬件抽象层文件目录........................................................................................128 5.4.2 硬件抽象层驱动编译........................................................................................130 5.5 BLE 协议栈的 GAP 和 GATT.................................................................................. 132 5.5.1 通用访问配置文件(GAP)............................................................................132 5.5.2 通用属性配置文件(GATT)..........................................................................133 5.5.3 BLE 协议栈提供的 GAP 和 GATT 的 API 函数.......................................135 5.6 BLE 协议栈中串口打印.............................................................................................. 135 5.6.1 编写 UART 驱动程序..................................................................................... 135 5.6.2 新建协议栈工程................................................................................................ 138 5.6.3 编译下载及测试................................................................................................ 144 5.7 BLE 协议栈里的网络处理器 HostTestRelease......................................................... 144 5.7.1 工程概述............................................................................................................ 144 第 6 章 推荐使用的代码常用工具..........................................................................................146 6.1 SourceInsight-代码阅读和编辑工具:..................................................................146 6.2 Beyond Compare 代码对比工具..................................................................................146 第 7 章 CC254x 基础实验..........................................................................................................147 第 8 章 蓝牙设计问答................................................................................................................ 148 8.1. 问:什么是蓝牙通信?..............................................................................................148 8.2. 问:如果从事蓝牙开发有没有前途?......................................................................148 8.3. 问:蓝牙有什么优势?..............................................................................................149 8.4. 问:蓝牙 4.0 协议和 BLE 是什么?......................................................................... 149 8.5. 问:目前支持蓝牙 4.0 的移动设备有哪些?...........................................................149 8.6. 问:如何开始蓝牙 4.0 的开发呢?...........................................................................149 8.7. 问:刚开始接触蓝牙如何快速上手?......................................................................149 8.8. 问:IAR 调试 CC2540 时程序导入到了芯片的 Flash 中了吗?........................... 149 8.9. 问:当 IAR 调试中出现警告“缺少断点,无法运行到 main()”?.......................150 8.10. 问:为什么 IAR 调试时有很多变量无法查看它的值?.......................................150 8.11. 问:蓝牙协议分层很多且比较复杂,该如何掌握呢?........................................150 8.12. 问:OSAL 是一个操作系统吗?............................................................................ 150 8.13. 问:蓝牙节点是如何组成微微网的呢?................................................................150 8.14. 问:主节点和从节点通信的过程是怎样的呢?....................................................150 8.15. 问:蓝牙通信中两个节点如何交换数据?............................................................151 8.16. 问:Client 和 Server 节点是如何定义呢?............................................................ 151 8.17. 问:Server 是如何提供数据呢?............................................................................ 152 8.18. 问:不明白 Server 提供服务中的 UUID?............................................................ 152 8.19. 问:什么是 Server 提供服务中的句柄呢?........................................................... 152 8.20. 问:为什么 Server 提供的服务中有描述?........................................................... 152 8.21. 问:服务的属性与描述有区别吗?........................................................................152 8.23. 问:如何知道一个服务的 Handle?....................................................................... 153 8.24. 问:Server 可以访问 Client 吗?.............................................................................153 8.25. 问:如果得知电池容量?........................................................................................153 8.26. 问:蓝牙发射信号功率调整会影响通信距离吗?............................................... 154 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 4 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 8.27. 问:如何知道两个蓝牙通信节点之间的距离?....................................................154 8.28. 问:如何获取蓝牙节点的接收 RSSI 值?............................................................. 154 8.29. 问:如何开展读取 RSSI 值的实验?..................................................................... 154 8.30. 问:如何将接收 RSSI 实验数据得到距离计算公式呢?..................................... 155 8.31 问:针对 RSSI 采样值选用什么样的滤波算法?................................................... 156 8.32 问:我也复制 hal_lcd.c 到指定目录了, 为什么 oled 显示屏不显示?..............157 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 5 AmoMcu 开源社区 电装科技 前言 www.AmoMcu.com 专注蓝牙 BLE 开发 第 1 章讲解了 BLE 协议的基础知识,结合我们的 SmartRF 系列 BLE 开发板,这 也是本文的硬件平台。 第2 章对 IAR 开发环境进行了讲解,突出我们实际使用中密切相关的功能,其余予 以略过。 第 3 章对 CC254X 开发板硬件资源进行了讲解。 第 4 章对 Bluetooth-LE 低功耗蓝牙中的数据传输进行了讲解。 第 5 章对 BLE 协议栈中的 OSAL 进行了讲解。 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发技术支持与 项目开发合作(TEL) 18588220515 QQ11940507 Amo ,希望读者阅读完本书后,结合自己 的项目需求,对相应的协议栈源代码精心修改,再实验,只有通过不断的实践学习,才能 真正掌握 BLE 无线网络的开发。 开发板上手指南 好吧, 不少用户都跟Amo我反映说,你的开发板如何使用呀? 怎么连接?怎么编 译?其实,稍微有点单片机开发经验的都能知道如何连接,回想当初我刚接触单片机的时 候也是非常的迷茫,那么,在本文档开篇的地方, 我们来简要地描述一下开发板如何使 用吧。 开发板到手后, 如下图连接,你的开发板就已经能跑起来了, 由上图可见, 我们连接了两个usb到电脑, 那这是为什么呢? 首先,仿真器需要连接一个usb, 用于下载固件、单步调试等。 其次,开发板也连了一个usb线到电脑, 他的作用仅仅是usb转串口,一方面方便我们打印 程序运行信息,另一方面,我们也可以做串口透传程序,让pc上的串口数据通过该接口传 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 6 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 输到蓝牙, 反之亦然。 这是我们的开发板的物理连接, 那么关于各种软件的安装,请看相关章节。 【1】 首先你通过我提供的网盘, 下载到的资料如下(可能稍微有点出入, 但变化不大) 其实 IAR(是软件的编译工具)的安装在本文档的第二章就有描述, 可以跳到那里去参 考。 未完待续----------2014.06.16 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 7 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 第 1 章 BLE 简介 如今,物联网技术得到快速的发展,而物联网技术里的主角则是已发展成熟的 BLE 无线网络,…作为开发者的我们,使用 TI 的软件和硬件资源,即可轻松搭建自己的无线 网络。 1.1 无线网络数据传输协议对比 我们比较熟悉的网络有 Zigee,WIFI、Bluetooth(传统蓝牙,新一代蓝牙也发生了 巨大的变化),他们三者之间的关系可以从下图中看出来。 1-1 三种常见的网络对比 从图 1-1 中可以看到不同的无线数据传输协议在数据传输速率利传输距离有各自的 使用范围。Zigbee、蓝牙以及 WIFI 标准都是工作在 2.4GHz 频段的无线通信标准。下 面将 BLE 与传统蓝牙、WIFI 标准进行简要的比较,帮助读者快速地了解。 ·传统蓝牙数据传输速率小于 3Mbps,典型数据传输距离为 2-10m,蓝牙技术的 典型应用是在两部手机之间进行小量数据的传输。 ·WIFI 最高数据传输速率可达 50Mbps,典型数据传输距离在 30-100m,WIFI 技 术提供了一种 Intemet 的无线接入技术。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 8 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 1.2 蓝牙 4.0 1.2.1 什么是蓝牙 4.0 图 1.1 蓝牙 4.0 logo 和 BLE logo 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,全新的蓝牙 4.0 版本 将三种蓝牙技术(即传统蓝牙,高速蓝牙和低功耗蓝牙技术)合而为一。它集成了蓝牙技 术在无线连接上的固有优势,同时增加了高速蓝牙和低功耗蓝牙的特点,这三个规格可以 组合使用,也可以单独使用,低功耗蓝牙即 ble 是蓝牙 4.0 的核心规范,该技术最大特 点是拥有超低的运行功耗和待机功耗,蓝牙低功耗设备使用一粒纽扣电池可以连续工作数 年之久,可应用与对成本和功耗都有严格要求的无线方案,而且随之智能机的发展将有着 更加广泛的领域。 当前,支持 ble 的智能设备除了 iPhone(iOS 系统)外,Android 也正式加入了 ble 的队伍,从 4.3 系统开始,Android 将提供官方的 API 接口,在不久的将来,BLE 将会 出现在生活中的各个领域。 BLE 是一种标准,该标准定义了短距离、低数据传输速率无线通信所需要的一系列通 信协议。基于 BLE 的无线网络所使用的工作频段为 868MHz、915MHz 和 2.4GHz, 最大数据传输速率为 250kbps。 下面通过一个具体酌例子向读者展示一下 BLE 的具体应用。在病人监控系统中,病 人的血压可以通过特定的传感器检测,因此,可以将血压传感器和 BLE 设备相连,BLE 设备定期检测病人的血压,将血压数据以无线的方式发送到服务器,服务器可以将数据传 输到医生的电脑上,医生就可以根据病人的血压数据进行恰当的诊断。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 9 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 1.2.2 蓝牙 4.0 与传统蓝牙之间的关系 Smart Ready 和 Smart 以及传统蓝牙之间是什么关系呢,请看下图: ☆Smart Ready 可以和 Smart Ready、传统蓝牙,及 Smart 之间相互连接和通信。 ☆传统蓝牙可以和 Smart Ready、传统蓝牙之间连接和通信 ☆Smart 可以和 Smart、Smart Ready 之间连接和通信 很多客户都比较关注 CC2540 是否向下兼容,看了上图就应该明白,答案是否定的, CC2540 是 BLE 单模芯片,属于 Smart,所以只能和 Smart Ready 或者 Smart 之间 连接和通信,CC2540是不兼容传统蓝牙的。 低功耗蓝牙与其他蓝牙兼容性示意 双模设备 1:BasicRate(BR),2:Bluetooth Low Energy (BLE)同时支持 BR 和 BLE 的 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 10 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 设备为 dual-mode(双模)设备,也就是这里讨论的 Smart Ready。Smart Ready 是 蓝牙 4.0 里的主体,一般具有稳定电源供电的设备,如手机,PC 等采用的均是双模的蓝 牙芯片。很多 android手机都表明支持蓝牙 4.0,其实很大部分只支持 Smart Ready 里 的 BR,而软件里不支持LE。 目前 Android4.3 系统才开始全面支持 BLE。 iOS 设备对蓝牙 4.0 支持的最好,只要是 iPhone4S+iOS7.0 和以后的设备均完美 完全支持蓝牙 4.0单模设备那么 Smart 又是什么呢,Smart 是蓝牙 4.0 里的低功耗蓝 牙的商标,就是 Bluetooth Low Energy,缩写为 LE 或者 BLE,网上关于蓝牙 4.0 一 节纽扣电池能够使用一年均是针对 BLE 而言。Smart Ready 功耗还是很大的,需要有稳 定的电源供电,像手机、PC 等设备,而 Smart 由于功耗低,一般使用电池、或纽扣电池 供电。Ti 的 CC2540 便是 BLE 设备。 Smart 的最主要特点是低功耗和低速率。 1.3 Bluetooth Low Energy 1.3.1 BLE 简介 BLE 规范中定义了 GAP(Generic Access Profile)和 GATT(Generic Attribute) 两个基本配置文件。 ☆协议中的 GAP 层负责设备访问模式和进程,包括设备发现,建立连接,终止连接。 初始化安全特征和设备配置。 ☆协议栈中的 GATT 层用于已连接的蓝牙设备之间的数据通信。 1.3.2 BLE 特点 总体而言,BLE 技术具有如下特点: (1)高可靠性 对于无线通信而言,由于电磁波在传输过程中容易受很多因素的干扰,例如,障碍物 的阻挡、天气状况等,因此,无线通信系统在数据传输过程中具有内在的不可靠性。蓝牙 技术联盟 SIG 在指定蓝牙 4.0 规范时已经考虑到了这种数据传输过程中的内在的不确 定性,在射频,基带协议,链路管理协议中采用可靠性措施,包括:差错检测和矫正,进 行数据编解码,数据降噪等,极大地提高了蓝牙无线数据传输的可靠性,另外,使用自适 应调频技术,能最大程度地减少和其他 2.4G 无线电波的串扰。 (2)低成本、低功耗 低功耗蓝牙支持两种部署方式:双模式和单模式,一般智能机上采用双模式,外设一 般采用 BLE 单模,例如采用 CC254x 作为 BLE 从机的计步器血压计和iBeacon基站等 等。 BLE 技术可以应用于 8-bit MCU,目前 TI 公司推出的兼容 BluetoothLE 协议的 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 11 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 SoC 芯片 CC254X 每片价格在 9 元左右, 外接几个阻容器件构成的滤波电路和 PCB 天线即可实现网络节点的构建。Nodic的NRF51822也不过才10元人民币。 低功耗设计:蓝牙 4.0 版本强化了蓝牙在数据传输上的低功耗性能,功耗较传统蓝 牙降低了 90%。 ☆传统蓝牙设备的待机耗电量一直是其缺陷之一,这与传统蓝牙技术采用 16至32个 频道进行广播有很大关系,而低功耗蓝牙仅适用 3 个广播通道,且每次广播时射频的开 启时间也有传统的 22.5ms 减少到 0.6~1.2ms,这两个协议规范的改变,大幅降低了 因为广播数据导致的待机功耗。 ☆低功耗蓝牙设计用深度睡眠状态来替换传统蓝牙的空闲状态,在深度睡眠状态下, 主机 Host 长时间处于超低的负载循环 Duty Cycle 状态,只在需要运作时由控制器来 启动,由于主机较控制器消耗的能源更多,因此这样的设计也节省了更多的能源。 (3)快速启动、瞬间连接 此前蓝牙版本的启动速度非常缓慢,2.1 版本的蓝牙启动连接需要 6s 时间,而蓝牙 4.0 版本仅需要 3ms 即可完成,几乎是瞬间连接。 (4)传输距离极大提供 传统蓝牙传输距离一般 2-10m,而蓝牙 4.0 的有效传输距离可以达到 60~100m, 传输距离提升了 10 倍,极大开拓了蓝牙技术的应用前景。 (5)高安全性 为了保证数据传输的安全性,使用 AES-128 CCM 加密算法进行数据包加密认证, 对于初学阶段,安全性问题可以暂时不考虑。 例如,一般情况下,市面上每节 5 号电池的电量为 1500mA.h,对于两节 5 号 电池供电的终端节点而言,总电量为 3000mAh,即电池以 1mA 电流放电,可以连续 放电3000h(理论值),如果放电电流为 100mA,则可以连续放电 30h。 ·终端节点在数据发送期间需要的瞬时电流是29mA; ·数据接收期间所需要的瞬时电流为24mA。 再加上各种传感器所需的工作电流,为了讨论问题方便,假设各种传感器所需的工作 电流为 30mA(这个工作电流已经很大了),那么数据发送期间所需要的总电流为59mA, 数据接收期间所需要的总电流为54mA,为了讨论问题方便,总电流取 60mA,表面上 2 节 5 号电池可以供终端节点连续工作 50h。 但是,对应实际系统,终端节点对数据的采集一般是定时采集,例如采集 50s 数据, 由于温度变化减慢,所以可以在此假设终端节点每小时工作 50s,定时采集,其他时间都 在休眠(其他时间都在休眠,休眠时工作电流在微安级'所以可以忽略不计)。 那么实际上情况是:系统采用 2 节 5 号电池供电,终端节点工作电流为 60mA, 每小时工作 50s(其他时间都在休眠,休眠时工作电流在微安级,所以可以忽略不计), 可以计算出 2 节 5 号电池可以供终端节点工作时间为:3600h=150 天,即大约半年 时间,这也就是很多介绍 BLE 技术的书籍中提到的“对于 BLE 终端节点使用 2 节 5 号 电池供电,可以工作半年的时间”的理论侬据。请读者注意,上述分析是针对的终端节点, 对于路由节点和协调器而言,要一直供电来确保数据的正确路由,所以一般不谈低功耗问 题。 (3)高安全性 为了保证数据传输的安全性,可以使用 AES-128 加密技术,但是对于初学阶段,安 全性问题可以不予考虑。 (4)低数据速率 无线控制系统对数据传输的可靠性和安全性、系统功耗和成本等方面有着特殊的要 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 12 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 求,因此,目前的无线网络协议没有很好地解决这些特殊的要求。 1.4 BLE 无线网络通信信道分析 天线对于无线通信系统来说至关重要,在日常生活中可以看到各式各样的天线,如手 机天线、电视接收天线等,天线的主要功能可以概括为:完成无线电波的发射与接收。发 射时,把高频电流转换为电磁波发射出去:接收时,将电磁波转换为高频电流。 如何区分不同的电波呢? 一般情况,不同的电波具有不同的频谱,无线通信系统的频谱有几十兆赫兹到几千兆 赫兹,包括了收音机、手机、卫星电视等使用的波段,这些电波都使用空气作为传输介质 来传播,为了防止不同的应用之间相互干扰,就需要对无线通信系统的通信信道进行必要 的管理。各个国家都有自己的无线电管理结构,如美国的联邦通信委员会(FCC)、欧洲的 电信标准委员会(ETSI),我国的无线电管理机构称为中国无线电管理委员会,其主要职责 是负责无线电频率的划分、分配与指配、卫星轨道位置协调和管理、无线电监测、检测、 干扰查处,协调处理电磁干扰事宜和维护空中电波秩序等。 一般情况,使用某一特定的频段霈要得到无线电管理部门的许可,当然,各国的无线 电管理部门也规定了一部分频段是对公众开放的,不需要许可即可使用,以满足不同的应 用需求,这些频段包括 ISM(Industrial. Scientific and Medical、工业、科学和医疗) 频带。 除了 ISM 频带外,在我国,低于 135kHz,在北美、日本等地,低于 400kHz 的 频带也是免费频段。各国对无线频谱的管理不仅规定了 ISM 频带的频率,同时也规定了 在这些频带上所使用的发射功率,在项目开发过程中,需要查阅相关的手册,如我国信息 产业部发布的《微功率(短距离)无线电设备管理规定》。 BLE 工作在 ISM 频带,定义了两个频段,2.4GHz 频段和 896/915MHz 频带。在 IEEE802.15.4 中共规定了 27 个信道: ·在 2.4GHz 频段,共有 16 个信道,信道通信速率为 250kbps: ·在 915MHz 频段,共有 10 个信道,信道通信速率为 40kbps: ·在 868MHz 频段,有 1 个信道,信道通信速率为 20kbpS。 BLE 工作在 2.4GHz 频段,仅适用 3 个广播通道,适用所有蓝牙规范版本通用的 自适应调频技术。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 13 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 自适应调频技术是建立在自动信道质量分析基础上的一种频率自使用和功率自适应 控制相结合的技术,他能使调频通信过程中自动避开被干扰的调频频点并以最小的发射功 率、最低的被截获概率,达到在无干扰的调频信道上长时间保持优质通信的目的。 1.5 BLE 无线网络拓扑结构 BLE 网络可以点对点或者点对多点,一个 ble 主机可以连接多个 ble 从机,组成星 型网络,另外还有一种有广播设备和多个扫描设备组成的广播组结构,不同的网络拓扑对 应不同的应用领域。 1.6 BLE 技术的应用领域 一直以来,蓝牙技术在配件方面的应用都更受关注,但随着移动时代的迅猛发展,BLE 将会有更大的用武之地。事实上,BLE 的低功耗技术,在设计之初便主打医疗与健康监控 等特殊市场。而总的来说,蓝牙 4.0 的发展方向将是运动管理、医疗健康照护、智能仪 表、智能家居以及各种物联网相关应用。 在医疗健康领域,过去不少健康类的应用都是基于蓝牙 2.1 协议去做的,但因受限 于耗电问题而未能掀动太大波澜。BLE 化解这一难题后,市场被强力激活。如由英特尔发 起,并由许多不同医疗技术与保健机构成立的 Continua 健康联盟,便已决议将 BLE纳 入日后的标准传输技术中。现在市场上已有许多采用蓝牙 2.1 规格的医疗产品,如血压 计、血糖仪等,未来,通过 Continua 健康联盟正式认证的蓝牙 4.0 规格的医疗类产品 肯定会越来越多。健康应用方面,BLE 也有广阔的市场空间,其可以与健身设备进行无缝 结合,人们在使用健身器材时,就能通过相关设备如计步器、脉搏机等来传送并记录运动 情况进入移动设备,保存个人的健康信息。 BLE 与安卓的结合更将对当下如火如荼的“物联网”起到推波助澜的作用。目前市场 上的所有智能设备都是物联网生态发展的推动力量, BLE 能够起到打通物联网的和传感 器设备之间的“关节”的节点作用,这将从关键意义上推动物联网的真正发展。由于蓝牙 技术一向关注上层应用,有统一标准,因此各种各样的底层硬件虽出自不同制造厂家,却 可以互联互通,能够形成完善的生态环境,为自身及物联网产品市场都创造了良好环境。 有分析认为,当 BLE 把每个人的安卓或者其他移动设备变为一个传感器标签时,它 所能做的将不仅仅是通过应用软件去找东西,而是将拥有巨大的可拓展性,如它可以通过 App 和传感器来构建一个 P2P 的网络以模拟 GPS 的功能等。总之,当 BLE 传感器无 处不在时,定然蕴藏着巨大商机。 1.7 CC254xEK 开发套件硬件资源概述 进行 BLE 无线网络的开发,需要有相关的硬件和软件,在硬件方面,TI 公司已经推 出了完全支持 BLUETOOTH-LE 协议的 SoC-CC254X,同时也推出了相应的开发套件; 但是价格较高。不适合国内的学习环境,因此我们依照 TI 官方开发板,在最大程度兼容 TI 官方的基础上,我们开发了 CC254xDK(SmartRF 系列)开发套件。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 14 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 1.8 本章小结 本章主要讲述了 BLE 协议的基础知识,此外还有我们的开发套件的简单介绍,使读 者对 BLE 有一个整体的概念。 第 2 章 IAR 开发环境及下载流程 由于 BLUETOOTH-LE 协议的发布,以及相关公司推出的协议栈逐渐完善,市场上出 现了各种各样的 BLE 技术解决方案,但是对于初学 BLE 的用户来说,如何准确地选择一 款适合自己的开发平台至关重要。 下面给出我的建议: ·【1】尽可能选用与 TI 官方接近的开发板 我们的开发板协议栈部分完全兼容 TI 官方,协议栈可以在我们的开发板上直接运 行,无需做任何移植工作,另外,由于 BLE 会经常更新,这样就非常有好处,大家可以 随意升级,而不用担心硬件环境发生变化。 ·【2】带有丰富的开发资料以及实践项目 这里说的丰富的开发资料是指与开发板配套的资料,并非网络上搜集的 BLE 资料, 对于初学者来说,一套能够直接上手的开发板和资料非常重要,不然会大家初学者的积极 性。 ·【3】工作时间提供免费QQ在线技术支持、同时提供www.AmoMcu.com 论坛技术支持 我们提供CC254x系列开发板的主要的目的是为了进行BLE相关的项目合作,所以我们 已经实现了《4.初级基础实验》和《5.中级基础实验》,并不遗余力地尽最大努力逐步完 善《6.高级BLE实践实践》,考虑到每个开发者的学习进程不一致,应该说一对一的技术支 持是零碎 费时费力的,但我 们愿意与你分享经 验,所以我们建立 了AmoMcu开源社区 www.AmoMcu.com, 用来与你们一起推动BLE在国内的快速,这本身也是实现人生价值的体 现方式。 本章主要讲述 lAR 开发环境进行 CC254X SoC 的开发,如果用户已经熟悉 IAR 开 发环境,完全可以跳过本章,直接进行后面章节的学习。 2.1 IAR 集成开发环境简介 IAR Embedded Workbench(又称 EM)的 C 交叉编译器是一款完整、稳定且容易 使用的专业嵌入式应用开发工具,EW 对不同的微处理器提供统一的用户界面,目前可以 支持至少 35 种的 8 位、16 位、32 位的 MCU。 ·完全兼容标准 C 语言 ·内建相应芯片的程序苏荷和内部优化器 ·高效浮点支持 ·内存模式选择 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 15 AmoMcu 开源社区 电装科技 www.AmoMcu.com 2.1.1 安装 IAR8.10 专注蓝牙 BLE 开发 程序安装包位于【\2.开发环境安装及相关驱动\1.IAR\8.10.4】目录下,如下图 双击运行 autorun.exe,然后再跳出的画面中选择第二项, Install IAR Embedded Workbench。 根据提示一路 next,到 Enter User Information 这一项,提示输入 license。 这里使用 keygen 生成 iar 的 license,方法为: 双击下面路径中的 !RUNME.BAT, 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 16 AmoMcu 开源社区 电装科技 出现下图: www.AmoMcu.com 专注蓝牙 BLE 开发 按下 任意键后, 该文件夹下生成了 license.txt, 如下图: 打开 license.txt 复制第一行中的 3288-178-666-7604 这个就是 license number。 注意:以下的Keygen,对某些电脑可能无效,建议大家,不管是xp、win7还是win8, 直接使用命令行的方式,手动破解。在视频教程:开发环境安装一节,有视频指导。 复制 license number 到 iar 安装向导中, 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 17 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 next 后再在 license.txt 中查找 EW8051, 然后把类似如下的几行复制到剪切板, 然后粘贴到 license key 中 , 一路NEXT即可,其中如果你安装了安全卫士如360 安全卫士, 可能会提示你系统修改xxx, 忽略即可。 然后一路 next,安装结束后在开始菜单中找到 IAR 软件 IAR Embedded Workbench 运行的 IAR 软件如下图: 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 18 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 如果在 iar 的使用过程中出现如下错误 这是由于 iar 的 license 未能安装成功,请严格按照软件目录下的几个文档,多数 是由于未能使用管理员运行注册机导致。使用 win7 的用户请注意,上述的方法可能无法 破解,需要在使用第二种命令行的破解方式。 在 解 压 2. 开 发 环 境 安 装 及 相 关 驱 动 \1.IAR\8.10.4\IAR\8.10.4\IAR EW8051 8.10.4.rar文件后, 命令行注册方法文件夹下,有命令行方式的破解教程,务必按照要求 一条一条的做,会成功破解,如果还出现上述 license 错误,基本上可以确定是因为没有 按照要求做。 2.2 工程的编辑与修改 IAR 集成开发环境中,对用工程的编辑操作主要涉及以下几个方面的内容: ·如何建立、保存一个工程 ·如何向工程中添加源文件 ·如果编译文件 ·工程配置在哪里 下面进行详细的讲解 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 19 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 2.2.1 建立一个新工程 打开 iar,点击菜单栏的 Project,在弹出的下拉惨淡中选择 Create New Project, 如图 2-2 所示: 选择“Empty project”,单击 OK,然后会询问保存 project,选择一个合适的目录, 我这里保存的目录在 CC254X 基础测试程序\1_点亮 LED 目录下,然后填入合适的工程 名,然后单击 OK,如下图: 2.2.2 建立一个源文件 单击 New document 按钮,新建一个文本文件。 新建了文件之后单价保存按钮,保存为文件名为:main.c 到 source 目录下(source 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 20 AmoMcu 开源社区 电装科技 www.AmoMcu.com 是在 IAR 工程目录内新建的用来专门保存源码的目录) 专注蓝牙 BLE 开发 2.2.3 添加源文件到工程 右击工程名,选择 add->Add main.c,注意,也可以使用 add files,手动选择 main.c 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 21 AmoMcu 开源社区 电装科技 www.AmoMcu.com 向 main.c 中输入以下代码,然后保存。 专注蓝牙 BLE 开发 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 22 AmoMcu 开源社区 电装科技 #include www.AmoMcu.com //常用的宏定义 /* 位操作,作用是将第 n 位置 1 这在单片机中是非常常见的操作。 */ #define BV(n) (1<<(n)) void delay(unsigned int time) { int i,j; for(i=0;i C/C++ Compiler -> Optimizations 中的 Level 设 置为 None。 8.11. 问:蓝牙协议分层很多且比较复杂,该如何掌握呢? 答:蓝牙协议从应用层到物理层一共分了 8 层,看上去比较复杂且 API 函数很多。首先不 必要知道每一层的具体实现,掌握与应用紧密关联 GAP/GATT(或者 GAP Role 和 GATT Profiles)层就可以满足大部分设计需要;每一层的软件都是通过 OSAL 来调用的,因此需 要了解 OSAL 的基本原理:任务/事件/消息/定时器/动态分配内存;最后把蓝牙通讯过程理 解,将有助于开发。 8.12. 问:OSAL 是一个操作系统吗? 答:OSAL(Operating System Abstraction Layer)操作系统抽象层,它不是一个真正的操作 系统(它没有 Context Switch 上下文切换功能),但它巧妙地组织各任务,支持任务优先级, 任务之间可以通过事件和消息来通信,为任务提供软定时器和动态内存分配。要避免的陷 阱是,应用任务的单个函数运行时间不能太长(如操作大批量数据的 Flash 写),否则它无 法及时调度高优先级的 LL(Link Layer)任务而导致蓝牙通信中断。 8.13. 问:蓝牙节点是如何组成微微网的呢? 答:蓝牙节点组网中,只能存在一个主节点(Central)和多个从节点(Peripheral),从节 点是发出信号者,主节点是扫描且发起连接者。 8.14. 问:主节点和从节点通信的过程是怎样的呢? 答:当从节点发出广告信号(包括设备地址和设备名称之类的附加信息);主节点收到此 广告信号后,向从节点发出扫描请求;当从节点回应扫描时,就完成了设备发现过程。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 150 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 接着主节点向从节点发出连接请求(包括连接时隙、从节点待机次数、连接超时值),从 节点回应连接,就完成了建立连接。 为了安全起见,一些数据的访问需要认证,它的完成是这样的:一方(可以是主节点,也 可以是从节点)向另一方索要 6 位数字的密码,之后,两个节点彼此交换安全密钥用于加 密和认证,此过程称为配对。 认证的过程比较繁琐,BLE 协议支持两节点保存认证的安全密钥(一般是非易失性存储器 中),以便于两节点下次连接后快速认证,这就是绑定技术。 8.15. 问:蓝牙通信中两个节点如何交换数据? 答:这是蓝牙通信中最让初学者迷惑的地方。大部分通信,尤其是 TCP/IP,交换数据的婚 介是数据包,但蓝牙通信中,工程师找不到数据包访问方式,于是就产生疑问。其实蓝牙 最底层也是基于无线数据包交换,只是通过层层封装,交付给工程师的 API 接口就变成了 Client 访问 Server 的方式。 8.16. 问:Client 和 Server 节点是如何定义呢? 答:通俗地说吧,Server(服务器)就是数据中心,Client(客户端)就是访问数据者。特 别说明,它与主/从设备是独立的概念:一个主设备既可以充当 Server,又可以充当 Client; 从设备亦然。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 151 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 8.17. 问:Server 是如何提供数据呢? 答:Server 首先将一个服务按“属性/句柄/数值/描述”这种格式予以组织,然后调用 API 函数 GATTServApp_RegisterService 将服务数据进行注册。举个实例吧,设提供一个电池 电量服务字节,它允许 Client 读取,数据为一个 8 比特无符号数(0~100%),它的组织如 下:02 25 00 19 2A, 这 5 个数据(小端格式)分别是:0x02=只读属性,0x0025=句柄;0x2A19= 服务 UUID。 8.18. 问:不明白 Server 提供服务中的 UUID? 答:UUID(Universal Unique Identifier)全球惟一标识符,本来是 SIC 组织分配给特定蓝牙服 务的标识,如分配 0x2A25 为设备序列号的 UUID,这样任意蓝牙设备都可以通过它得到 另一个设备的序列号。 打个类比,它就像书名,如《现代操作系统》,所有人一看就知道它是计算机大师 Andrew S. Tanenbaum 写的书。 8.19. 问:什么是 Server 提供服务中的句柄呢? 答:句柄(Handle)就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总 得有个先后顺序,某个服务的位置就是它的句柄。还是上面的类比,如果想去图书馆借阅 《现代操作系统》,需要查明该书在哪一层楼,哪个房间,这就是该书的 Hanle。 8.20. 问:为什么 Server 提供的服务中有描述? 答:有些服务是有描述(Descriptor)的,它是用于 Client 配置该服务的功能(通知或者显 示)。像某人没有借到《现代操作系统》该书(可能是被别人借光了),他(她)可以打个 电话给图书馆工作人员,请求一旦该书可以借阅了给他一个通知,这个过程相当于配置该 书的 Descriptor。 8.21. 问:服务的属性与描述有区别吗? 答:有区别,服务的属性是 Server 设置访问权限。就像图书馆的工作人员可以设置《现代 操作系统》仅能在阅览室看不能外借(只读),或者即可以看也可以外借(读/写)。 8.22. 问:Client 如何访问 Server 的服务呢? 答:大致分三类:读取服务的值,需要知道服务的 UUID 或者 Handle;写服务的值,需要 知道服务的 Hanle;写服务描述符,需要知道该 Descriptor 的 Hanle。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 152 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 8.23. 问:如何知道一个服务的 Handle? 答:根据服务的 UUID 调用 API 函数 GATT_ReadUsingCharUUID 协议栈会返回该服务的 Handle。特别注意的是,一个服务的 Descriptor 的 Handle 总是该服 务的 Handle+1,如电池电量服务的 Handle 是 0x0025,那么它的 Descriptor 的 Handle 是 0x0026。 8.24. 问:Server 可以访问 Client 吗? 答:蓝牙通信中,Server 不能直接访问(读/写)Client,但是可以通知(Notification)Client, 通知的前提是 Client 通过写 Descriptor 使能通知功能。例如,某 Server 发现电池电量已经 低于安全阀值,它可以调用 GATT_Notification 通知所有已连接的 Client,但是 Client 接收 后如果处理是它自己的事情。 8.25. 问:如果得知电池容量? 答:任何使用电池供电的设备都必须精确监控电池容量,否则设备可以突然断电而停止工 作,它的基本原理是通过 ADC(模数转换器)计算电池电压。以 CC2540 芯片用一钮扣电 池为例,电池电压从 2.0v~3.0v,即电量的 0%~100%;CC2540 有一 10 比特的 ADC,量 程范围为 0~511,参考电压为 1.25v,最大测量电压为 3.75v,以上信息可以得知:(v/3) / 1.25 * 511 = adc,则 2.0v=273adc,3.0v=409adc,根据下图可以很容易得知 ADC 转换为 电压的公式: Percentage / (X – 273) = 100 / 136 = 25 / 34,变换后为: Percentage = (X - 273) * 25 / 34,为四舍五入提高计算精度则有: Percentage = [(X - 273) * 25 + 33] / 34。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 153 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 8.26. 问:蓝牙发射信号功率调整会影响通信距离吗? 答:会,以 TI 公司的 CC2540 为例,它支持 4 种发射功率选择:4dBm、0dBm、-6dBm 和 -23dBm,按无线电功率定义:LdBm=10lg(Pwr/1mW),以上 4 种分贝值换算成瓦特为: 2.51mW、1mW、0.251mW 和 0.005mW,有效通信距离分别为:30 米、10 米、7 米和 3 米。 8.27. 问:如何知道两个蓝牙通信节点之间的距离? 答:要知道蓝牙通信节点(如手机和蓝牙设备)之间的距离,最容易实现的方法是通过读 取接收 RSSI(Received Signal Strength Indication)值来计算。无线通讯中功率与距离的关系如下: 其中 A 可以看作是信号传输 1 米远时接收信号的 功率,n 是传播因子(它受障碍,温度和湿度等影响),r 是节点之间的距离。当确定了常 数 A 与 n 的值后,距离 r 就可以根据 PR(dBm)计算出来。 8.28. 问:如何获取蓝牙节点的接收 RSSI 值? 答:具体的设备接收 RSSI 值的方法不一样,以 iPhone 手机为例,iOS 提供 API 函数获取 RSSI 值;TI 公司的 CC2540 芯片的 BLE 协议栈中,首先将读取 RSSI 值回调函数挂载到 gapRolesRssiRead_t 类型的指针下,建立连接后,主设备调用 GAPCentralRole_StartRssi(), 从设备调用 GAPRole_SetParameter(GAPROLE_RSSI_READ_RATE, ……)。这样就可以定时读取接收 的 RSSI 值了。 8.29. 问:如何开展读取 RSSI 值的实验? 答:读取 RSSI 值的实验可以这样搭建,主设备固定位置,向从设备发送信号,从设备 LED 光和 Buzzer 报警为通信成功,逐次移动从设备,而获取 RSSI 值随物理距离之间的关系。 下图是笔者做实验的数据: Distance(m) 1 2 3 4 5 6 7 8 9 10 RSSI(dBm) -47 -59 -73 -80 -80 -79 -85 -88 -86 -87 Loss(p) 009 11 27 2 50 32 22 49 实验器材为 2 块 CC2540 芯片,主芯片发射功率为 4dBm(2.51mW),Loss 是通信节点中失 败次数。 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 154 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 8.30. 问:如何将接收 RSSI 实验数据得到距离计算公式 呢? 答:最好的工具是 EXCEL 软件,以上表中的实验数据和 EXCEL 2007 为例。首先选中 Distance 和 RSSI 两行,点击“插入->散列图”,软件会自动生成如下图: 选取其中任意点,点右键,“添加趋势线->对数”,将会出现下图: 可见 RSSI 与距离的关系是比较符合指数函数,再点击“显示公式” 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 155 AmoMcu 开源社区 电装科技 www.AmoMcu.com 专注蓝牙 BLE 开发 此时得到指数函数公式为:y = -49.53 – 17.7 ln (x),再把自然对数换成 10 常用对数,则 有:y = -49.53 – 40.71 lg (x)。通过以上几步就轻松得到 RSSI 与距离之间的计算公式。 8.31 问:针对 RSSI 采样值选用什么样的滤波算法? 答:RSSI 采样值遵循以下特点:有个别的脉冲干扰引起极大值和极小值的出现,其他采样 数据值沿平均值分布,比较适合的算法是:滑动防脉冲干扰平均滤波法。它的原理是,设 有 N 个单位的队列,用新的采样值覆盖旧的采样值,去除队列中最大值和最小值后,再计 算队列中采样数据的平均值。用 C 语言描述如下: static INT8S Filter(INT8S chVal) { #define FIFO_NUM 10 INT8S chMinVal, chMaxVal, chTemp; INT16S nCnt, nSum; static INT8S static INT8S s_chIx = 0, s_chIsFull = FALSE; s_achBuf[FIFO_NUM]; /* Save the NEW value, kick out the OLDest one */ s_achBuf[s_chIx] = chVal; if (++s_chIx >= FIFO_NUM) { s_chIx = 0; /* Wrap to 1th unit */ s_chIsFull = TRUE; } /* Number of sampled data less than N */ if (!s_chIsFull) { nSum = 0; for (nCnt = 0; nCnt < s_chIx; ++nCnt) { 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 156 AmoMcu 开源社区 电装科技 www.AmoMcu.com nSum += s_achBuf[nCnt]; } 专注蓝牙 BLE 开发 return (INT8S)(nSum / s_chIx); } /* Get the SUM and Max. and Min. */ chMaxVal = chMinVal = nSum = 0; for (nCnt = 0; nCnt < FIFO_NUM; ++nCnt) { chTemp = s_achBuf[nCnt]; nSum += chTemp; if (chTemp > chMaxVal) { chMaxVal = chTemp; } else if (chTemp < chMinVal) { chMinVal = chTemp; } } /* Calculate the average */ nSum -= (chMaxVal + chMinVal); /* SUB Max. and Min. */ nSum /= (FIFO_NUM - 2); /* Get average */ return (INT8S)nSum; } 8.32 问:我也复制 hal_lcd.c 到指定目录了, 为什么 oled 显示屏不显示? 答: 请注意您工程的编译选项, 如下图即可显示: 技术支持与项目开发合作(TEL) 18588220515 QQ11940507 Amo 157

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。