stm32cubemx越来越方便了,之前用nucleo-f767做个了usb复合设备,键盘、鼠标、游戏摇杆的复合体https://www.stmcu.org.cn/module/forum/thread-610675-1-1.html,可以模拟多个设备,这样做个usb键盘就可以全键无冲了,usb协议设计之初坑爹了 一把,导致一般的usb键盘无法做到全键无冲。
别问我为什么要同时按那么多按键 
nucleo的st-link关键时刻很给力,手头一时没有其他的仿真器。
这个家伙可不便宜,那个邮票空的是92大洋的mpu9250模块,模块集成了姿态解算,彻底解决了Yaw漂移问题,通过串口输出,arduino也可方便的连接了。
配置就很简单了,把usb配成hid设备。自己在usbd_custom_hid_if.c加个报告描述符,告诉电脑你是啥。
上个usb键盘的报告:
- 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
- 0x09, 0x06, // USAGE (Keyboard)
- 0xa1, 0x01, // COLLECTION (Application)
- 0x05, 0x07, // USAGE_PAGE (Keyboard/Keypad)
- 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
- 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
- 0x15, 0x00, // LOGICAL_MINIMUM (0)
- 0x25, 0x01, // LOGICAL_MAXIMUM (1)
- 0x95, 0x08, // REPORT_COUNT (8)
- 0x75, 0x01, // REPORT_SIZE (1)
- 0x81, 0x02, // INPUT (Data,Var,Abs)
- 0x95, 0x01, // REPORT_COUNT (1)
- 0x75, 0x08, // REPORT_SIZE (8)
- 0x81, 0x03, // INPUT (Cnst,Var,Abs)
- 0x95, 0x06, // REPORT_COUNT (6)
- 0x75, 0x08, // REPORT_SIZE (8)
- 0x25, 0xFF, // LOGICAL_MAXIMUM (255)
- 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
- 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
- 0x81, 0x00, // INPUT (Data,Ary,Abs)
- 0x25, 0x01, // LOGICAL_MAXIMUM (1)
- 0x95, 0x02, // REPORT_COUNT (2)
- 0x75, 0x01, // REPORT_SIZE (1)
- 0x05, 0x08, // USAGE_PAGE (LEDs)
- 0x19, 0x01, // USAGE_MINIMUM (Num Lock)
- 0x29, 0x02, // USAGE_MAXIMUM (Caps Lock)
- 0x91, 0x02, // OUTPUT (Data,Var,Abs)
- 0x95, 0x01, // REPORT_COUNT (1)
- 0x75, 0x06, // REPORT_SIZE (6)
- 0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
复制代码
直接拷贝到CUSTOM_HID_ReportDesc_FS里面的/* USER CODE BEGIN 0 */ 和 /* USER CODE END 0 */ 之间就可以用了。
|