初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2021-1-11
- 在线时间
- 7 小时
|
工程模板采用STM32F1官方的USB HID例子,在此基础上修改鼠标的动作,主要代码如下,有需要的请参考
/* Private functions ---------------------------------------------------------*/
/*
鼠标发送给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表示右键按下
|--bit0: 1表示左键按下
BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 -- 滚轮变化。
*/
/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
uint16_t i;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock to 72 MHz */
SystemClock_Config();
/* Initialize LED2 */
BSP_LED_Init(LED2);
/* Configure Key button for remote wakeup */
BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
/* Init Device Library */
USBD_Init(&USBD_Device, &HID_Desc, 0);
/* Register the HID class */
USBD_RegisterClass(&USBD_Device, USBD_HID_CLASS);
/* Start Device Process */
USBD_Start(&USBD_Device);
while (1)
{
/* Insert delay 100 ms */
BSP_LED_Toggle(LED2);
HID_Buffer[2]=0;
for(i=0;i<60;i++){
if(i>35){
HID_Buffer[0]=0;//抬起鼠标左键
}else{
HID_Buffer[0]=0x01;//按下鼠标左键拖动
}
HID_Buffer[1]=0x00;//x
HID_Buffer[2]-=2;//y
HID_Buffer[3]=0x00;
USBD_HID_SendReport(&USBD_Device, HID_Buffer, 4);
HAL_Delay(20);
}
BSP_LED_Toggle(LED2);
//复位鼠标位置
HID_Buffer[2]=0;
for(i=0;i<12;i++){
HID_Buffer[0]=0x00;
HID_Buffer[1]=0x00;//x
HID_Buffer[2]+=10;//y
HID_Buffer[3]=0x00;
USBD_HID_SendReport(&USBD_Device, HID_Buffer, 4);
HAL_Delay(50);
}
HAL_Delay(15000);
}
}
|
|