STM32 USB Custom-HID 基本功能

一,前言

   USB Device Custom HID 基本输入输出功能

   目标平台: STM32F103ZET  /  STM32F072RBH

   CubeMX版本: STM32CubeMX 5.5.0

   CubeMX FW版本:STM32Cube_FW_F1_V1.8.0 / STM32Cube_FW_F0_V1.11.0

   两个平台在USB Middleware 这个层面上的代码是一致的。
 

二,硬件连接

    不作赘述,参考  STM32 USB HID-Mouse 基本功能

三,代码配置

STM32 USB Custom-HID 基本功能_第1张图片

参考代码详见

GitHub: Custom_HID

注意: STM32F072的工程中带有Bootloader的配置,因此如需测试此功能需要手动把Bootloader配置关闭。

关闭的方法为在Main函数中屏蔽  IAP_Set() 这个API  , 同时将IROM1的起始地址设置为0x0800 0000

CUBE生成的代码并不能直接使用,是因为报文描述符没有进行有效的填充。

报文描述符的编写参考源码中 user_custom_hid.h中的宏定义即可,HID的报文描述符涉及的内容比较广泛,此处不作展开。

#define HID_DESC_IN  0x81
#define HID_DESC_OUT 0x91

#define CUSTOM_HID_ReportDesc_Module(ReportID, Direction) 0x85,ReportID,   /* REPORT ID */          \
                                                          0x09,ReportID+1, /* USAGE */              \
                                                          0x15,0x00,       /* LOGICAL_MINIMUM(0)*/  \
                                                          0x26,0xff,0x00,  /* LOGICAL_MAXIMUM(255)*/\
                                                          0x75,0x08,       /* REPORT SIZE(8) 8BIT*/ \
                                                          0x95,0x3F,       /* REPORT COUNT(63)8BIT*/\
                                                          0xb1,0x82,       /* FEATURE(Data,Var,Abs,Vol)*/\
                                                          0x85,ReportID,   /* REPORT ID */          \
                                                          0x09,ReportID+1, /* USAGE */              \
                                                          Direction,0x82   /* IN OUT(Data,Var,Abs,Vol)*/  

CubeMX 生成的代码,不作修改默认仅支持2 Byte的数据传输, 如果我们需要双向64 Bytes的数据传输,就需要修改一下配置定义,以64 Bytes 为例:

usbd_customhid.h
#define CUSTOM_HID_EPIN_SIZE                 0x40
#define CUSTOM_HID_EPOUT_SIZE                0x40
#define CUSTOM_HID_FS_BINTERVAL              1   //最小传输间隔 1ms


usbd_conf.h 
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE     0x40
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE      50  //根据报文描述符填写 实际长度


特别注意  USB_CUSTOM_HID_CONFIG_DESC_SIZ  和  USBD_CUSTOM_HID_REPORT_DESC_SIZE 分别指的是USB的配置描述符和 HID的报文描述符,不可混淆。

接口函数,同样需要修改, 将原来的两个字节的接口函数,修改为指针类型。

STM32 USB Custom-HID 基本功能_第2张图片

STM32 USB Custom-HID 基本功能_第3张图片

你可能感兴趣的:(USB,STM32)