低功耗蓝牙CH582配对过程中如何开启配对码使用教程

发布时间 2023-04-11 14:41:38作者: ZDeST

蓝牙设备理论上均可实现该功能,本篇以Hid键盘为例,

本篇以串口中断的方式为例发送密码,↓

uint8_t TxBuff[] = "This is a tx exam\r\n";/*TxBuff用来测试串口中断是否正常使用*/
uint8_t RxBuff[];/*RxBuff用来接收串口发来的密码*/
uint8_t trigB;/*串口一包数据缓存几个字节*/

紧接着在main函数中配置串口中断,这边程序中我使用的串口为串口3,↓

 

    GPIOA_SetBits(GPIO_Pin_5);
    GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PU);      // RXD-配置上拉输入
    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
    UART3_DefInit();
    UART3_SendString(TxBuff, sizeof(TxBuff));
    UART3_ByteTrigCfg(UART_7BYTE_TRIG);
    trigB = 7;
    UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
    PFIC_EnableIRQ(UART3_IRQn);

 然后写下串口中断程序,↓

/* 串口3中断 */
uint8_t Rcvlen; __INTERRUPT __HIGH_CODE
void UART3_IRQHandler(void) { if(UART3_GetITFlag()) { Rcvlen = UART3_RecvString(RxBuff); UART3_SendString(RxBuff, Rcvlen); } }

我们回到Hid_dev.c文件中外部声明这两个变量Rcvlen和RxBuff[ ]使用,↓

extern uint8_t Rcvlen;
extern uint8_t RxBuff[];

定义PASSKEY_EVE事件,↓

 给hidEmuConnHandle这个连接处理函数在head文件中声明一下,以便我们hiddev.c函数能够使用,↓

 接下来我们在蓝牙部分写上配对码接收功能,↓

①改宏定义,↓

 ②编写PASSKEY事件,↓

 

 

 

if ( events & PASSKEY_EVT )
     {
        //printf("enter passcode\n\r");
       uint32 passkey=0 ;
       if((Rcvlen==6))
       {
           printf("rcvlen:%d\n\r",Rcvlen);
         for(u8 i=0;i<6;i++)  //密码是10进制数输入,需要进制进制转换
         {
             for(u8 i=0;i<6;i++)
             {
                 printf("%x ",RxBuff[i]);
             }
             printf("\r\n");
           passkey=10*passkey;
           passkey+=(RxBuff[i]-0x30);
         }
         PRINT("passkey:%d\r\n",passkey);
         Rcvlen =0;
         GAPBondMgr_PasscodeRsp( hidEmuConnHandle, SUCCESS, passkey ); //输入密码
       }
       else {
         tmos_start_task(hidDevTaskId,PASSKEY_EVT,400);//如果没有接收到密码,重新开启任务
       }
       return ( events ^ PASSKEY_EVT );
     }

 ③应用这个Passkey事件,↓

④本以为修改到这里就可以了,结果配对过程中一直配对不成功,寻找原因,开启配对码之后这个地方不能再使用自身地址,需屏蔽此处代码,↓

⑤到这里,代码部分就修改完毕了,接下来编译程序无误,烧录进我们的CH582芯片,进PC端蓝牙配对界面,↓

 

 

 

 

到此配对流程结束。


 

如果按照本篇博客修改仍然未成功,这边把修改完的程序放在百度网盘中,有意者自取。

百度网盘链接:https://pan.baidu.com/s/1OZhh1-9YD5YHJNcaJl5JwA
提取码:kbwf