[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评】+实现USBHID的键盘鼠标手柄

[复制链接]
 楼主| WoodData 发表于 2020-12-6 12:16 | 显示全部楼层 |阅读模式
    看了一下USBDevice设备例子,改了一个USBHID的设备。实现了键盘鼠标手柄三合一例子。默认开始是手柄,可以通过手柄输出切换成键盘或者鼠标输出数据。用PB12,PB13,PB14,PB15做按键输入模拟。

main:
  1.         if(ctrl_data == 0x80)
  2.         {
  3.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12))
  4.             {
  5.                 pEP1_IN_DataBuf[6] |= 0x01;
  6.             }else
  7.             {
  8.                 pEP1_IN_DataBuf[6] &= ~0x01;
  9.             }

  10.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))
  11.             {
  12.                 pEP1_IN_DataBuf[6] |= 0x02;
  13.             }else
  14.             {
  15.                 pEP1_IN_DataBuf[6] &= ~0x02;
  16.             }

  17.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))
  18.             {
  19.                 pEP1_IN_DataBuf[6] |= 0x04;
  20.             }else
  21.             {
  22.                 pEP1_IN_DataBuf[6] &= ~0x04;
  23.             }

  24.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15))
  25.             {
  26.                 pEP1_IN_DataBuf[6] |= 0x08;
  27.             }else
  28.             {
  29.                 pEP1_IN_DataBuf[6] &= ~0x08;
  30.             }
  31.             DevEP1_IN_Deal( 7 );
  32.         }else if(ctrl_data == 0x20)
  33.         {
  34.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12))
  35.             {
  36.                 pEP2_IN_DataBuf[0] |= 0x01;
  37.             }else
  38.             {
  39.                 pEP2_IN_DataBuf[0] &= ~0x01;
  40.             }

  41.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))
  42.             {
  43.                 pEP2_IN_DataBuf[0] |= 0x02;
  44.             }else
  45.             {
  46.                 pEP2_IN_DataBuf[0] &= ~0x02;
  47.             }

  48.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))
  49.             {
  50.                 pEP2_IN_DataBuf[0] |= 0x04;
  51.             }else
  52.             {
  53.                 pEP2_IN_DataBuf[0] &= ~0x04;
  54.             }

  55.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15))
  56.             {
  57.                 pEP2_IN_DataBuf[0] |= 0x08;
  58.             }else
  59.             {
  60.                 pEP2_IN_DataBuf[0] &= ~0x08;
  61.             }
  62.             DevEP2_IN_Deal( 8 );
  63.         }else if(ctrl_data == 0x40)//
  64.         {
  65.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12))
  66.             {
  67.                 pEP3_IN_DataBuf[1] = 1;
  68.             }else if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))
  69.             {
  70.                 pEP3_IN_DataBuf[1] = 0xff;
  71.             }else
  72.             {
  73.                 pEP3_IN_DataBuf[1] = 0;
  74.             }

  75.             if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))
  76.             {
  77.                 pEP3_IN_DataBuf[2] = 1;
  78.             }else if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15))
  79.             {
  80.                 pEP3_IN_DataBuf[2] = 0xff;
  81.             }else
  82.             {
  83.                 pEP3_IN_DataBuf[2] = 0;
  84.             }
  85.             DevEP3_IN_Deal( 4 );
  86.         }

  87.         Delay_Ms(10);
  88.     }


具体输出控制在:
  1. void DevEP1_OUT_Deal( UINT8 l )
  2. {
  3.     ctrl_data = pEP1_OUT_DataBuf[0];

  4.     if(pEP1_OUT_DataBuf[0] & 0x01)
  5.     {
  6.         GPIO_WriteBit(GPIOA,  GPIO_Pin_0, Bit_SET);
  7.     }else
  8.     {
  9.         GPIO_WriteBit(GPIOA,  GPIO_Pin_0, Bit_RESET );
  10.     }
  11.     if(pEP1_OUT_DataBuf[0] & 0x02)
  12.     {
  13.         GPIO_WriteBit(GPIOA,  GPIO_Pin_1, Bit_SET );
  14.     }else
  15.     {
  16.         GPIO_WriteBit(GPIOA,  GPIO_Pin_1, Bit_RESET );
  17.     }
  18. }

1.jpg
2.jpg


下面是测试程序:
游客,如果您要查看本帖隐藏内容请回复


大头哥 发表于 2020-12-6 12:45 | 显示全部楼层
kankan
coslight 发表于 2020-12-6 16:16 | 显示全部楼层
学习一下
发呆二极管 发表于 2020-12-10 03:50 | 显示全部楼层
学习一下,感谢分享源码~
nvjwiciw659 发表于 2020-12-13 17:43 | 显示全部楼层
学习了,跟着老哥做试试
zhifeng 发表于 2021-2-23 11:43 | 显示全部楼层
学习下
真爱吴迪迪 发表于 2021-2-23 15:45 | 显示全部楼层
感觉好像空中飞鼠的样子。
自己造声卡 发表于 2021-2-23 16:28 | 显示全部楼层
空中飞鼠的感觉,不错的应用,我也在我的开发板上测试一下。
gchd1992 发表于 2021-3-25 17:03 | 显示全部楼层
下下来看看下下来看看下下来看看下下来看看
火星小强 发表于 2021-4-26 15:28 | 显示全部楼层
跟大神学习
kkzz 发表于 2021-5-3 12:25 | 显示全部楼层
如何使用winusb 访问 hid 设备
hudi008 发表于 2021-5-3 12:26 | 显示全部楼层
谢谢楼主分享的。   
lzmm 发表于 2021-5-3 12:26 | 显示全部楼层
usbhid 端点0如何发送数据
minzisc 发表于 2021-5-3 12:26 | 显示全部楼层
usbhid驱动如何源源不断的获取usb鼠标
selongli 发表于 2021-5-3 12:27 | 显示全部楼层
USB通信使用什么芯片
fentianyou 发表于 2021-5-3 12:29 | 显示全部楼层
使用HID协议的设备调试
xiaoyaodz 发表于 2021-5-3 12:30 | 显示全部楼层
         
febgxu 发表于 2021-5-3 12:30 | 显示全部楼层
只需要填写VID、PID和PVN数值
sdlls 发表于 2021-5-3 12:30 | 显示全部楼层
下载看看代码   
pixhw 发表于 2021-5-3 12:31 | 显示全部楼层
这个上位机是怎么写的  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

4781

帖子

28

粉丝