低功耗蓝牙CH571,CH573,CH582,CH583配对过程中开启配对码使用教程
CH571,CH573,CH582,CH583写法一致,本篇以CH582为例介绍蓝牙配对码使用方法;
蓝牙HID设备理论上均可实现该功能,这里就以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/1edQ11RBZ208HHYPb9KFPqw?pwd=ng0o
提取码:ng0o