chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

Geehy極海半導(dǎo)體 ? 來(lái)源:21ic論壇極海半導(dǎo)體專區(qū) ? 2026-01-20 09:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《極海芯得》系列內(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)行用戶自定義通信,但我又不想要使用官方的USB中間件去做一個(gè)USB Custom HID設(shè)備。了解到Cherry USB這個(gè)開(kāi)源的USB代碼,而且他最強(qiáng)的就是不需要使用芯片的任何關(guān)于USB的代碼,就能使用起來(lái)。所以,打算使用CherryUSB實(shí)現(xiàn)Custom HID設(shè)備。

1. Cherry USB簡(jiǎn)介

CherryUSB是一個(gè)小而美的、可移植性高的、用于嵌入式系統(tǒng)(帶USB IP)的高性能 USB 主從協(xié)議棧。

關(guān)于CherryUSB的介紹,大家可以去它的開(kāi)源倉(cāng)庫(kù)和官方提供的介紹文檔進(jìn)行學(xué)習(xí)。官方提供了很詳細(xì)的介紹和使用說(shuō)明。

官方的使用教程:https://cherryusb.readthedocs.io/zh-cn/latest/

CherryUSB代碼倉(cāng)庫(kù):https://github.com/cherry-embedded/CherryUSB

CherryUSB厲害之處在于,它不需要使用到芯片SDK中任何關(guān)于USB相關(guān)的代碼,它是完全和芯片脫離關(guān)系的。CherryUSB它是基于USB IP寫(xiě)的底層,和芯片完全沒(méi)有關(guān)系,所以移植使用CherryUSB也比較簡(jiǎn)單。它支持了常見(jiàn)的USB IP。如下:

9ffb7010-f1fa-11f0-92de-92fbcf53809c.png

其中APM32F427使用的USB IP就是 DWC2 USB IP。

2. APM32F427移植CherryUSB實(shí)現(xiàn)Custom HID設(shè)備

2.1 準(zhǔn)備工作

1、下載官網(wǎng)APM32F427 SDK。

下載路徑:

https://www.geehy.com/product/fifth/APM32F427_425_423#design

2、下載CherryUSB源碼。

CherryUSB代碼倉(cāng)庫(kù):

https://github.com/cherry-embedded/CherryUSB

a054dc5e-f1fa-11f0-92de-92fbcf53809c.png

下載的源碼暫時(shí)放到SDK的中間件目錄下備用。

3、復(fù)制一個(gè)SDK的可以正常使用的例程,然后基于這個(gè)例程進(jìn)行移植CherryUSB。

a0acd9a4-f1fa-11f0-92de-92fbcf53809c.png

2.2 提供CherryUSB的

usb_dc_low_level_init/usb_dc_low_level_deinit函數(shù)的實(shí)現(xiàn)

要移植實(shí)現(xiàn)CherryUSB,我們只需要提供usb_dc_low_level_init/usb_dc_low_level_deinit函數(shù)的實(shí)現(xiàn)即可。這兩個(gè)函數(shù)只是做了最底層的GPIO引腳初始化,以及開(kāi)啟芯片的USB時(shí)鐘和中斷等與芯片相關(guān)的代碼。

1、復(fù)制usb_glue_st.c文件,修改為usb_glue_apm32f27.c文件。

a10ce4fc-f1fa-11f0-92de-92fbcf53809c.png

2、根據(jù)原有的usb_dc_low_level_init函數(shù),修改為適應(yīng)APM32F427芯片的函數(shù)。

void usb_dc_low_level_init(uint8_t busid)

{

if (g_usbdev_bus[busid].reg_base == 0x40040000UL) { // USB_OTG_HS_PERIPH_BASE

g_usb_dwc2_busid[1] = busid;

g_usb_dwc2_irq[1] = USBD_IRQHandler;

} else {

g_usb_dwc2_busid[0] = busid;

g_usb_dwc2_irq[0] = USBD_IRQHandler;

}

//g_dwc2_instance.Instance = (USB_OTG_GlobalTypeDef *)g_usbdev_bus[busid].reg_base;

//HAL_PCD_MspInit((PCD_HandleTypeDef *)&g_dwc2_instance);

GPIO_InitTypeDef GPIO_InitStruct = {0};

/* Configure USB OTG GPIO */

__DAL_RCM_GPIOA_CLK_ENABLE();

/* USB DM, DP pin configuration */

GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;

DAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* Configure USB OTG */

__DAL_RCM_USB_OTG_FS_CLK_ENABLE();

/* Configure interrupt */

DAL_NVIC_SetPriority(OTG_FS_IRQn, 1U, 0U);

DAL_NVIC_EnableIRQ(OTG_FS_IRQn);

}

