妖妖妖 发表于 2020-4-5 10:53

CH552多媒体键盘程序实现不了,求大佬帮忙看看

单片机用的是CH552e,看着好像是枚举成功了,返回多媒体按键数据不懂怎么弄,我也不懂是不是枚举的问题。普通键盘部分也没法返回按键数据了,看了圈圈教你玩USB也还是一头雾水,不知道问题出在哪。
程序我传附件里了。

qqhuacong 发表于 2020-4-5 23:14

我也是刚学的。USB这个第一要了解协议。第二他是硬件完成任务。按键值到Enp2IntIn()完成任务 你用串口打印信息。用可能你中断问题。我加了中断就出问题了

妖妖妖 发表于 2020-4-7 11:20

qqhuacong 发表于 2020-4-5 23:14
我也是刚学的。USB这个第一要了解协议。第二他是硬件完成任务。按键值到Enp2IntIn()完成任务 你 ...

我确认了,我这不是定时器中断的问题,我加了关定时器中断,我换了份多媒体按键报表描述符有响了就是不懂用什么格式回按键数据,HID相关的协议也看过一些,还是一头雾水

妖妖妖 发表于 2020-4-7 12:23

是我回传的数据格式有问题吗,求大佬讲解
/**键盘HID值上传函数**/
void HIDValueHandle1()
{
    TR0 = 0;
        FLAG = 0;
        Enp1IntIn();                                //USB设备模式端点1的中断上传
        while(FLAG == 0);
        FLAG = 0;       
        memset(&HIDKey,0,8);
        Enp1IntIn();               
        while(FLAG == 0);
        TR0 = 1;               
}
/**多媒体按键HID值上传函数**/
void HIDValueHandle2()
{
    TR0 = 0;
        Enp2IntIn();                                //USB设备模式端点2的中断上传       
        memset(&HIDKeyMUL,0,4);
        Enp2IntIn();
        TR0 = 1;               
}

/**按键行为函数**/
void KeyAction(unsigned char keyCode)
{
        if(keyCode == 0x31)//按键A
        {
          HIDKeyMUL = 0x06;
                HIDKeyMUL = 0xB6;
                if(Ready)
      {
            HIDValueHandle2();
      }
        }
        if(keyCode == 0x32)//按键B
        {
           HIDKeyMUL = 0x06;
                HIDKeyMUL = 0xE9;
                if(Ready)
      {
            HIDValueHandle2();
      }
        }
        if(keyCode == 0x33)        //按键C       
        {
                HIDKey = 0x06;

                if(Ready)
      {
            HIDValueHandle1();
      }
        }
}
/*多媒体键盘报表描述符*/
UINT8C KeyMULRepDesc =       
{
        0x05, 0x0C, //USAGE_PAGE 用途页选择0x0c(用户页)
        0x09, 0x01, //USAGE 接下来的应用集合用于用户控制
        0xA1, 0x01, //COLLECTION 开集合
                0x15, 0x00, //LOGICAL_MINIMUM (0)
                0x25, 0x01, //LOGICAL_MAXIMUM (1)
                0x0A, 0xEA, 0x00,                /* Usage( Vol- ) */
                0x0A, 0xE9, 0x00,                /* Usage( Vol+ ) */
                0x0A, 0xE2, 0x00,                /* Usage( Mute ) */
                0x0A, 0x8A, 0x01,                /* Usage( Email ) */
                0x0A, 0x83, 0x01,                /* Usage( Media ) */
                0x0A, 0x23, 0x02,                /* Usage( WWW Home ) */
                0x0A, 0xCD, 0x00,                /* Usage( Play/Pause ) */
                0x0A, 0xB6, 0x00,                /* Usage( Scan Pre Track ) */
                0x0A, 0xB5, 0x00,                /* Usage( Scan Next Track ) */
                0x0A, 0xB7, 0x00,                /* Usage( Stop ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x00, 0x00,                /* Usage( NULL ) */
                0x0A, 0x11, 0x22,                /* Usage( NULL ) */
                0x75, 0x01, //REPORT_SIZE (1)
                0x95, 0x18, //REPORT_COUNT (24)
                0x81, 0x02, //INPUT (Data,Var,Abs)输入24bit数据
                0x05, 0x01, //USAGE_PAGE 用途页0x01(普通桌面)
                        0x19, 0x00, //USAGE_MINIMUM 用途最小值0x00(未定义)
                        0x29, 0x83, //USAGE_MAXIMUM 用途最大值0x83(系统唤醒)
                        0x15, 0x00, //LOGICAL_MINIMUM (0)
                        0x25, 0x83, //LOGICAL_MAXIMUM (1)
                        0x75, 0x08, //REPORT_SIZE (8)
                        0x95, 0x01, //REPORT_COUNT (1)
                        0x81, 0x00, //INPUT (Data,Ary,Abs)输入1字节数据
        0xC0//END_COLLECTION 闭合集合
};

妖妖妖 发表于 2020-4-7 12:24

妖妖妖 发表于 2020-4-7 12:23
是我回传的数据格式有问题吗,求大佬讲解
/**键盘HID值上传函数**/
void HIDValueHandle1()


漏了一点,按键A、B按下一直是音量-

WoodData 发表于 2020-4-7 15:58

妖妖妖 发表于 2020-4-8 13:07

WoodData 发表于 2020-4-7 15:58


非常感谢大佬

妖妖妖 发表于 2020-4-9 11:56

程序实现了,附件里是改好的,有需要的就自行下载吧,用的是2个端点

qqhuacong 发表于 2020-4-15 23:32

妖妖妖 发表于 2020-4-9 11:56
程序实现了,附件里是改好的,有需要的就自行下载吧,用的是2个端点

你搞定就好。

東南博士 发表于 2021-10-8 11:35

使用一个端点,有没有可能实现?

妖妖妖 发表于 2021-10-9 18:48

東南博士 发表于 2021-10-8 11:35
使用一个端点,有没有可能实现?

能,要区分ID
页: [1]
查看完整版本: CH552多媒体键盘程序实现不了,求大佬帮忙看看