CH58x三模模组方案(CH555主控)

发布时间 2023-08-04 10:50:40作者: SweetTea_lllpc

前言:

通用三模键盘&三模鼠标(三模模组)通讯协议可以参考该博客,提供了串口发送命令帧的具体详解。本博客基于CH582通讯协议基础上增加CH555作为主控,通过串口发送命令帧控制CH582。

通过CH555控制CH582的优点:CH582本身只有键扫/三模标准键盘等功能。如需要实现灯光效果,则可以通过CH555实现。

目前CH58x三模模组只有串口可以控制,因此CH555也通过串口发送命令帧控制。

一、命令帧数据

const UINT8 CMD_free[] = 		{0x55, 0x40, 0x00, 0x95};		//用于MCU使用自带USB功能时,将模组切换到空闲状态

const UINT8 CMD_usb[] = 		{0x55, 0x41, 0x00, 0x96};		//模组切换到USB模式
const UINT8 CMD_rf[] = 			{0x55, 0x42, 0x00, 0x97};		//模组切换到2.4G模式

const UINT8 CMD_ble_1[] = 		{0x55, 0x43, 0x00, 0x98};		//模组切换到蓝牙设备1
const UINT8 CMD_ble_2[] = 		{0x55, 0x44, 0x00, 0x99};		//模组切换到蓝牙设备2
const UINT8 CMD_pair[] = 		{0x55, 0x48, 0x00, 0x9d};		//模组在2.4G或蓝牙模式时,进入配对状态

const UINT8 CMD_kbd_a[] =    {0x55, 0x81, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1e};    //按键A按下(不释放)
const UINT8 CMD_capslock[] = {0x55, 0x81, 0x08, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x17};    //切换大小写Capslock
const UINT8 CMD_release[] =  {0x55, 0x81, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde};    //按键释放

const UINT8 CMD_adc[] = 		{0x55, 0x4a, 0x00, 0x9f};					//用于客户使用模组采集电量,返回电压值
const UINT8 CMD_reload[] = 		{0x55, 0xe0, 0x00, 0x35};					//恢复模组出厂设置
const UINT8 CMD_dongle_reload[] = 	{0x55, 0xe1, 0x00, 0x36};				//恢复Dongle出厂设置
const UINT8 CMD_le[] = 			{0x55, 0xc8, 0x02, 0x0f, 0x00, 0x2e};		//例如5s后进入低功耗,则数据为0x05 0x00,
																																			//默认连接状态中5s无数据进入低功耗,BLE和2.4G模式配对1分钟未配对完成进入低功耗
const UINT8 CMD_sleep_disable[] = {0x55, 0xcb, 0x01, 0x00, 0x21};			 //不允许模组进入睡眠模式
const UINT8 CMD_sleep_enable[] =  {0x55, 0xcb, 0x01, 0x01, 0x22};			 //允许模组睡眠模式

const UINT8 CMD_response[] = 	{0x55, 0xc6, 0x01, 0x00, 0x1c};				 //配置为0x00关闭应答,立即生效
																																			//配置为0x01开启应答,上报信息如果没有收到应答,将会间隔1.875ms重传数据,最多重传3次

const UINT8 CMD_rf_trans[] = 	{0x55, 0x88, 0x12, 0x00, 0x00, 0x00, 0x00    //透传给USB或dongle上位机,此命令与上报均无应答,USB或dongle转发给上位机的数据只包含数据内容
							   , 0x00, 0x00, 0x00, 0x00
							   , 0x00, 0x00, 0x00, 0x00
							   , 0x00, 0x00, 0x00, 0x00
							   , 0x00, 0x00
							   , 0xef};

二、串口发送

CH555官方例程中只展示了单个字节发送,发送数组只需要获取数组长度并循环发送即可。

void UART1_SendStr( UINT8 *str, UINT8 len )   
{
    while( len ){
        CH555UART1SendByte( *str++ );
		len--;
    }
}

void main(void)
{
	CfgFsys();
	mDelaymS(20);
	mInitSTDIO();                                                             /* 为了让计算机通过串口监控演示过程 */
	CH555UART0Alter();                                                         //串口0引脚映射

	CH555UART1Init();                                                          //串口1初始化
	CH555UART1Alter();                                                         //串口1引脚映射   

	UART1_SendStr(CMD_free, (UINT16)sizeof(CMD_free));                         //串口1发送数组
	
	while(1);
}

三、具体效果展示