低功耗蓝牙CH571,CH573,CH582,CH583配对过程中开启配对码使用教程

低功耗蓝牙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


相关推荐

成语词典> 困兽之斗
输入法和控件指南
5、梦幻西游画魂资质多少算好
如何查询手机亲情网成员号码
戴尔如何u盘装系统 戴尔u盘启动装系统教程
酒馆战棋第10赛季“潜能迸发”现已上线