STM32Cubeide/STM32F103CubeMX生成自定义HID设备

前面时钟啥的不管了,USB 48Mhz时钟

USB选择Device USB_FS
在这里插入图片描述
设置参数,34是配置HID作为电脑识别用的,必须是34
64是数据收发用的,HID最大一次64,可以自定义
在这里插入图片描述
这两个是电脑识别之后的硬件ID,不知道什么讲究,不用改

这样就可以生成了
最后是usbd_custom_hid_if.c文件里,这里就是上面的34,数组长度是34
这个数组只要修改对了,电脑就能识别出来,不然会带叹号,没数据

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */
		0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       
		0x09, 0x01,            /* USAGE (Demo Kit)               */    
		0xa1, 0x01, /* COLLECTION (Application) */ 
		/* 6 */ 

		// The Input report 
		0x09,0x03, // USAGE ID - Vendor defined 
		0x15,0x00, // LOGICAL_MINIMUM (0) 
		0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255) 
		0x75,0x08, // REPORT_SIZE (8) 
		0x95,64, // REPORT_COUNT :SendLength 
		0x81,0x02, // INPUT (Data,Var,Abs) 
		//19
		// The Output report 
		0x09,0x04, // USAGE ID - Vendor defined 
		0x15,0x00, // LOGICAL_MINIMUM (0) 
		0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255) 
		0x75,0x08, // REPORT_SIZE (8) 
		0x95,64, // REPORT_COUNT:ReceiveLength 
		0x91,0x02, // OUTPUT (Data,Var,Abs) 
		//32
		// The Feature report
		/* 45 */ 
		//#endif
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION	             */
};

描述符定义了usb传输数据的格式。

usbd_customhid.h文件中,更改收发数据长度和延时
在这里插入图片描述
因为这里自己就有宏定义判断,且不属于用户可更改的区域,因此直接在main.h修改

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
#define CUSTOM_HID_EPIN_SIZE   0x40    //接收的长度
#define CUSTOM_HID_HS_BINTERVAL  0x01U          //延时
#define CUSTOM_HID_EPOUT_SIZE  0x40   //发送的长度
/* USER CODE END EC */

设备管理器里
在这里插入图片描述
然后做个简单的数据发送

unsigned char usb_rx_data[64]={0};
unsigned char usb_tx_data[64]={0};
unsigned char usb_rx_flag=0;

while (1)
	{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
			usb_tx_data[0]++;
			usb_tx_data[63]++;
			if(USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64) == USBD_OK)
			{
				PB_T(0);
			}
    /* USER CODE BEGIN 3 */
  }


打开Bus Hound 看一下数据
首先打开 Devices ,勾选,可以插拔一下看看是几号
在这里插入图片描述
勾选之后点Capture,点开RUN,数据就出来了
在这里插入图片描述
接收:
会调用usbd_custom_hid_if.c的回调函数
CUSTOM_HID_OutEvent_FS

/**
  * @brief  Manage the CUSTOM HID class events
  * @param  event_idx: Event index
  * @param  state: Event state
  * @retval USBD_OK if all operations are OK else USBD_FAIL
  */
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{
  /* USER CODE BEGIN 6 */
extern unsigned char usb_rx_data[];
extern unsigned char usb_rx_flag;
USBD_CUSTOM_HID_HandleTypeDef *hhid;
hhid = (USBD_CUSTOM_HID_HandleTypeDef *)hUsbDeviceFS.pClassData;
strncpy(usb_rx_data,hhid->Report_buf,64);
usb_rx_flag = 1;
  return (USBD_OK);
  /* USER CODE END 6 */
}

主函数添加

			if(usb_rx_flag>0)
			{
				PB_T(0);
				usb_rx_flag=0;
				strncpy(usb_rx_data,usb_tx_data,64);
				USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64); 
			}

在这里插入图片描述
在这里插入图片描述
选择 interrupt Out
写入数据长度 写入数据
点击Run
在这里插入图片描述
Capture能看到数据

但是这里我只有第一次有数据,后面收不到了,不知道为啥

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32f103xg_user_manual.chm》是一份STM32F103系列微控制器的用户手册。STM32F103系列是意法半导体(STMicroelectronics)公司推出的一款32位ARM Cortex-M3内核的微控制器产品。 该用户手册提供了对该系列芯片的详细介绍和技术规格。手册的目的是帮助用户了解STM32F103芯片的各种功能和特性,并提供使用该芯片的指导和参考。手册中包含了芯片的内部架构、寄存器描述、时钟和电源管理、GPIO和外设的介绍,以及中断和异常处理等方面的详细说明。此外,手册还包括了各种外设的详细配置和使用方法,如定时器、串行通信接口、通用同步/异步收发器等。同时,手册还介绍了芯片的调试和编程方法,以及如何使用开发工具进行软件开发和调试。 通过阅读该用户手册,用户可以全面了解STM32F103系列芯片的各种功能和特性,为使用该芯片进行硬件和软件开发提供了丰富的参考资料。手册详细描述了每一个寄存器和外设的使用方法和参数设置,使得用户可以根据自己的需求进行相应的配置和调整。 总之,《stm32f103xg_user_manual.chm》是一份详细的用户手册,对于学习和使用STM32F103系列芯片的人来说,是一份非常有用的参考资料。无论是初学者还是有一定经验的开发者,都可以通过该手册获得对这款强大的微控制器的全面理解,并利用其丰富的功能和特性进行各种应用开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值