鼠标发送给PC的数据每次4个字节
BYTE1 BYTE2 BYTE3 BYTE4
定义分别是:
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表示右键按下 0表示右键抬起
|--bit0: 1表示左键按下 0表示左键抬起
BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 -- 滚轮变化。0x01表示滚轮向前滚动一格;0xFF表示滚轮向后滚动一格;0x80是个中间值,不滚动。
试验数据:
BYTE2 X坐标变化量,当BYTE1的bit4为0的时候,0x01~0x7F为向左移动,0x81~0xFF为向右移动,0x00,0x80为不移动。BYTE1的bit4为1的时候,依旧。试验数据是跟BYTE1的bit4没什么关系。
BYTE3的变化跟BYTE2的一样。
主要代码如下
while (1)
{
/* USER CODE END WHILE */
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET)
{
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
do{
;
}while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HID_Buffer[0] = 0x02;//按下右键
HID_Buffer[1] = 0;
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;//不按下任何
HID_Buffer[1] = 30;//鼠标向右边移动
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;
HID_Buffer[1] = 0;
HID_Buffer[2] = 30;//鼠标向左边移动
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x01;//单击
HID_Buffer[1] = 0;
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;//松开
HID_Buffer[1] = 0;
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;//回位置
HID_Buffer[1] = 0;
HID_Buffer[2] = (uint8_t)-30;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;//不按下任何
HID_Buffer[1] = (uint8_t)-30;//鼠标向下移动
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
HID_Buffer[0] = 0x00;
HID_Buffer[1] = 0;
HID_Buffer[2] = 0;
HID_Buffer[3] = 0;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
HAL_Delay(100);
}
程序附件: