91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

極海APM32F427如何實(shí)現(xiàn)自定義USB HID設(shè)備與PC進(jìn)行通信

Geehy極海半導(dǎo)體 ? 來源:Geehy極海半導(dǎo)體 ? 2026-03-30 09:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《極海芯得》系列內(nèi)容為用戶使用極海系列產(chǎn)品的經(jīng)驗(yàn)總結(jié),均轉(zhuǎn)載自21ic論壇極海半導(dǎo)體專區(qū),全文未作任何修改,未經(jīng)原文作者授權(quán)禁止轉(zhuǎn)載。

最近需要使用到 APM32F427 枚舉成Custom HID設(shè)備進(jìn)行用戶自定義通信,但是官方的例程只有提供的HID枚舉為鼠標(biāo)或者鍵盤類型的設(shè)備。這里記錄一下,怎么使用Geehy官方的USB中間件,實(shí)現(xiàn)自定義的USB HID設(shè)備進(jìn)行用戶通信。

1. USB HID設(shè)備簡介

USB HID類是USB設(shè)備的一個(gè)標(biāo)準(zhǔn)設(shè)備類,它屬于人機(jī)交互操作的設(shè)備,用于控制計(jì)算機(jī)操作的一些方面,如USB鼠標(biāo)、USB鍵盤、USB游戲操縱桿等。但HID設(shè)備類不一定要有人機(jī)接口,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備。

USB HID設(shè)備的一個(gè)好處就是操作系統(tǒng)自帶了HID類的驅(qū)動(dòng)程序,而用戶無需去開發(fā)驅(qū)動(dòng)程序,只要使用API系統(tǒng)調(diào)用即可完成通信。所以經(jīng)常會(huì)把MCU的USB外設(shè)枚舉為自定義的HID設(shè)備類,用于和電腦上位機(jī)進(jìn)行通信。

關(guān)于USB HID設(shè)備,這里只是簡單介紹下,大家可以查閱網(wǎng)上的資料,或者從下面的USB官網(wǎng)進(jìn)行學(xué)習(xí)。

USB HID設(shè)備類官網(wǎng)介紹:https://www.usb.org/hid

2. 基于官網(wǎng)的USB中間件如何實(shí)現(xiàn)Custom HID設(shè)備

2.1 準(zhǔn)備工作

官方 F427 芯片的SDK已經(jīng)提供了很多的USB例程,我們基于官方的USB例程修改即可。

1、下載官網(wǎng)APM32F427 SDK:https://www.geehy.com/product/fifth/APM32F427_425_423#design

2、我們要實(shí)現(xiàn)自定義的USB HID設(shè)備,與之最接近的就是427 SDK中提供的OTGD_Custom_HID_Keyboard例程。我們復(fù)制一份該例程,基于該例程修改為USB Custom HID設(shè)備例程。

83f66596-2981-11f1-90a1-92fbcf53809c.png

2.2 修改USB HID報(bào)告描述符

報(bào)告描述符就是描述報(bào)告(HID接口上傳輸事務(wù)中的數(shù)據(jù))的一組數(shù)據(jù)結(jié)構(gòu)。

USB的報(bào)告描述符組成,都有其特定的組成格式。關(guān)于USB HID的報(bào)告描述符的組成和格式,可參考官方文檔《Device Class Definition for human interface device (HID)》。這里不多介紹報(bào)告描述符了,直接介紹如何修改代碼即可。

把usbd_custom_hid_if.c文件定義的報(bào)告描述符數(shù)組:

844f535e-2981-11f1-90a1-92fbcf53809c.png

把該文件定義的報(bào)告描述符直接修改為如下代碼:

/**

* @brief CUSTOM HID report descriptor

*/

uint8_t USBD_CUSTOM_HIDReportDesc[USBD_CUSTOM_HID_REPORT_DESC_SIZE] =

