TA的每日心情 | 开心 2025-8-15 21:04 |
|---|
签到天数: 730 天 连续签到: 1 天 [LV.9]以坛为家II
翰林
- 积分
- 23605
|
Telink-泰凌微电子 B91通用开发套件 蓝牙BLE测试
最近被下载这个问题一直在下载不进开发板问题所困扰,总是提示下载不成功,最终是板子IC虚焊引起下载不成功,最近五天一直在找这个问题,现在下载程序时,是用手按住IC下载,现在今天一直是这样操作,感觉 有点很高无懒。
下面我上的代码注释就少写一点,我想这两天多写两篇测评。
首先在官网下载DEMO,B91M_SINGLE_BLE_SDK
打开这个软件(Telink_RDS_v323)--文件---导入上面压缩包中的工程,具体细节略过,请看上两篇帖子。
编译一下,叫构建项目。再下载到开发板中。
下面我们来看一下代码:初始化这些我就不弄上来了,那个就略过。
首先是蓝牙的名字:
const u8 tbl_scanRsp [] = {
0x08, 0x09, 'm', 'e', 'i', 'y', 'a', 'o', 'w',
};
下面是功能的相关定义,可以见app_config.h这个文件。
#if (UI_KEYBOARD_ENABLE) // if test pure power, kyeScan GPIO setting all disabled
//--------------- KeyMatrix PB2/PB3/PB4/PB5 -----------------------------
#define MATRIX_ROW_PULL PM_PIN_PULLDOWN_100K
#define MATRIX_COL_PULL PM_PIN_PULLUP_10K
#define KB_LINE_HIGH_VALID 0 //dirve pin output 0 when keyscan, scanpin read 0 is valid
#define CR_VOL_UP 0xf0 ////
#define CR_VOL_DN 0xf1
/**
* @brief Normal keyboard map
*/
#define KB_MAP_NORMAL { {CR_VOL_DN, VK_1}, \
{CR_VOL_UP, VK_2}, }
//////////////////// KEY CONFIG (EVK board) ///////////////////////////
#define KB_DRIVE_PINS {GPIO_PC2, GPIO_PC0}
#define KB_SCAN_PINS {GPIO_PC3, GPIO_PC1}
//drive pin as gpio
#define PC2_FUNC AS_GPIO
#define PC0_FUNC AS_GPIO
//drive pin need 100K pulldown
#define PULL_WAKEUP_SRC_PC2 MATRIX_ROW_PULL
#define PULL_WAKEUP_SRC_PC0 MATRIX_ROW_PULL
//drive pin open input to read gpio wakeup level
#define PC2_INPUT_ENABLE 1
#define PC0_INPUT_ENABLE 1
//scan pin as gpio
#define PC3_FUNC AS_GPIO
#define PC1_FUNC AS_GPIO
//scan pin need 10K pullup
#define PULL_WAKEUP_SRC_PC3 MATRIX_COL_PULL
#define PULL_WAKEUP_SRC_PC1 MATRIX_COL_PULL
//scan pin open input to read gpio level
#define PC3_INPUT_ENABLE 1
#define PC1_INPUT_ENABLE 1
#if (UI_LED_ENABLE)
/**
* @brief Definition gpio for led
*/
#define GPIO_LED_WHITE GPIO_PB6
#define GPIO_LED_GREEN GPIO_PB5
#define GPIO_LED_BLUE GPIO_PB4
#define GPIO_LED_RED GPIO_PB7
#define LED_ON_LEVAL 1 //gpio output high voltage to turn on led
#define PB7_FUNC AS_GPIO
#define PB6_FUNC AS_GPIO
#define PB5_FUNC AS_GPIO
#define PB4_FUNC AS_GPIO
#define PB7_OUTPUT_ENABLE 1
#define PB6_OUTPUT_ENABLE 1
#define PB5_OUTPUT_ENABLE 1
#define PB4_OUTPUT_ENABLE 1
#endif
#elif (UI_BUTTON_ENABLE)
//SAMPLE SELECT DONGLE BOARD
#undef PM_DEEPSLEEP_RETENTION_ENABLE
#define PM_DEEPSLEEP_RETENTION_ENABLE 0 //dongle demo no need deepSleepRetention
//--------------- Button -------------------------------
/**
* @brief Definition gpio for button detection
*/
#define SW1_GPIO GPIO_PB2
#define SW2_GPIO GPIO_PB3
#define PB2_FUNC AS_GPIO
#define PB3_FUNC AS_GPIO
#define PB2_INPUT_ENABLE 1
#define PB3_INPUT_ENABLE 1
#define PULL_WAKEUP_SRC_PB2 PM_PIN_PULLUP_10K
#define PULL_WAKEUP_SRC_PB3 PM_PIN_PULLUP_10K
#if (UI_LED_ENABLE)
/**
* @brief Definition gpio for led
*/
//--------------- LED ----------------------------------
#define GPIO_LED_RED GPIO_PB4
#define GPIO_LED_WHITE GPIO_PB1
#define GPIO_LED_GREEN GPIO_PB0
#define GPIO_LED_BLUE GPIO_PB7
#define GPIO_LED_YELLOW GPIO_PB5
#define PB4_FUNC AS_GPIO
#define PB1_FUNC AS_GPIO
#define PB0_FUNC AS_GPIO
#define PB7_FUNC AS_GPIO
#define PB5_FUNC AS_GPIO
#define PB4_OUTPUT_ENABLE 1
#define PB1_OUTPUT_ENABLE 1
#define PB0_OUTPUT_ENABLE 1
#define PB7_OUTPUT_ENABLE 1
#define PB5_OUTPUT_ENABLE 1
#define LED_ON_LEVAL 1 //gpio output high voltage to turn on led
#endif
void task_connect (u8 e, u8 *p, int n)
{
bls_l2cap_requestConnParamUpdate (8, 8, 99, 400); // 1 S
#if (UI_LED_ENABLE)
gpio_write(GPIO_LED_RED, LED_ON_LEVAL); //yellow light on
#endif
}
void task_terminate(u8 e,u8 *p, int n) //*p is terminate reason
{
if(*p == HCI_ERR_CONN_TIMEOUT){
}
else if(*p == HCI_ERR_REMOTE_USER_TERM_CONN){ //0x13
}
else if(*p == HCI_ERR_CONN_TERM_MIC_FAILURE){
}
else{
}
#if (UI_LED_ENABLE)
gpio_write(GPIO_LED_RED, !LED_ON_LEVAL); //yellow light off
#endif
}
_attribute_ram_code_ void task_suspend_exit (u8 e, u8 *p, int n)
{
rf_set_power_level_index (MY_RF_POWER_INDEX);
}
#if (UI_KEYBOARD_ENABLE)
_attribute_data_retention_ int key_not_released;
#define CONSUMER_KEY 1
#define KEYBOARD_KEY 2
_attribute_data_retention_ u8 key_type;
/**
* @brief this function is used to process keyboard matrix status change.
* @param[in] none
* @return none
*/
void key_change_proc(void)
{
u8 key0 = kb_event.keycode[0];
u8 key_buf[8] = {0,0,0,0,0,0,0,0};
key_not_released = 1;
if (kb_event.cnt == 2) //two key press, do not process
{
}
else if(kb_event.cnt == 1)
{
if(key0 >= CR_VOL_UP ) //volume up/down
{
key_type = CONSUMER_KEY;
u16 consumer_key;
if(key0 == CR_VOL_UP){ //volume up
consumer_key = MKEY_VOL_UP;
gpio_write(GPIO_LED_WHITE,1);
}
else if(key0 == CR_VOL_DN){ //volume down
consumer_key = MKEY_VOL_DN;
gpio_write(GPIO_LED_GREEN,1);
}
blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);
}
else
{
key_type = KEYBOARD_KEY;
key_buf[2] = key0;
if(key0 == VK_1)
{
gpio_write(GPIO_LED_BLUE,1);
}
else if(key0 == VK_2)
{
gpio_write(GPIO_LED_BLUE,1);
}
blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);
}
}
else //kb_event.cnt == 0, key release
{
gpio_write(GPIO_LED_WHITE,0);
gpio_write(GPIO_LED_GREEN,0);
key_not_released = 0;
if(key_type == CONSUMER_KEY)
{
u16 consumer_key = 0;
blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);
下面上电脑连接的操作步骤:
首先电脑如果有蓝牙功能,那就可以当蓝牙来用,在设备中找到蓝牙和其它设备,再添加蓝牙。
连接成功后的蓝牙,这里名字我没有完全改过来,所以连接时与连接成功的名字显示不一样。
下面是手机连接蓝牙与信号
下面上传电脑与手机操作时的视频,有点远,有点小,看的不是好清楚
|
|