前面两篇文章介绍了simpleBlePeripheral工程,介绍了BLE Slave角色,接下来为大家介绍BLE Master(主机)角色。
讲解使用的SDK是在官方SDK基础上,精简无关功能后方便介绍和学习。
下载地址:simpleBleCentral低功耗蓝牙主机开发SDK-智能家居文档类资源-CSDN下载
1、参数介绍
1.1 main.c
int main(void)
{
watchdog_config(WDG_2S);
g_system_clk = SYS_CLK_DLL_48M;//SYS_CLK_XTAL_16M;//SYS_CLK_DLL_48M;
g_clk32K_config = CLK_32K_RCOSC;//CLK_32K_XTAL;//CLK_32K_XTAL,CLK_32K_RCOSC
#if(FLASH_PROTECT_FEATURE == 1)
hal_flash_lock();
#endif
drv_irq_init();
init_config();
extern void ll_patch_master(void);
ll_patch_master();
hal_rfphy_init();
hal_init();
#if(_BUILD_FOR_DTM_==1)
//if(hal_gpio_read(P33))
rf_phy_direct_test();
#endif
LOG_INIT();
LOG("SDK Version ID %08x \n",SDK_VER_RELEASE_ID);
LOG("rfClk %d rcClk %d sysClk %d tpCap[%02x %02x]\n",g_rfPhyClkSel,g_clk32K_config,g_system_clk,g_rfPhyTpCal0,g_rfPhyTpCal1);
LOG("sizeof(struct ll_pkt_desc) = %d, buf size = %d\n", sizeof(struct ll_pkt_desc), BLE_CONN_BUF_SIZE);
LOG("sizeof(g_pConnectionBuffer) = %d, sizeof(pConnContext) = %d, sizeof(largeHeap)=%d \n",\
sizeof(g_pConnectionBuffer), sizeof(pConnContext),sizeof(g_largeHeap));
app_main();
}
mian中需要配置的是:
(1)看门狗(可选);
(1)主频:在本工程中,主频不能使用SYS_CLK_XTAL_16M主频,在连接时会出现异常,必须选择SYS_CLK_DBL_32M、SYS_CLK_DLL_48M、SYS_CLK_DLL_64M为主频。
1.2 simpleBleCentral.c
先介绍本文件中比较重要的参数。
(1)设置搜索设备数量
Master在每个扫描周期中,能发现的不同Slave设备的最大数量。
// Maximum number of scan responses
#define DEFAULT_MAX_SCAN_RES 20
(2)设置扫描周期,单位ms
Master在一个扫描周期完成后,进入下一个扫描周期。
// Scan duration in ms
#define DEFAULT_SCAN_DURATION 400
(3)设置扫描设备类型
设置Master发现Slave广播类型,Genral、limited或者不做限制。
// Discovey mode (limited, general, all)
#define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL
(4)参数更新请求及连接参数
是否可以在Master与Slave连接成功后,更新连接参数。
// Whether to enable automatic parameter update request when a connection is formed
#define DEFAULT_ENABLE_UPDATE_REQUEST FALSE
// Minimum connection interval (units of 1.25ms) if automatic parameter update request is enabled
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL 24
// Maximum connection interval (units of 1.25ms) if automatic parameter update request is enabled
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL 48
// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_UPDATE_SLAVE_LATENCY 0
// Supervision timeout value (units of 10ms) if automatic parameter update request is enabled
#define DEFAULT_UPDATE_CONN_TIMEOUT 20
(5)连接目标
设置连接目标设备名,根据设备名连接从机。
设置主机是按照从机的设备名还是MAC地址发起连接。
设置RSSI值是为了过滤远距离设备,实际应用中如需搜索到远距离设备,可以将RSSI值设置取消。
static const uint8 peerDeviceName[GAP_DEVICE_NAME_LEN] = "zfmbj146449";
static bool findDevByName=FALSE;
static gapDevRec_t simpleBlePeerTarget;
static int8 rssi_target = -40;