{

/* USER CODE BEGIN 0 */

0x06, 0xFF, 0x00, /* USAGE_PAGE (Vendor Page: 0xFF00) */

0x09, 0x01, /* USAGE (Demo Kit) */

0xa1, 0x01, /* COLLECTION (Application) */

// 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)

// 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)

/* USER CODE END 0 */

0xC0 /* END_COLLECTION */

};

該描述符主要是定義了輸入輸出Input、Ouput兩個(gè)報(bào)告。其中,Input用于MCU上傳數(shù)據(jù),Output下傳數(shù)據(jù)。所有報(bào)告大小定義為64byte,也就是說每次最大上下傳數(shù)據(jù)量也就為64byte。

另外數(shù)組USBD_CUSTOM_HID_REPORT_DESC_SIZE這個(gè)宏定義需要修改為我們定義的報(bào)告描述符的大小,也就是34。在對(duì)應(yīng)的頭文件修改如下:

84a60e9c-2981-11f1-90a1-92fbcf53809c.png

2.3 修改接收回調(diào)函數(shù)

usbd_custom_hid_if.c文件實(shí)現(xiàn)了一個(gè)接收處理函數(shù),當(dāng)USB檢測到有數(shù)據(jù)接收時(shí),會(huì)調(diào)用該函數(shù)進(jìn)行接收數(shù)據(jù)處理。

我們需要修改該函數(shù),當(dāng)有數(shù)據(jù)接收時(shí),使得 USB_Received_Flag 變量置1,用于上層數(shù)據(jù)處理函數(shù)的處理。修改的代碼如下:

uint8_t USB_Received_Flag = 0;

/*!

* @brief USB device CUSTOM HID interface receive handler

*

* @param buffer: Command data buffer

*

* @param length: Command data length

*

* @retval USB device operation status

*/

USBD_STA_T USBD_FS_CUSTOM_HID_ItfReceive(uint8_t *buffer, uint8_t *length)

{

USBD_STA_T usbStatus = USBD_OK;

UNUSED(length);

USB_Received_Flag = 1; // 檢測到有數(shù)據(jù)接收,標(biāo)志位置1

USBD_CUSTOM_HID_RxPacket(&gUsbDeviceFS);

return usbStatus;

}

2.4 實(shí)現(xiàn)應(yīng)用層用戶代碼的收發(fā)函數(shù)

1、實(shí)現(xiàn)USB Custom HID設(shè)備接收函數(shù)

我們實(shí)現(xiàn)一個(gè)USB HID的數(shù)據(jù)接收函數(shù),當(dāng)檢測到 USB_Received_Flag 標(biāo)志位置1之后,就可以調(diào)用該函數(shù)進(jìn)行數(shù)據(jù)接收。

uint32_t USB_GetData(uint8_t *data, uint32_t dataNum)

{

USBD_CUSTOM_HID_INFO_T* usbDevHID = (USBD_CUSTOM_HID_INFO_T*)gUsbDeviceFS.devClass[gUsbDeviceFS.classID]->classData;

if (usbDevHID == NULL)

{

return 0;

}

if (dataNum > usbDevHID->reportSize)

{

dataNum = usbDevHID->reportSize;

}

for (uint32_t i = 0; i < dataNum; i++)

{

*data++ = usbDevHID->report[i];

}

return dataNum;

}

接收到的數(shù)據(jù)會(huì)存放在USB的gUsbDeviceFS 全局變量中,該全局變量包含了USB的所有信息。

2、實(shí)現(xiàn)USB Custom HID設(shè)備發(fā)送函數(shù)

USB HID設(shè)備發(fā)送數(shù)據(jù),我們只需要調(diào)用F427 SDK提供的USBD_CUSTOM_HID_TxReport函數(shù)發(fā)送數(shù)據(jù)即可。我們對(duì)該函數(shù)封裝一層用于用戶調(diào)用。

uint32_t USB_SendData(uint8_t *data, uint32_t dataNum)

{

// USBD_CUSTOM_HID_IN_EP_SIZE 64

if (USBD_OK != USBD_CUSTOM_HID_TxReport(&gUsbDeviceFS, data, 64))

{

return 0;

}

return dataNum;

}