該函數(shù)主要實(shí)現(xiàn)了使用到的USB GPIO初始化,以及打開(kāi)USB外設(shè)時(shí)鐘和使能USB中斷等硬件的初始化工作。

3、提供usb_dc_low_level_deinit函數(shù)實(shí)現(xiàn)

void usb_dc_low_level_deinit(uint8_t busid)

{

if (g_usbdev_bus[busid].reg_base == 0x40040000UL) { // USB_OTG_HS_PERIPH_BASE

g_usb_dwc2_busid[1] = 0;

g_usb_dwc2_irq[1] = NULL;

} else {

g_usb_dwc2_busid[0] = 0;

g_usb_dwc2_irq[0] = NULL;

}

//g_dwc2_instance.Instance = (USB_OTG_GlobalTypeDef *)g_usbdev_bus[busid].reg_base;

//HAL_PCD_MspDeInit((PCD_HandleTypeDef *)&g_dwc2_instance);

/* Disable peripheral clock */

__DAL_RCM_USB_OTG_FS_CLK_DISABLE();

/* USB DM, DP pin configuration */

DAL_GPIO_DeInit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);

/* Disable peripheral interrupt */

DAL_NVIC_DisableIRQ(OTG_FS_IRQn);

}

該函數(shù)是usb_dc_low_level_init函數(shù)的反操作,解除GPIO初始化和失能時(shí)鐘等。

2.3 提供CherryUSB中斷函數(shù)的實(shí)現(xiàn)

調(diào)用USB中斷函數(shù)時(shí),已經(jīng)不能調(diào)用SDK提供的中斷處理函數(shù)了,需要調(diào)用Cherry提供的中斷處理函數(shù)。如下:

void OTG_FS_IRQHandler(void)

{

g_usb_dwc2_irq[0](g_usb_dwc2_busid[0]);

}

//void OTG_HS_IRQHandler(void)

void OTG_FS2_IRQHandler(void)

{

g_usb_dwc2_irq[1](g_usb_dwc2_busid[1]);

}

到這里就已經(jīng)修改完了需要把CHerryUSB移植到APM32F427的底層的實(shí)現(xiàn)。修改實(shí)現(xiàn)的代碼,都保存到usb_glue_apm32f427.c這個(gè)文件里。

2.4 修改Keil工程配置

前面已經(jīng)把該準(zhǔn)備的代碼實(shí)現(xiàn)了,下面我們把復(fù)制的SDK一個(gè)例程,修改一下實(shí)現(xiàn)CherryUSB的例程。

1、添加CherryUSB源碼到Keil工程

a16bde80-f1fa-11f0-92de-92fbcf53809c.png

2、添加CherryUSB的編譯路徑

a1ccc9b6-f1fa-11f0-92de-92fbcf53809c.png

3、CherryUSB倉(cāng)庫(kù)代碼,把cherryusb_config_template.h復(fù)制這個(gè)文件到我們的工程目錄下,并修改名稱為 usb_config.h

a22ef9d8-f1fa-11f0-92de-92fbcf53809c.png

2.5 實(shí)現(xiàn)CherryUSB Custom HID收發(fā)測(cè)試函數(shù)

前面的步驟已經(jīng)相當(dāng)于全部移植完了CherryUSB了?,F(xiàn)在實(shí)現(xiàn)CherryUSB Custom HID應(yīng)用層的收發(fā)測(cè)試函數(shù)。

void custom_hid_test(uint8_t busid)

{

uint8_t report[64] = {0};

if(usb_device_is_configured(busid) == false) {

return;

}

custom_state = HID_STATE_BUSY;

usbd_ep_start_write(busid, HIDRAW_IN_EP, (uint8_t *)&report, sizeof(report));

while (custom_state == HID_STATE_BUSY) {

}

}

這個(gè)函數(shù)就是把接收到數(shù)據(jù)返回到PC端上位機(jī)

2.6 實(shí)現(xiàn)main函數(shù)的調(diào)用

在main函數(shù),我們首先需要調(diào)用 hid_custom_init 函數(shù)進(jìn)行CherryUSB的初始化,然后再主循環(huán)檢測(cè)到接收USB數(shù)據(jù),就調(diào)用2.5小節(jié)實(shí)現(xiàn)的CherryUSB收發(fā)測(cè)試函數(shù)。如下:

