这一章在干嘛?

USB 鼠标键盘实验:USB HID 类、Boot Mouse/Keyboard 子类、报表描述符。从此 MCU 可以当鼠标或键盘。

41.1 USB 鼠标键盘简介

41.2 硬件设计

41.3 程序设计

41.4 下载验证

41.1 USB 鼠标键盘简介

USB HID(Human Interface Device)= 人机接口设备类。

F407 通过 OTG FS + 中间件可作 HID:

  • Mouse:Boot Mouse 子类,发送 4 字节(按键 + X/Y 偏移);
  • Keyboard:Boot Keyboard 子类,发送 8 字节(修饰键 + 保留 + 6 个按键码)。

原书图 41.1.1:HID 报表描述符示例原书图 41.1.1:HID 报表描述符示例

Boot 子类:BIOS 不需要装驱动就能识别,适合做启动盘、维护工具。

41.2 硬件设计

USB OTG FS 接口即可。

41.3 程序设计

41.3.1 CubeMX 配置

  • USB_DEVICE → Class = Human Interface Device (HID)
  • 选 Mouse / Keyboard

41.3.2 关键代码(鼠标)

typedef struct {
    uint8_t buttons;
    int8_t  x;
    int8_t  y;
    int8_t  wheel;
} HID_MOUSE_Report;

HID_MOUSE_Report rep = {0};
rep.x = 5; rep.y = 0;
USBD_HID_SendReport(&hUsbDeviceFS, &rep, sizeof(rep));

原书图 41.3.2.1:USB 鼠标报表数据格式原书图 41.3.2.1:USB 鼠标报表数据格式

原书图 41.3.2.2:USB 键盘报表数据格式原书图 41.3.2.2:USB 键盘报表数据格式

41.4 下载验证

按 KEY0/KEY1 → 屏幕光标移动;按 KEY_UP → 发送「Enter」键入字符。

键码:USB HID 键码不是 ASCII。例如「A」= 0x04,「Enter」= 0x28。

原书图 41.4.1:USB 键盘键码表原书图 41.4.1:USB 键盘键码表