上面是我的微信和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 */
}
查看一下设备管理器,有没有被正常识别
通过程序控制标志位,观察音量控制台