在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

介紹USB實(shí)現(xiàn)CDC和MSC復(fù)合設(shè)備的方法

嵌入式技術(shù)開發(fā) ? 來源:嵌入式技術(shù)開發(fā) ? 2023-04-14 16:55 ? 次閱讀

之前的文章中介紹過STM32USB應(yīng)用,包括虛擬串口(CDC)和大容量存儲設(shè)備(MSC)。今天來介紹USB實(shí)現(xiàn)CDC和MSC復(fù)合設(shè)備的方法。

1.準(zhǔn)備兩個(gè)工程

首先用STM32CubeMX分別生成CDC和MSC兩個(gè)工程,測試正常。

2.拷貝到一個(gè)工程中

以其中一個(gè)工程為模板,將另一個(gè)工程中需要的文件拷貝過來。這里以MSC的工程為模板,將CDC工程中的下列文件/文件夾拷貝過來,并添加到工程中。

3c200aac-daa0-11ed-bfe3-dac502259ad0.png3c436254-daa0-11ed-bfe3-dac502259ad0.png

添加完成后的工程目錄如下:

3c55befe-daa0-11ed-bfe3-dac502259ad0.png

復(fù)制過來的只有usbd_cdc_if.c和usbd_cdc.c及對應(yīng)的.h文件,usbd_msccdc.c文件是需要自己實(shí)現(xiàn)的USB復(fù)合設(shè)備的代碼。

3.修改程序

a)首先,原有的工程已經(jīng)有USB復(fù)合設(shè)備的框架了,要使用的話需要添加一個(gè)宏定義:USE_USBD_COMPOSITE,直接在編譯器里添加就行:

3c7f18d0-daa0-11ed-bfe3-dac502259ad0.png

b)然后編寫usbd_msccdc.c和對應(yīng)的.h文件。該文件主要是USB復(fù)合設(shè)備的描述符等,這里不詳細(xì)介紹。

c)其次修改USB CDC和MSC的端點(diǎn),在usbd_cdc.h和usbd_msc.h文件中:

CDC使用的是0x81 0x01 和0x82三個(gè)端點(diǎn)

#ifndefCDC_IN_EP
#defineCDC_IN_EP0x81U/*EP1fordataIN*/
#endif /* CDC_IN_EP */


#ifndefCDC_OUT_EP
#defineCDC_OUT_EP0x01U/*EP1fordataOUT*/
#endif /* CDC_OUT_EP */


#ifndefCDC_CMD_EP
#define CDC_CMD_EP                                  0x82U  /* EP2 for CDC commands */

MSC使用的是0x83和0x03端點(diǎn)

#ifndefMSC_EPIN_ADDR
#define MSC_EPIN_ADDR                0x83U


#ifndefMSC_EPOUT_ADDR
#define MSC_EPOUT_ADDR               0x03U
d)然后把usbd_conf.h文件中USBD_MAX_NUM_INTERFACES的值1修改為3

e)修改usbd_conf.c文件,如下:

3c96ecee-daa0-11ed-bfe3-dac502259ad0.png

f)修改usbd_msc.c和usbd_cdc.c文件如下:

3cc864ea-daa0-11ed-bfe3-dac502259ad0.png3cd80756-daa0-11ed-bfe3-dac502259ad0.png???????

g)最后修改usb_device.c文件:

