一:实验目的 利用USB模拟HID功能,通过键盘或者按键移动鼠标 USB HID知识介绍: USB HID类是USB设备的一个标准设备类,包括的设备非常多。HID类设备定义它属于人机交互操作的设备,用于控制计算机操作的一些方面,如USB鼠标、USB键盘、USB游戏操纵杆等。但HID设备类不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。 USB HID设备的一个好处就是操作系统自带了HID类的驱动程序,而用户无需去开发驱动程序,只要使用API系统调用即可完成通信。 主芯片支持:1 个 USB 2.0 全速控制器,支持工作在主机(Host) 和设备(Device)模式,
遵循全速 USB 设备(12 Mbps)标准, 内置 16 个双向端点,内置 PHY 由于例程中没有USB的底层驱动,需要我们自行下载:https://mindsdk.mindmotion.com.cn 首次登录时需要注册一下:注册也非常简单 2:选择自己常用的编译环境,选择开发板,点击生产代码 3:下载tinyusb->tud_hid_keyboard中的底层代码 4:打开代码进行修改测试 void hid_task(void); /*------------- MAIN -------------*/ int main(void) { BOARD_Init(); tusb_init(); while (1) { hid_task(); tud_task(); } } static void send_hid_report(uint8_t report_id, uint32_t btn) { // skip if hid is not ready yet if ( !tud_hid_ready() ) return; switch(report_id) { case REPORT_ID_KEYBOARD: { // use to avoid send multiple consecutive zero report for keyboard static bool has_keyboard_key = false; if ( btn ) { uint8_t keycode[6] = { 0 }; keycode[0] = HID_KEY_A; tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); has_keyboard_key = true; }else { // send empty key report if previously has key pressed if (has_keyboard_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); has_keyboard_key = false; } } break; // case REPORT_ID_MOUSE: // { // int8_t const delta = 5; // // no button, right + down, no scroll, no pan // tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); // } // break; default: break; } } 实现现象: 打开设备管理可以正常识别到USB模拟HID设备
|