我在移植st官方的usb-hid程式是可以啟動並執行,但是當我修改最大包時出現了babble detected錯誤,按照網上的操作,修改最大緩衝區需要修改3個地方,(1)usb_desc.c檔案中的CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC]數組,修改端點1的輸入輸出的最大包大小;(2)修改usb_prop.c檔案中的void CustomHID_Reset(void)函數,裡面有 需要設定 端點1的發送包大小,函數 SetEPTxCount(ENDP1, 4);(3)stm32f10x_it.c中的中斷處理常式的修改發送端點1的發送包的大小;就這些修改,但是用Bus Hound軟體做測試時,出現了babble detected錯誤,說host主機那出現接收資料溢出,但是如果不改變發送資料包的大小2,就不會出現錯誤,看來是設定的端點1的發送包的大小設定出現了問題,後來在網上尋找,發現是沒有修改usb報告描述符(Report Descriptor),網上說USB HID裝置是通過報告來給傳送資料的,報告有輸入報告和輸出報告。輸入報告是USB裝置發送給主機的,例如USB滑鼠將滑鼠移動和滑鼠點擊等資訊返回給電腦,應該是報告描述符裡帶有按鍵動作時,發送的資料包大小,
在報告描述符中的按鍵部分,加入了最後一句 0x95,0x04, 設定相應的按鍵動作發送的資料包的資料區段部分為4位元組;
/* key Push Button */
0x85, 0x05, /* REPORT_ID (5) */
0x09, 0x05, /* USAGE (Push Button) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
0x75, 0x01, /* REPORT_SIZE (1) */
0x95,0x04, // REPORT_COUNT (4Byte)
進行完上面的操作,需要修改一下報告描述符的大小CUSTOMHID_SIZ_REPORT_DESC,選中CUSTOMHID_SIZ_REPORT_DESC右擊滑鼠,進入定義處,把他的長度加1,這樣就不會出現babble detected錯誤了,在進行按鍵觸發下,可以進行4位元組資料的發送,如果要發送的位元組內容不僅僅是0或1,要修改上面的
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
部分為 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0xff, /* LOGICAL_MAXIMUM (255) */
就可以進行0~255之間的資料發送了。
usb-hid剛剛學,基本上不太懂,有什麼寫錯的地方請批評指正,謝謝