一,前言
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 基本功能
三,代碼配置
參考代碼詳見
注意: 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的報文描述符,不可混淆。
接口函數,同樣需要修改, 將原來的兩個字節的接口函數,修改爲指針類型。