2.5 實(shí)現(xiàn)主函數(shù)與PC進(jìn)行讀寫通信

前面已經(jīng)實(shí)現(xiàn)的用戶應(yīng)用層USB Custom HID設(shè)備的收發(fā)函數(shù),我們可以在主函數(shù)調(diào)用USB HID收發(fā)函數(shù)進(jìn)行讀寫通信。測試是否確實(shí)和PC端上位機(jī)實(shí)現(xiàn)了數(shù)據(jù)的收發(fā)。

主函數(shù)代碼實(shí)現(xiàn)如下:

int main(void)

{

uint8_t report[64] = {0};

DAL_DeviceConfig();

/* Infinite loop */

while (1)

{

// USB_Received_Flag 變量置1,說明有USB數(shù)據(jù)接收到。下面對(duì)接收的數(shù)據(jù)進(jìn)行處理

if (USB_Received_Flag == 1)

{

USB_Received_Flag = 0;

USB_GetData(report, 64); // 獲取USB接收到的數(shù)據(jù)

// 打印測試

// for (uint32_t i = 0; i < 64; i++)

// printf("%02X ", report[i]);

USB_SendData(report, 64); // 把接收到的數(shù)據(jù)原封不懂的發(fā)送回給上位機(jī)

}

}

}

該主函數(shù)就是實(shí)現(xiàn)了簡單的USB HID數(shù)據(jù)的收發(fā),把PC端下發(fā)給F427的USB數(shù)據(jù),然后再返回給PC端上位機(jī)。

3. USB Custom HID設(shè)備通信的測試驗(yàn)證

3.1 在電腦的設(shè)備管理器查看

在第二節(jié)修改完代碼之后,編譯下載到APM32F427芯片,運(yùn)行起來后,我們可以在windows系統(tǒng)的設(shè)備管理器的人體學(xué)輸入設(shè)備,查看到我們自己實(shí)現(xiàn)的USB Custom HID的。如下:

84fcaad6-2981-11f1-90a1-92fbcf53809c.png

又或者通過控制面板的設(shè)備和打印機(jī)的選項(xiàng),可以查看到我們實(shí)現(xiàn)的USB HID設(shè)備,如下:

855332ca-2981-11f1-90a1-92fbcf53809c.png

可以看到我們實(shí)現(xiàn)的APM32 Custom HID設(shè)備,說明修改的代碼已經(jīng)正常運(yùn)行。

3.2 通過PC端上位機(jī)工具進(jìn)行數(shù)據(jù)收發(fā)測試

我們需要使用USB HID的調(diào)試工具,進(jìn)行數(shù)據(jù)收發(fā)測試。關(guān)于這樣的上位機(jī)工具,網(wǎng)上有很多的。我這里使用的是PortHelper工具。這個(gè)工具大家可以網(wǎng)上搜一下下載。

或者下載我分享的下面這個(gè)百度網(wǎng)盤鏈接下載:

鏈接:https://pan.baidu.com/s/1qkZCs-dG__czkDrAvN7z-w?pwd=q6er提取碼:q6er

1、打開PortHelper 上位機(jī),然后選擇USB調(diào)試,然后找到 APM32 Custom HID 設(shè)備,然后打開USB。

85aa4f74-2981-11f1-90a1-92fbcf53809c.png

2、PortHelper 測試與APM32F427進(jìn)行USB數(shù)據(jù)收發(fā)

打開USB之后,然后我們勾選hex發(fā)送,hex顯示。然后點(diǎn)擊發(fā)送即可,如下圖:

8601182c-2981-11f1-90a1-92fbcf53809c.png

然后可以PC端上位機(jī)發(fā)送的數(shù)據(jù)給APM32F427,芯片原樣返回?cái)?shù)據(jù)給該上位機(jī)。

