藍牙芯片----BK34341開發筆記------快速入門(2)

應該是512K,flash.

1.準備工具

BK3431Q開發板、通用聯機下載器

2.軟件工具

keil arm,版本V5.12以上

通用聯機下載器上位機軟件Beken_ProgramVer4

二、編譯

1.keil的安裝

需要在keil官網下載安裝support for ARM7/9支持包。

2.編譯工程

編譯成功後在目錄\output\app下,會生成幾個bin文件,用聯機下載器燒錄帶CRC的bin文件,如圖的bin

三、燒錄

1.燒錄接口

硬件SPI接口

 2.燒錄程序

打開聯機下載器上位機軟件Beken_ProgramVer4.此時界面是灰色的

 

插上連機下載器後,識別下載器,界面正常

 選擇SIP CHIP頁面

 下載成功顯示

 四、運行

用BLE Tool工具調試

五,調試

1.藍牙名稱在哪裏修改

user_config.h裏面有兩個宏定義

APP_DFLT_DEVICE_NAME

APP_SCNRSP_DATA

修改這兩個宏,可以修改藍牙名稱

2.UUID怎麼修改?

GATT的用戶自定義UUID,是FFF0服務,在fff0s.h下修改一下的三個宏定義,可以修改UUID值
 

ATT_USER_SERVER_FFF0=ATT_UUID_16(0xFFF0),
ATT_USER_SERVER_CHAR_FFF1=ATT_UUID_16(0xFFF1),
ATT_USER_SERVER_CHAR_FFF2=ATT_UUID_16(0xFFF2),

3.修改UUID讀寫屬性

修改fff0s.c

const struct attm_desc fff0_att_db[FFF0S_IDX_NB] =
{
    // FFF0 Service Declaration
    [FFF0S_IDX_SVC]            =   {ATT_DECL_PRIMARY_SERVICE, PERM(RD, ENABLE), 0, 0},

	[FFF0S_IDX_FFF2_LVL_CHAR]  =   {ATT_DECL_CHARACTERISTIC, PERM(RD, ENABLE), 0, 0},
    //  Characteristic Value
    [FFF0S_IDX_FFF2_LVL_VAL]   =   {ATT_USER_SERVER_CHAR_FFF2,PERM(WRITE_COMMAND, ENABLE), PERM(RI, ENABLE), FFF0_FFF2_DATA_LEN *sizeof(uint8_t)},

	// fff1 Level Characteristic Declaration
	[FFF0S_IDX_FFF1_LVL_CHAR]  =   {ATT_DECL_CHARACTERISTIC, PERM(RD, ENABLE), 0, 0},
    // fff1 Level Characteristic Value
    [FFF0S_IDX_FFF1_LVL_VAL]   =   {ATT_USER_SERVER_CHAR_FFF1, PERM(WRITE_COMMAND, ENABLE) , PERM(RI, ENABLE), FFF0_FFF1_DATA_LEN * sizeof(uint8_t)},

	// fff1 Level Characteristic - Client Characteristic Configuration Descriptor
	[FFF0S_IDX_FFF1_LVL_NTF_CFG] = {ATT_DESC_CLIENT_CHAR_CFG,  PERM(RD, ENABLE)|PERM(WRITE_REQ, ENABLE), 0, 0},

};/// Macro used to retrieve permission value from access and rights on attribute.

 4.廣播間隔修改

修改user_config.h

//廣播參數配置
/// Advertising channel map - 37, 38, 39
#define APP_ADV_CHMAP           (0x07)
/// Advertising minimum interval - 100ms (160*0.625ms)
#define APP_ADV_INT_MIN         (80)
/// Advertising maximum interval - 100ms (160*0.625ms)
#define APP_ADV_INT_MAX         (80)
/// Fast advertising interval
#define APP_ADV_FAST_INT        (32)

5.連接間隔參數修改

連接間隔關係到藍牙功耗,廣播間隔越大,功耗越小

//最小連接間隔
#define BLE_UAPDATA_MIN_INTVALUE		10
//最大連接間隔 
#define BLE_UAPDATA_MAX_INTVALUE		10
//連接Latency
#define BLE_UAPDATA_LATENCY				0
//連接超時
#define BLE_UAPDATA_TIMEOUT				600

6.藍牙連接成功的回調函數

連接成功回調函數是gapc_connection_req_ind_handler,程序運行到這裏,說明藍牙連接成功。

7.藍牙斷開連接回調函數

藍牙斷開回調函數是gapc_disconnect_req_ind_handler,程序運行到這裏,說明藍牙已經斷開。

8.藍牙設備如何發數據到手機端?

以GATT工程爲例,FFF0服務中,FFF1爲nodify屬性,用nodify發送數據到手機。函數app_fff1_send_lvl可以發送數據到手機端。

在app_fff0.c

static int fff1_level_upd_handler(ke_msg_id_t const msgid,
                                      struct fff0s_fff1_level_upd_rsp const *param,
                                      ke_task_id_t const dest_id,
                                      ke_task_id_t const src_id)
{
	if(param->status == GAP_ERR_NO_ERROR)
	{
		//uint8_t buf[128];
		//memset(buf, 0xcc, 128);
		//app_fff1_send_lvl(buf, 128);
		app_fff0_env.send_status=0;
	}
	
    return (KE_MSG_CONSUMED);
}

9.如何接受手機發下來的數據?

以GATT工程爲例,FFF0的服務中,FFF2爲write屬性,用write從手機發數據到藍牙設備

函數接口fff2_writer_req_handler接收數據後,並打印出來

static int fff2_writer_req_handler(ke_msg_id_t const msgid,
                                     struct fff0s_fff2_writer_ind *param,
                                     ke_task_id_t const dest_id,
                                     ke_task_id_t const src_id)
{
    // Drop the message
	UART_PRINTF("FFF2 param->value = 0x ");
	
	for(uint8_t i = 0;i < param->length;i++)
	{
		UART_PRINTF("%02x ",param->fff2_value[i]);
	}
	UART_PRINTF("\r\n");
		
    return (KE_MSG_CONSUMED);
}

10.如何打開芯片的sleep模式

打開芯片的sleep模式,可以大大降低芯片的功耗,但是由於芯片頻繁休眠,可能對某些外部響應不及時,比如GPIO中斷響應慢,按鍵檢測不及時,UART數據漏數據等等。

在keil工程中,打開rwip_config.h文件,在configuration wizard頁面中,把CFG_SLEEP打勾即可打開。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章