void MX_USB_DEVICE_Init(void)
{
/*USERCODEBEGINUSB_DEVICE_Init_PreTreatment*/
  /* USER CODE END USB_DEVICE_Init_PreTreatment */


  /* Init Device Library, add supported class and start the library. */
 if (USBD_Init(&hUsbDeviceFS, &usbCmpsitFS_Desc, DEVICE_FS) != USBD_OK)
  {
    Error_Handler();
  }
  /* if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_MSC) != USBD_OK)
  {
    Error_Handler();
  } */


  if(USBD_RegisterClassComposite(&hUsbDeviceFS, &USBD_CDC,CLASS_TYPE_CDC,0) != USBD_OK)
  {
    Error_Handler();
  }


  if(USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if(USBD_RegisterClassComposite(&hUsbDeviceFS, &USBD_MSC,CLASS_TYPE_MSC,0) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_MSC_RegisterStorage(&hUsbDeviceFS, &USBD_Storage_Interface_fops_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_Start(&hUsbDeviceFS) != USBD_OK)
  {
    Error_Handler();
  }


  /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */


  /* USER CODE END USB_DEVICE_Init_PostTreatment */
}

最后,編譯成功后下載程序測試。可以看到USB虛擬出了一個(gè)串口和1個(gè)U盤,這里的U盤是一張32G的TF卡。測試一下串口收發(fā)和U盤讀寫,都正常。

3cf68dd4-daa0-11ed-bfe3-dac502259ad0.png3d180fa4-daa0-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

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

    關(guān)注

    0

    文章

    29

    瀏覽量

    20154
  • CDC
    CDC
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    17858
  • TF卡
    +關(guān)注

    關(guān)注

    2

    文章

    81

    瀏覽量

    12251
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    284

    瀏覽量

    15014

原文標(biāo)題:基于STM32CubeMx的USB CDC+MSC復(fù)合設(shè)備

文章出處:【微信號:嵌入式技術(shù)開發(fā),微信公眾號:嵌入式技術(shù)開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在Openharmony中實(shí)現(xiàn)USB復(fù)合設(shè)備

    如何讓Openharmony設(shè)備HDC接口(OTG接口)作為一個(gè)復(fù)合設(shè)備實(shí)現(xiàn)HDC(HDC:鴻蒙設(shè)備連接器) +
    的頭像 發(fā)表于 06-13 15:03 ?1861次閱讀
    如何在Openharmony中<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>USB</b><b class='flag-5'>復(fù)合</b><b class='flag-5'>設(shè)備</b>

    USB復(fù)合設(shè)備MSC+CDC,CDC_Transmit_FS函數(shù)發(fā)送不正常的原因?

    單獨(dú)測試CDCMSC功能均正常,實(shí)現(xiàn)MSC+CDC復(fù)合設(shè)備后,均可正常識別到,但
    發(fā)表于 03-13 07:40

    stm32F446 USB復(fù)合CDCMSC,為什么只能識別一個(gè)出來?

    我現(xiàn)在做USB復(fù)合設(shè)備,參照網(wǎng)上了代碼完成了復(fù)合設(shè)備代碼的修改。但是現(xiàn)在遇到一個(gè)問題,就是CDC
    發(fā)表于 04-02 06:08

    ESP32S2使用單根USB線創(chuàng)建MSC+CDC與上位機(jī)通信,CDC異常的原因?

    芯片型號:ESP32S2 SDK版本:ESP-IDF 4.4.6 現(xiàn)在的環(huán)境是使用單根USB線創(chuàng)建MSC+CDC與上位機(jī)通信。當(dāng)CDCMSC同時(shí)運(yùn)行,且
    發(fā)表于 06-06 07:29

    USB復(fù)合設(shè)備MSC+CDCMSC異常影響CDC收發(fā)怎么解決?

    MSC讀寫物理存儲設(shè)備的時(shí)候,如果返回一次錯(cuò)誤(錯(cuò)誤碼:-1),不知道為什么會觸發(fā)一個(gè)枚舉中斷(USB_OTG_GINTSTS_ENUMDNE0),會調(diào)用到reset_callback,也會把
    發(fā)表于 07-23 06:23

    靈動(dòng)微課堂(第109講) | MM32 USB功能學(xué)習(xí)筆記 —— USB復(fù)合設(shè)備

    ,在前面我們介紹了MM32 實(shí)現(xiàn)HID、WINUSB、CDCMSC功能,MM32系列MCU的USB功能有4個(gè)端點(diǎn),所以我們可以自由組合上述
    發(fā)表于 03-04 17:23

    STM32 HAL庫實(shí)現(xiàn)USB組合設(shè)備CDC+MSC 精選資料分享

    STM32 HAL庫實(shí)現(xiàn)USB組合設(shè)備CDC+MSC目錄STM32 HAL庫實(shí)現(xiàn)USB組合
    發(fā)表于 08-05 07:54

    怎樣去編寫STM32 USB復(fù)合設(shè)備

    本實(shí)驗(yàn)是基于野火霸道開發(fā)板STM32F103ZET6目的完成一個(gè)CDC + MSC復(fù)合USB設(shè)備可以方便在
    發(fā)表于 08-20 07:28

    STM32 USB復(fù)合設(shè)備編寫的目的是什么

    STM32 USB復(fù)合設(shè)備編寫目的完成一個(gè)CDC + MSC復(fù)合
    發(fā)表于 08-20 07:10

    STM32 HAL庫是如何去實(shí)現(xiàn)USB組合設(shè)備CDC+MSC

    STM32 HAL庫是如何去實(shí)現(xiàn)USB組合設(shè)備CDC+MSC的?其基本步驟有哪些?
    發(fā)表于 10-27 06:05

    無法將工作中的USB復(fù)合設(shè)備應(yīng)用程序從LPC54114移植到LPC11U68怎么解決?

    我無法將工作中的 USB 復(fù)合設(shè)備應(yīng)用程序從 LPC54114 移植到 LPC11U68。問題背景:在此應(yīng)用程序中,設(shè)備被枚舉為僅 CDC
    發(fā)表于 04-14 06:34

    USB復(fù)合設(shè)備MSC+CDC,CDC_Transmit_FS函數(shù)發(fā)送不正常是怎么回事?

    單獨(dú)測試CDCMSC功能均正常,實(shí)現(xiàn)MSC+CDC復(fù)合設(shè)備后,均可正常識別到,但
    發(fā)表于 08-08 07:32

    USB復(fù)合設(shè)備的概念及CDC MSC的講解

    購買Hub的費(fèi)用,而對于開發(fā)者則希望可以既不占用多接口,又可以實(shí)現(xiàn)多功能,來贏得消費(fèi)者的關(guān)注。USB復(fù)合設(shè)備就在這樣的市場需求下應(yīng)運(yùn)而生。
    發(fā)表于 09-07 06:11

    usb復(fù)合設(shè)備怎么實(shí)現(xiàn)cdc和鍵盤功能?

    請問一個(gè)usb實(shí)現(xiàn)cdc串口和hid鍵盤,用ch554怎么做,不用hub
    發(fā)表于 09-21 07:20

    STM32 USB如何配置多個(gè)CDC設(shè)備—5個(gè)CDC設(shè)備

    項(xiàng)需求,在STM32F072中需實(shí)現(xiàn)5個(gè)CDC設(shè)備,折騰了很久分享出來,希望能幫助別人少踩一些坑.USB2.0全速,該款單片機(jī)支持8個(gè)輸出和8個(gè)輸入端點(diǎn),過程中參考了些大佬的貼子STM
    發(fā)表于 12-28 19:43 ?31次下載
    STM32 <b class='flag-5'>USB</b>如何配置多個(gè)<b class='flag-5'>CDC</b><b class='flag-5'>設(shè)備</b>—5個(gè)<b class='flag-5'>CDC</b><b class='flag-5'>設(shè)備</b>
    主站蜘蛛池模板: 女人张开腿等男人桶免费视频 | 免费观看视频在线观看 | 新版天堂8在线天堂 | swag系列国产精品 | 一区不卡视频 | 男人不识本网站上遍色站也枉然 | 天天拍夜夜爽 | 美女视频大全美女视频黄 | 黄频网| 日本三级三级三级免费看 | 欧美一级视频免费 | 一区视频在线播放 | 人人看人人鲁狠狠高清 | 国产成人小视频 | 特级毛片aaaa级毛片免费 | 欧美一级在线观看 | 色吧在线视频 | 亚洲免费视频网址 | 国产性片在线观看 | 亚洲精品亚洲人成毛片不卡 | 亚洲成在人线影视天堂网 | 一品毛片 | 午夜剧场毛片 | 欧美人与性另类 | 亚洲欧洲色| 狠狠躁夜夜躁人人爽天天段 | 在线观看你懂的视频 | 高颜值大长腿美女啪啪 | 亚洲一卡二卡在线 | 亚洲免费视频一区二区三区 | 亚洲精品在线免费观看视频 | 在线色片 | 三级毛片免费看 | 手机在线观看毛片 | 福利盒子手机看片 | 国产特黄一级一片免费 | 亚洲成a人伦理 | 69老司机亚洲精品一区 | 国产小视频在线高清播放 | 天天天色 | 华人黄网站大全 |