回答

收藏

Telink-泰凌微电子 B91通用开发套件 蓝牙BLE测试

泰凌微电子 泰凌微电子 1646 人阅读 | 0 人回复 | 2022-11-09

Telink-泰凌微电子 B91通用开发套件 蓝牙BLE测试
最近被下载这个问题一直在下载不进开发板问题所困扰,总是提示下载不成功,最终是板子IC虚焊引起下载不成功,最近五天一直在找这个问题,现在下载程序时,是用手按住IC下载,现在今天一直是这样操作,感觉 有点很高无懒。
下面我上的代码注释就少写一点,我想这两天多写两篇测评。
首先在官网下载DEMO,B91M_SINGLE_BLE_SDK
B91M_SINGLE_BLE_SDK.zip (9.67 MB, 下载次数: 2)

打开这个软件(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);


下面上电脑连接的操作步骤:
首先电脑如果有蓝牙功能,那就可以当蓝牙来用,在设备中找到蓝牙和其它设备,再添加蓝牙。

连接成功后的蓝牙,这里名字我没有完全改过来,所以连接时与连接成功的名字显示不一样。

下面是手机连接蓝牙与信号



下面上传电脑与手机操作时的视频,有点远,有点小,看的不是好清楚




分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条