自己整理的USB-HID鼠标、键盘通讯格式,欢迎指教【详细说明】自己整理的USB-HID鼠标、键盘通讯格式,欢迎指教想用STM32做个无线键鼠遥控、找了好几天没有找到完整的USB鼠标键盘协议介绍。最后自己收集整理了一份,希望对需要的朋友有所帮助。废话不多说,进入正题:鼠标发送给PC的数据每次4个字节BYTE1BYTE2BYTE3BYTE4定义分别是:BYTE1--|--bit7:1表示Y坐标的变化量超出-256~255的范围,0表示没有溢出|--bit6:1表示X坐标的变化量超出-256~255的范围,0表示没有溢出|--bit5:Y坐标变化的符号位,1表示负数,即鼠标向下移动|--bit4:X坐标变化的符号位,1表示负数,即鼠标向左移动|--bit3:恒为1|--bit2:1表示中键按下|--bit1:1表示右键按下|--bit0:1表示左键按下BYTE2--X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量BYTE3--Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量BYTE4--滚轮变化。由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2BYTE3的正负表示鼠标移动方向键盘发送给PC的数据每次8个字节BYTE1BYTE2BYTE3BYTE4BYTE5BYTE6BYTE7BYTE8定义分别是:BYTE1--|--bit0:LeftControl是否按下,按下为1|--bit1:LeftShift是否按下,按下为1|--bit2:LeftAlt是否按下,按下为1|--bit3:LeftGUI是否按下,按下为1|--bit4:RightControl是否按下,按下为1|--bit5:RightShift是否按下,按下为1|--bit6:RightAlt是否按下,按下为1|--bit7:RightGUI是否按下,按下为1BYTE2--暂不清楚,有的地方说是保留位BYTE3--BYTE8--这六个为普通按键键盘经过测试。例如:键盘发送一帧数据02000x040x0500000000表示同时按下了LeftShift+‘a’+‘b’三个键对于键码和PS2的键盘有所不同,具体请看附件。USBHIDtoPS2ScanCode对照表.pdfUSBHIDtoPS2ScanCodeTranslationTable.pdf(133.25KB)2011.6.23补充说明补充对于键盘BYTE2的说明:参照百合网()键盘的报告描述符,如下/*******************************************************************************************///这里只列出了第二个字节的说明//这样的数据段个数为10x95,0x01,//REPORT_COUNT(1)//每个段长度为8bits0x75,0x08,//REPORT_SIZE(8)//输入用,常量,值,绝对值0x81,0x03,//INPUT(Cnst,Var,Abs)//上面这8个bit是常量,设备必须返回0/*******************************************************************************************/这里只是指明了这是一个以字节为单位的输入数据,并没有指明它的取值范围。在HID1.11协议的AppendixB--B.1Protocol1(Keyboard)的报告描述符中也有这样的说明(HID1.11协议的59页)/*******************************************************************************************/ReportCount(1),ReportSize(8),Input(Constant),;ReservedbyteReportCount(5),ReportSize(1),/*******************************************************************************************/在注释中说明,这个字节是保留字节。这里我也把HID1.11传上来给大家研究。