你好,
参考图1,我已经将信标间隔配置为1s,突发电流指示BLE广播。我放大了示波器的时间刻度,每个脉冲电流包含3个峰值电流,如图2所示。为什么会有3个峰值电流?信标每秒广播3次吗?如果是,如何配置广播次数?
另外,我还想广播一个字节来指示每个信标中的一个特性,是否需要修改APP_ADV_func()中APP_DELF_ADV_DATA的内容?谢谢。
比尔,杰基
你好,杰克肖,
BLE规范指出一个外围设备应该在所有三个BLE信道中进行广告,因此您看到的是在一个广告间隔期间每个信道上分别(37、38、39)的传输。您可以将设备配置为仅向一个频道播发,但这将减少主机找到您的设备的机会。您可以通过更改gapm\u start\u advertise\u cmd结构的channel\u map成员并放置要播发的频道0x07启用所有三个频道中的播发,并分别为频道37、38、39启用0x00、0x02、0x04。
关于广告字符串,是的,这是为DSPS项目提供数据的#define,但是您也需要更改adv数据的长度,并且在放置附加字节时要小心,您必须遵守BLE规范的广告字符串约定。
谢谢你的对话
嗨,MT\u dialog,
谢谢你的回复。启用3个频道时,我是否可以增加每个频道之间的广告间隔?e、 g.为每个频道或任何参数添加广告后的延迟,以更改此间隔。谢谢。
您可以通过更改BLE\u ADVTIM\u REG来操纵广告频道之间的间隔,在信标示例中有一个实现,请检查BLE\u ADVTIM\u set()函数。寄存器的值以usec为单位,它是一个0-13位寄存器。
我在app\u sps\u device\u project.c中添加了include“ble\u blecore.h”并修改了以下代码,但我发现广告频道之间的间隔没有变化。请告知。
#定义BLE\u ADVTIM\u ADDR 0x400000A0#定义BLE\u ADVTIM\u偏移量0x000000A0#定义索引0x00000028#定义BLE\u ADVTIM\u RESET 0x00000000
__INLINE uint32\u t ble\u advtim\u get(空){返回注册表(BLE\u ADVTIM\u ADDR);}
__内联void ble\u advtim\u set(uint32\u t值){注册地址(BLE\u ADVTIM\u ADDR,value);
void app\u adv\u func(结构gapm\u start\u advised\u cmd*cmd){//设备名称长度uint8\u t设备名称\u长度;设备名称可用空间;uint8设备名称温度buf[64];
cmd->op.code=GAPM\u ADV\u UNDIRECT;cmd->op.addr\u src=GAPM\u PUBLIC\u addr;cmd->intv\u min=APP\u ADV\u INT\u min;cmd->intv\u max=APP\u ADV\u INT\u max;cmd->channel\u map=APP\u ADV\u CHMAP;
cmd->info.host.mode=GAP\u GEN\u DISCOVERABLE;ble_advtim_set(8192);//<--加上这个可以增加广告频道的间隔/*-----------------------------------------------------------------------------------*设置广告数据和扫描响应数据*---------------------------------------------------------------------------------*/cmd->info.host.adv\u data\u len=APP\u adv\u data\u MAX\u SIZE;cmd->info.host.scan\u rsp\u data\u len=APP\u scan\u RESP\u data\u MAX\u SIZE;
检查beacon示例,函数在哪里被调用,以及它是如何被使用的,并尝试在您的项目中复制它,不要只是将函数放在您的广告函数中。我已经检查与灯塔项目和价值,你提供的应该是好的,你应该看到一个相当长的间隔广告渠道。
你好,杰克肖,
BLE规范指出一个外围设备应该在所有三个BLE信道中进行广告,因此您看到的是在一个广告间隔期间每个信道上分别(37、38、39)的传输。您可以将设备配置为仅向一个频道播发,但这将减少主机找到您的设备的机会。您可以通过更改gapm\u start\u advertise\u cmd结构的channel\u map成员并放置要播发的频道0x07启用所有三个频道中的播发,并分别为频道37、38、39启用0x00、0x02、0x04。
关于广告字符串,是的,这是为DSPS项目提供数据的#define,但是您也需要更改adv数据的长度,并且在放置附加字节时要小心,您必须遵守BLE规范的广告字符串约定。
谢谢你的对话
嗨,MT\u dialog,
谢谢你的回复。启用3个频道时,我是否可以增加每个频道之间的广告间隔?e、 g.为每个频道或任何参数添加广告后的延迟,以更改此间隔。谢谢。
你好,杰克肖,
您可以通过更改BLE\u ADVTIM\u REG来操纵广告频道之间的间隔,在信标示例中有一个实现,请检查BLE\u ADVTIM\u set()函数。寄存器的值以usec为单位,它是一个0-13位寄存器。
谢谢你的对话
嗨,MT\u dialog,
我在app\u sps\u device\u project.c中添加了include“ble\u blecore.h”并修改了以下代码,但我发现广告频道之间的间隔没有变化。请告知。
#定义BLE\u ADVTIM\u ADDR 0x400000A0
#定义BLE\u ADVTIM\u偏移量0x000000A0
#定义索引0x00000028
#定义BLE\u ADVTIM\u RESET 0x00000000
__INLINE uint32\u t ble\u advtim\u get(空)
{
返回注册表(BLE\u ADVTIM\u ADDR);
}
__内联void ble\u advtim\u set(uint32\u t值)
{
注册地址(BLE\u ADVTIM\u ADDR,value);
void app\u adv\u func(结构gapm\u start\u advised\u cmd*cmd)
{
//设备名称长度
uint8\u t设备名称\u长度;
设备名称可用空间;
uint8设备名称温度buf[64];
cmd->op.code=GAPM\u ADV\u UNDIRECT;
cmd->op.addr\u src=GAPM\u PUBLIC\u addr;
cmd->intv\u min=APP\u ADV\u INT\u min;
cmd->intv\u max=APP\u ADV\u INT\u max;
cmd->channel\u map=APP\u ADV\u CHMAP;
cmd->info.host.mode=GAP\u GEN\u DISCOVERABLE;
ble_advtim_set(8192);//<--加上这个可以增加广告频道的间隔
/*-----------------------------------------------------------------------------------
*设置广告数据和扫描响应数据
*---------------------------------------------------------------------------------*/
cmd->info.host.adv\u data\u len=APP\u adv\u data\u MAX\u SIZE;
cmd->info.host.scan\u rsp\u data\u len=APP\u scan\u RESP\u data\u MAX\u SIZE;
你好,杰克肖,
检查beacon示例,函数在哪里被调用,以及它是如何被使用的,并尝试在您的项目中复制它,不要只是将函数放在您的广告函数中。我已经检查与灯塔项目和价值,你提供的应该是好的,你应该看到一个相当长的间隔广告渠道。
谢谢你的对话