在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播。
在peripheral例程中,一直是以50ms的周期进行广播,使用手机软件扫描可以获取蓝牙mac地址和蓝牙名字。
1.如何开启和关闭广播:
uint8_t initial_advertising_enable = TRUE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable); //开启广播
uint8_t initial_advertising_enable = FALSE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable); //关闭广播
2.广播的内容如何设置:
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData); //广播包
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData); //扫描应答包
下图为广播包内容:
下图为扫描应答包内容:
广播包和扫描应答包的最大长度都是31字节,
包的格式是长度+类型+数据,类型也计算一个长度,在修改蓝牙名字的时候需要注意,将名字改长或者改短需要将长度也一起修改,且需要和此函数名字一致:GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName);
类型有很多种,一般常用的有0x01,对应着广播的发现模式,0x09,对应着蓝牙名字,还有0xff,对应着自定义信息,用户可以在里面放一些辨识度信息。
3.广播间隔如何设置:
#define DEFAULT_ADVERTISING_INTERVAL 80
uint16_t advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue(TGAP_DISC_ADV_INT_MIN, advInt);
GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt);
在例程中直接通过修改宏就可以了,单位是0.625ms,80就是50ms。