CH58x三模模组方案(CH555主控)
前言:
通用三模键盘&三模鼠标(三模模组)通讯协议可以参考该博客,提供了串口发送命令帧的具体详解。本博客基于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);
}