【BLE】CC2541之连接时广播

本篇博文最后修改时间:2017年01月06日,11:06。


一、简介

本文以SimpleBLEPeripheral工程为例,介绍实现连接时广播的方法。


二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF开发板(主芯片CC2541)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:[email protected]

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
暂无

2、在进行本文步骤前,请先 实现以下博文:
暂无


五、基础知识

1、连接时广播有什么用?

答:自己想了两个理论上可行的功能,能不能实现还是要实践才知道,欢迎大家给我留言、私信补充:

用途一:广播出连接状态

主机1连上从机后,从机可通过改变广播数据,来告知主机2“本从机已经被连接”。


用途二:手机修改广播内容

主机1连上从机后,主机1给从机发送广播数据,从机再把广播数据广播出去。(需要配对加密,否则大家都可连接)


六、实验步骤

1、修改IAR设置中的宏

将xPLUS_BROADCASTER改为PLUS_BROADCASTER。


注:只修改这一句,手机连接时CC2541就仍能广播。但是手机断开后会出现两个问题:

1)CC2541的显示屏会显示“disconnected”。

2)CC2541的广播停了。


2、解决上面两个问题

修改peripheralStateNotificationCB函数的GAPROLE_WAITING代码(simpleBLEPeripheral.c中)

【BLE】CC2541之连接时广播_第1张图片

上述俩问题的原因是:当手机断开连接后,由于此时广播的相关变量仍显示从机在广播,所以协议栈的判断开广播的代码会开启不起来。

所以在这里从机超时后不进行当前广播状态的判断,直接紧接着开广播。


注:此时又出现了新的问题,也就是只有手机连接CC2541第一次时能“连接时广播”,第二次连接就没有广播数据了。


3、解决上述的“只在第一次连接时能广播”问题

修改peripheralStateNotificationCB函数的GAPROLE_CONNECTED代码(simpleBLEPeripheral.c中)

【BLE】CC2541之连接时广播_第2张图片

默认是只会在第一次连接时默认开广播,把红框中的语句注释掉以后每次连接时都能自动开广播。


七、注意事项

暂无


八、实验现象

注:用packet sniffer抓包。

1、CC2541上电广播时:广播包的间隔约为103127us(100ms),LCD显示“Adverting”。


2、手机连接CC2541时:有时候packet sniffer会看不到连接中的广播包,需要packet sniffer软件“停止-开始”地重开一下。此时广播包间隔约为1290036us(1.2S),LCD显示“Connected Adverting”,手机仍可正常与CC2541通信数据。


3、手机断开CC2541时:CC2541重新开始广播,间隔约为105628us(100ms),LCD显示“Aderting”。

实现了连接时广播。

因此,实验成功


你可能感兴趣的:(BLE-CC2541)