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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    瀏覽量

    20261
  • CDC
    CDC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    18062
  • TF卡
    +關注

    關注

    2

    文章

    83

    瀏覽量

    12475
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    15834

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

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

收藏 0人收藏

    評論

    相關推薦

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

    如何讓Openharmony設備HDC接口(OTG接口)作為一個復合設備實現HDC(HDC:鴻蒙設備連接器) +
    的頭像 發表于 06-13 15:03 ?2286次閱讀
    如何在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>
    主站蜘蛛池模板: 国产视频资源 | 国产精品一区二区三 | 日本一区二区三区视频在线观看 | 亚洲视频欧美视频 | 日本午夜片成年www 日本午夜三级 | 欧美性猛 | 亚洲一区二区三区在线 | 男人不识本站 | 欧美视频三区 | 日韩精品视频免费在线观看 | 天天射天天干天天插 | 国产成人三级视频在线观看播放 | 免费两性的视频网站 | 一区二区三区网站在线免费线观看 | 日韩毛片| 精品国产三级在线观看 | 色多多免费在线观看 | 欧美一级免费看 | 二级黄绝大片中国免费视频0 | 亚洲精品黄色 | 黄色录像日本 | 手机福利在线观看 | 网站色 | 美女网站色视频 | 韩国三级观影久久 | 美女张开腿露出尿口让男人桶 | 天天操夜夜草 | 天天插天天操 | 91大神大战高跟丝袜美女 | 色秀视频免费高清网站 | 天天操夜夜操夜夜操 | 寄宿日记免费看 | 中文字幕精品一区影音先锋 | 国产国产人免费人成免费视频 | 99成人在线| 日本不卡高清视频 | 亚洲人成伊人成综合网久久 | 国产视频一二区 | 玖玖国产 | 天堂网最新版www中文 | 黄色午夜视频 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品