到這里就實(shí)現(xiàn)的我們自定義的USB Custom HID設(shè)備,該設(shè)備主要是接收PC端上位機(jī)發(fā)送過來的數(shù)據(jù),然后APM32F427接收進(jìn)行處理。在實(shí)際項(xiàng)目我是需要基于這個(gè)通信進(jìn)行更復(fù)雜的項(xiàng)目開發(fā)。

注:文章作者在原帖中提供了代碼文件,有需要請(qǐng)至原文21ic論壇

原文地址:https://bbs.21ic.com/icview-3501049-1-1.html?_dsign=8cbdef4d

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8457

    瀏覽量

    285265
  • 驅(qū)動(dòng)程序
    +關(guān)注

    關(guān)注

    19

    文章

    872

    瀏覽量

    50612
  • HID
    HID
    +關(guān)注

    關(guān)注

    2

    文章

    140

    瀏覽量

    48979

原文標(biāo)題:極海芯得 EP.76 | APM32F427基于官方USB中間件如何實(shí)現(xiàn)自定義USB HID設(shè)備與PC進(jìn)行通信

文章出處:【微信號(hào):geehysemi,微信公眾號(hào):Geehy極海半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    APM32F427移植CherryUSB實(shí)現(xiàn)自定義USB HID設(shè)備

    最近需要使用到APM32F427枚舉成Custom HID設(shè)備進(jìn)行用戶自定義通信,但我又不想要使
    的頭像 發(fā)表于 01-20 09:52 ?3828次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>APM32F427</b>移植CherryUSB<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>自定義</b><b class='flag-5'>USB</b> <b class='flag-5'>HID</b><b class='flag-5'>設(shè)備</b>

    STM32 自定義HID USB設(shè)備實(shí)現(xiàn)

    Interval (20 ms) */ /* 41 */}; 剩下的就根據(jù)自己需要去修改數(shù)據(jù)OUT處理和數(shù)據(jù)IN處理函數(shù),來進(jìn)行自己的數(shù)據(jù)處理,從而實(shí)現(xiàn)自定義HID。當(dāng)然使用
    發(fā)表于 03-09 15:23

    STM32F107做USB host識(shí)別自定義HID設(shè)備有了解的嗎

    各位大神,小弟最近要用STM32F107做USB host給自定義HID 設(shè)備發(fā)送數(shù)據(jù),ST官網(wǎng)的例程是鼠標(biāo)和鍵盤的都只是有對(duì)輸入數(shù)據(jù)的處
    發(fā)表于 12-07 09:03

    采用HID協(xié)議實(shí)現(xiàn)工控自定義鍵盤接口設(shè)計(jì)

    ,它所有按鍵是為滿足特定產(chǎn)品需求而設(shè)計(jì),常用接口有PS/2和USBUSB設(shè)備具有支持熱插拔和楨采集速率高等優(yōu)點(diǎn),正逐步取代原來的PS/2設(shè)備,成為市場的主流。本文主要介紹一種
    發(fā)表于 06-20 05:00

    標(biāo)準(zhǔn)hid設(shè)備pc上驅(qū)動(dòng)不用自己開發(fā),自定義hid設(shè)備windows系統(tǒng)的驅(qū)動(dòng)用自己開發(fā)嗎

    標(biāo)準(zhǔn)hid設(shè)備pc上驅(qū)動(dòng)不用自己開發(fā),自定義hid設(shè)備windows系統(tǒng)的驅(qū)動(dòng)用自己開發(fā)嗎
    發(fā)表于 07-09 09:31

    USB自定義設(shè)備類的實(shí)現(xiàn)

    2021.5.13(2021.5.17改)USB自定義設(shè)備類的實(shí)現(xiàn)1 此例程在GD官方所提供的打印機(jī)設(shè)備類型修改而來,根據(jù)
    發(fā)表于 02-22 07:02

    如何利用CubeMX開發(fā)USB自定義HID設(shè)備實(shí)現(xiàn)USB人機(jī)接口通訊?

    如何利用CubeMX開發(fā)USB自定義HID設(shè)備實(shí)現(xiàn)USB人機(jī)接口通訊?
    發(fā)表于 02-22 07:14

    求助,能否為USB自定義設(shè)備提供PC端驅(qū)動(dòng)程序?

    沁恒的技術(shù)人員,您好。我公司本次項(xiàng)目使用CH549F芯片,讀取下位機(jī)Flash中的數(shù)據(jù)由USB發(fā)送到上位機(jī),數(shù)據(jù)量比較大,需要使用USB的批量傳輸方式,需要用USB
    發(fā)表于 06-08 06:38

    國民技術(shù)MCU應(yīng)用筆記連載(4)——N32G45x系列USB自定義HID設(shè)備實(shí)現(xiàn)

    HID設(shè)備的驅(qū)動(dòng)程序,因而無需用戶自己開發(fā)驅(qū)動(dòng)程序,對(duì)于一些數(shù)據(jù)量較少的場合(例如按鍵輸入、LED顯示或一些小容量的芯片燒錄器等),使用用戶自定義HID
    發(fā)表于 07-05 11:58

    各位大佬,CH573F能模擬自定義HID設(shè)備嗎,就是免驅(qū)的HID自定義設(shè)備

    各位大佬,CH573F能模擬自定義HID設(shè)備嗎,就是免驅(qū)的HID自定義
    發(fā)表于 07-25 06:51

    基于自定義幀的PC與EEPROM串行通信設(shè)計(jì)

    討論了如何應(yīng)用9 針的串行端口RS232C 通過編程器建立上位機(jī)PC 和EEPROM 之間的通信。詳細(xì)闡述了自定義幀格式的設(shè)計(jì)、程序流程、主要函數(shù)和代碼的實(shí)現(xiàn)。
    發(fā)表于 09-01 16:56 ?13次下載

    萬利EK-STM32板實(shí)現(xiàn)自定義USB HID設(shè)備

    大家知道,將一個(gè)USB設(shè)備定義為用戶自定義HID設(shè)備,就可以讓windows操作系統(tǒng)識(shí)別為一個(gè)
    發(fā)表于 12-04 17:03 ?1397次閱讀

    基于HAL庫的USB自定義HID設(shè)備實(shí)現(xiàn)

    基于HAL庫的USB自定義HID設(shè)備實(shí)現(xiàn)基于HAL庫的USB
    發(fā)表于 12-28 20:04 ?13次下載
    基于HAL庫的<b class='flag-5'>USB</b><b class='flag-5'>自定義</b><b class='flag-5'>HID</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>實(shí)現(xiàn)</b>

    【技術(shù)專欄】泰凌微電子USB HID 用戶自定義設(shè)備應(yīng)用及調(diào)試

    hid設(shè)備類型是由hid報(bào)告描述符中的用途頁(USAGE PAGE)決定的,常見的有Generic Desktop Controls ,Keyboard/Keypad ,還有有廠商自定義
    的頭像 發(fā)表于 07-19 08:40 ?2941次閱讀
    【技術(shù)專欄】泰凌微電子<b class='flag-5'>USB</b> <b class='flag-5'>HID</b> 用戶<b class='flag-5'>自定義</b><b class='flag-5'>設(shè)備</b>應(yīng)用及調(diào)試

    APM32F427系列MCU榮獲IEC 60730/60335功能安全認(rèn)證

    近日,APM32F427系列工業(yè)級(jí)高性能拓展型MCU,成功通過IEC 60730/60335功能安全認(rèn)證。這標(biāo)志著該系列產(chǎn)品在功能安全設(shè)計(jì)上已達(dá)到國際領(lǐng)先水平,能夠?yàn)榭蛻籼峁┓螩lass B標(biāo)準(zhǔn)的功能安全庫,并助力其高效縮
    的頭像 發(fā)表于 02-09 09:15 ?828次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>APM32F427</b>系列MCU榮獲IEC 60730/60335功能安全認(rèn)證