最近有個需求,需要同時用usb鍵盤鼠標(biāo)和虛擬串口等,因為平時沒怎么研究過usb協(xié)議,所以自己寫復(fù)合設(shè)備一直沒有成功,然后正巧在github上看到了一個stm32的一個usb復(fù)合設(shè)備庫,可以快速配置usb組合設(shè)備,并且支持超級多路串口
Gihub地址https://github.com/alambe94/I-CUBE-USBD-Composite
安裝
- 在githubr release頁面下載.pack文件,要是github打不開這里有分享鏈接庫文件
- CubeMX中選擇管理軟件包
- 導(dǎo)入剛才下好的.pack文件
?啟用
選擇組件
選擇你需要的
Core是必須的,然后你需要哪些功能就需要啟用,多設(shè)備一定要啟用COMPISITE
我這里選擇了鍵鼠和CDC虛擬串口,同時還得打開Core和COMPOSITE
?
?在這里也需要選擇你需要的
?配置其他,晶振時鐘調(diào)試等等
?
單獨生成外設(shè)文件
可以生成工程了?
注意
MX_USB_DEVICE_Init();?
需要手動調(diào)用這個函數(shù)對USB進(jìn)行初始化
我試過默認(rèn)的鍵盤鼠標(biāo)的配置描述符好像不能適配我們的默認(rèn)的習(xí)慣,鍵盤8個字節(jié),鼠標(biāo)4個字節(jié)的,需要改變一下,我這里貼出我的
鍵盤 usbd_keyboard_hid.c
__ALIGN_BEGIN static uint8_t HID_KEYBOARD_ReportDesc[HID_KEYBOARD_REPORT_DESC_SIZE] __ALIGN_END =
{
//-------------鍵盤部分報告描述符----------------
//表示用途頁為通用桌面設(shè)備
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x05, // REPORT_COUNT (5)
0x75, 0x01, // REPORT_SIZE (1)
0x05, 0x08, // USAGE_PAGE (LEDs)
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
0x29, 0x05, // USAGE_MAXIMUM (Kana)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x03, // REPORT_SIZE (3)
0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0};
?記得改數(shù)組長度為 63U
[特殊按鍵][ ][按鍵1][按鍵2][按鍵3][按鍵4][按鍵5][按鍵6]
鼠標(biāo) usbd_mouse_hid.c
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
//-----------------------鼠標(biāo)部分報告描述符----------------------------
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x02, // USAGE (Mouse)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x03, // USAGE_MAXIMUM (Button 3)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x03, // REPORT_COUNT (3)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x38, // USAGE (Wheel)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x06, // INPUT (Data,Var,Rel)
0xc0 // END_COLLECTION
};
長度49U
[按鍵][X][Y][滾輪]文章來源:http://www.zghlxwxcb.cn/news/detail-483819.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-483819.html
到了這里,關(guān)于stm32 USB復(fù)合設(shè)備 cubeMX庫一鍵生成 多路CDC串口 HID鼠標(biāo)鍵盤 Composite Device的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!