色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹USB實現CDC和MSC復合設備的方法

嵌入式技術開發 ? 來源:嵌入式技術開發 ? 2023-04-14 16:55 ? 次閱讀

之前的文章中介紹過STM32USB應用,包括虛擬串口(CDC)和大容量存儲設備(MSC)。今天來介紹USB實現CDC和MSC復合設備的方法。

1.準備兩個工程

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

2.拷貝到一個工程中

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

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

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

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

復制過來的只有usbd_cdc_if.c和usbd_cdc.c及對應的.h文件,usbd_msccdc.c文件是需要自己實現的USB復合設備的代碼。

3.修改程序

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

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

b)然后編寫usbd_msccdc.c和對應的.h文件。該文件主要是USB復合設備的描述符等,這里不詳細介紹。

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

CDC使用的是0x81 0x01 和0x82三個端點

#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端點

#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虛擬出了一個串口和1個U盤,這里的U盤是一張32G的TF卡。測試一下串口收發和U盤讀寫,都正常。

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • msc
    msc
    +關注

    關注

    0

    文章

    29

    瀏覽量

    20132
  • CDC
    CDC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    17823
  • TF卡
    +關注

    關注

    2

    文章

    80

    瀏覽量

    12178
  • stm32cubemx
    +關注

    關注

    5

    文章

    283

    瀏覽量

    14836

原文標題:基于STM32CubeMx的USB CDC+MSC復合設備

文章出處:【微信號:嵌入式技術開發,微信公眾號:嵌入式技術開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Openharmony中實現USB復合設備

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

    USB復合設備MSC+CDC,CDC_Transmit_FS函數發送不正常的原因?

    單獨測試CDCMSC功能均正常,實現MSC+CDC復合設備后,均可正常識別到,但
    發表于 03-13 07:40

    stm32F446 USB復合CDCMSC,為什么只能識別一個出來?

    我現在做USB復合設備,參照網上了代碼完成了復合設備代碼的修改。但是現在遇到一個問題,就是CDC
    發表于 04-02 06:08

    ESP32S2使用單根USB線創建MSC+CDC與上位機通信,CDC異常的原因?

    芯片型號:ESP32S2 SDK版本:ESP-IDF 4.4.6 現在的環境是使用單根USB線創建MSC+CDC與上位機通信。當CDCMSC同時運行,且
    發表于 06-06 07:29

    USB復合設備MSC+CDCMSC異常影響CDC收發怎么解決?

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

    靈動微課堂(第109講) | MM32 USB功能學習筆記 —— USB復合設備

    ,在前面我們介紹了MM32 實現HID、WINUSB、CDCMSC功能,MM32系列MCU的USB功能有4個端點,所以我們可以自由組合上述
    發表于 03-04 17:23

    STM32 HAL庫實現USB組合設備CDC+MSC 精選資料分享

    STM32 HAL庫實現USB組合設備CDC+MSC目錄STM32 HAL庫實現USB組合
    發表于 08-05 07:54

    怎樣去編寫STM32 USB復合設備

    本實驗是基于野火霸道開發板STM32F103ZET6目的完成一個CDC + MSC復合USB設備可以方便在
    發表于 08-20 07:28

    STM32 USB復合設備編寫的目的是什么

    STM32 USB復合設備編寫目的完成一個CDC + MSC復合
    發表于 08-20 07:10

    STM32 HAL庫是如何去實現USB組合設備CDC+MSC

    STM32 HAL庫是如何去實現USB組合設備CDC+MSC的?其基本步驟有哪些?
    發表于 10-27 06:05

    無法將工作中的USB復合設備應用程序從LPC54114移植到LPC11U68怎么解決?

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

    USB復合設備MSC+CDC,CDC_Transmit_FS函數發送不正常是怎么回事?

    單獨測試CDCMSC功能均正常,實現MSC+CDC復合設備后,均可正常識別到,但
    發表于 08-08 07:32

    USB復合設備的概念及CDC MSC的講解

    購買Hub的費用,而對于開發者則希望可以既不占用多接口,又可以實現多功能,來贏得消費者的關注。USB復合設備就在這樣的市場需求下應運而生。
    發表于 09-07 06:11

    usb復合設備怎么實現cdc和鍵盤功能?

    請問一個usb實現cdc串口和hid鍵盤,用ch554怎么做,不用hub
    發表于 09-21 07:20

    STM32 USB如何配置多個CDC設備—5個CDC設備

    項需求,在STM32F072中需實現5個CDC設備,折騰了很久分享出來,希望能幫助別人少踩一些坑.USB2.0全速,該款單片機支持8個輸出和8個輸入端點,過程中參考了些大佬的貼子STM
    發表于 12-28 19:43 ?31次下載
    STM32 <b class='flag-5'>USB</b>如何配置多個<b class='flag-5'>CDC</b><b class='flag-5'>設備</b>—5個<b class='flag-5'>CDC</b><b class='flag-5'>設備</b>
    主站蜘蛛池模板: 精品国产乱码久久久久久上海公司 | 欧美午夜福利主线路| 国产精品69人妻无码久久久| 在线成 人av影院| 午夜不卡av免费| 欧美激情久久久久久久大片| 精品久久久久亚洲| 高h乱一受多攻男男| 91青青草原| 夜夜国产亚洲视频香蕉| 忘忧草秋观看未满十八| 欧美亚洲精品一区二三区8V| 久久青草在线视频精品| 国产一级特黄a大片99| 国产AV亚洲国产AV麻豆| 99热精品一区| 91进入蜜桃臀在线播放| 一个人看的WWW高清电影| 亚洲.日韩.欧美另类| 色偷偷亚洲天堂| 人妻夜夜爽99麻豆AV| 农村脱精光一级| 蜜臀AV浪潮99国产麻豆| 久久久久久88色偷偷| 解开白丝老师的短裙猛烈进入| 国产伦精品一区二区三区免费| 第一福利在线永久视频| writeas雷狮直播| 99久久久久精品国产免费麻豆| 一个人免费视频在线观看| 亚洲国产第一| 亚洲狠狠97婷婷综合久久久久| 午夜伦理网| 午夜AV亚洲一码二中文字幕青青| 色综合精品无码一区二区三区| 日韩精品一区二区三区AV在线观看| 琪琪伦伦影院理论片| 欧美性喷潮xxxx| 青青久在线视频免费观看| 欧美亚洲综合另类无码| 秋霞伦理手机在线看片|