int main(void)

{

// uint8_t mouse_cfg[4] = {};

/* Device configuration */

DAL_DeviceConfig();

// /* Output a message on Hyperterminal using printf function */

// LOG_Print(" UART Printf Example: retarget the C library printf function to the UART ");

// LOG_Print(" ** Test finished successfully. ** ");

hid_custom_init(0, USB_OTG_FS_PERIPH_BASE);

/* Infinite loop */

while (1)

{

if (usb_receive_flag == 1)

{

custom_hid_test(0);

}

}

}

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

關(guān)于測(cè)試驗(yàn)證,和我之前寫(xiě)的一篇文章很相似的,因?yàn)榇a實(shí)現(xiàn)都是和上位機(jī)進(jìn)行收發(fā)測(cè)試。

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

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

a28b30b8-f1fa-11f0-92de-92fbcf53809c.png

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

a2e744c0-f1fa-11f0-92de-92fbcf53809c.png

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

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

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

1、打開(kāi)PortHelper 上位機(jī),然后選擇USB調(diào)試,然后找到

APM32 Custom HID 設(shè)備,然后打開(kāi)USB

a34752a2-f1fa-11f0-92de-92fbcf53809c.png

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

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

a3a9ca2c-f1fa-11f0-92de-92fbcf53809c.png

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

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

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

原文地址:https://bbs.21ic.com/icview-3501154-1-1.html?_dsign=67f2f385

或點(diǎn)擊下方閱讀原文跳轉(zhuǎn)

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

    關(guān)注

    60

    文章

    8409

    瀏覽量

    282946
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    410

    瀏覽量

    29284
  • 極海半導(dǎo)體
    +關(guān)注

    關(guān)注

    0

    文章

    206

    瀏覽量

    4825

原文標(biāo)題:極海芯得 EP.72 | APM32F427移植CherryUSB實(shí)現(xiàn)自定義USB HID設(shè)備

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    //當(dāng)作標(biāo)準(zhǔn)系統(tǒng)設(shè)備,從而就成了一個(gè)用戶自定義HID設(shè)備。 0x09, 0x00, // USAGE (0) //這是一個(gè)主條目(bType為0)條目,開(kāi)集合,后面跟的數(shù)據(jù)0x0
    發(fā)表于 03-09 15:23

    CYW54907上的USB主機(jī)自定義

    我正在嘗試在CYW54 907無(wú)線SoC(CYW943907AEVAL1F DEV板)上實(shí)現(xiàn)自定義類的USB 2主機(jī)。我想把主機(jī)連接到一個(gè)在FX3模塊上運(yùn)行的
    發(fā)表于 10-22 14:45

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

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

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

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

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

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

    RK1808虛擬成自定義HID設(shè)備該怎樣去實(shí)現(xiàn)

    RK1808虛擬成自定義HID設(shè)備該怎樣去實(shí)現(xiàn)呢?有哪些實(shí)現(xiàn)步驟?
    發(fā)表于 02-16 06:36

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

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

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

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

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

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

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

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

    ch9329怎么自定義HID?

    1、想問(wèn)一下這么自定義HID,假如想自定義放大縮小圖片功能,該怎么去自定以通訊協(xié)議,有點(diǎn)搞不懂,求解一下自定義功能的使用?
    發(fā)表于 10-11 08:54

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

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

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

    基于HAL庫(kù)的USB自定義HID設(shè)備實(shí)現(xiàn)基于HAL庫(kù)的USB
    發(fā)表于 12-28 20:04 ?13次下載
    基于HAL庫(kù)的<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)告描述符中的用途頁(yè)(USAGE PAGE)決定的,常見(jiàn)的有Generic Desktop Controls ,Keyboard/Keypad ,還有有廠商自定義
    的頭像 發(fā)表于 07-19 08:40 ?2753次閱讀
    【技術(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)試

    CherryUSB-HID設(shè)備實(shí)踐 | 技術(shù)集結(jié)

    本文為大家?guī)?lái)CherryUSB-HID設(shè)備實(shí)踐,以MCXA156為例。開(kāi)發(fā)環(huán)境搭建請(qǐng)參考RT-Thread的快速入門(mén),咱們就直入主題,折騰USB去。CherryUSB
    的頭像 發(fā)表于 04-27 17:46 ?1614次閱讀
    <b class='flag-5'>CherryUSB-HID</b><b class='flag-5'>設(shè)備</b>實(shí)踐 | 技術(shù)集結(jié)