STM32实现自定义HID设备控制电脑声音

上面是我的微信和QQ群,欢迎新朋友的加入。

最近做HID键盘,发现协议里面的声音控制竟然没得作用,后面找了个带音量控制的键盘过来,查了下,才发现音量控制是一个HID设备,不是一个键盘。

先用CUMEMX配置一个自定义的HID设备

配置好时钟

修改USB中断优先级

生成工程

修改报告描述符

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
0x05, 0x0c,  
0x09, 0x01,
0xa1, 0x01,  
0xa1, 0x00, 
0x09, 0xe9, 
0x09, 0xea, 
0x09, 0xe2,   
0x09, 0xcd,
0x35, 0x00,  
0x45, 0x07, 
0x15, 0x00,
0x25, 0x01,
0x75, 0x01,
0x95, 0x04, 
0x81, 0x02, 
0x75, 0x01,
0x95, 0x04, 
0x81, 0x01, 
0xc0, 
0xc0

};

改变数组大小

#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     38U

修改端点大小

#define CUSTOM_HID_EPIN_ADDR                 0x81
#define CUSTOM_HID_EPIN_SIZE                 0x40

#define CUSTOM_HID_EPOUT_ADDR                0x01
#define CUSTOM_HID_EPOUT_SIZE                0x40

在主函数实现控制

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t JunFlag=0;
uint8_t   HID_report[4];
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  if(JunFlag == 1)
	  {
		//静音、播放
		HID_report[0]=0x04;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(40);
		HID_report[0]=0x00;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(1000);
		  
		//音量减
		HID_report[0]=0x02;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(40);
		HID_report[0]=0x00;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(1000);

		//音量加
		HID_report[0]=0x01;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(40);
		HID_report[0]=0x00;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(1000);

		//静音、播放
		HID_report[0]=0x04;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(40);
		HID_report[0]=0x00;
		USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,HID_report,1);
		HAL_Delay(1000);
  
		  JunFlag=0;
	  }
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

查看一下设备管理器,有没有被正常识别

通过程序控制标志位,观察音量控制台

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值