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

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

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

3天內不再提示

Mini-F0160實現USB轉3路虛擬串口

靈動MM32MCU ? 來源:靈動MM32MCU ? 2023-05-06 15:47 ? 次閱讀

本節課程主要講述如何通過 Mini-F0160 開發板實現 USB 轉三路虛擬串口功能。

開發板 Mini-F0163
開發環境 MDK-Keil

Mini-F0160 開發板搭載 MM32F0160 ,產品內嵌 1 個 USB 控制器,內置 USB PHY,兼容 USB 2.0 全速規范,提供最高 12 Mbps 數據速率,支持設備模式,USB 控制器提供了最高 8 個雙向端點。

本文源程序下載地址:

https://www.mindmotion.com.cn/download1.aspx?itemid=3816&typeid=5

什么是 CDC 設備

CDC 類是 USB 通信設備類 (Communication Device Class)的簡稱。由 USB 組織定義的專門給各種通信設備使用的 USB 子類。

通常,CDC類由兩個接口子類組成:

通信接口(Communication Interface Class)

主要用于主機對設備進行管理和控制,它包含一個控制類型的端點和一個可選的中斷類型端點。

該控制類型端點 0 一般用作請求,可以用于配置 USB 設備枚舉虛擬串口的波特率、數據類型的設置,比如數據長度、停止位等。在虛擬串口應用中,該操作并不一定需要具體實現。因為主機與設備在物理上通過 USB 總線進行通信,與串口并沒有關系,在虛擬化過程中,起決定性作用的是串口驅動,該驅動將每一條具體的虛擬串口操作對應到實際上的USB操作。同時,主機與設備之間的 USB 通信速率依然是標準的 USB2.0 Full-Speed(12Mbps)速度,并不受所謂的串口波特率影響,實際的速率取決于總線的實際使用率、驅動訪問 USB 外設的有效速率(兩邊)以及外部環境對通信本身造成的干擾率等因素。

該中斷類型端點可以用于異步事件通知,設備端可以通過該端點向主機發送內部時間等,如串口狀態變化事件等。篇幅受限,本文不進行實現。

數據接口類(Data Interface Class)

主要用于主機和設備之間進行數據傳輸,包含輸入(IN)端點和輸出(OUT)端點。

輸入(IN)端點:

用于從設備向主機發送數據。

輸出(OUT)端點:

用于主機向從設備發送數據。

多路虛擬串口的具體實現

多路虛擬串口功能可以通過組合設備(Composite Device)進行實現。組合設備是指具有多個接口,且接口間相互獨立的USB設備。一個USB組合設備只有一個設備地址。在開發過程中,可以將不同的功能與不同的接口對應,來開發多功能的USB設備,描述符層次結構更清晰,出錯容易排查。

設備描述符

設備描述符(Device Descriptor)是在設備連接時主機讀取的第一個描述符,說明了 USB 設備的通用信息,提供關于設備、設備的配置以及任何設備所歸屬類的信息。主機在取得設備描述符后,就可以繼續去獲取設備的配置、接口和端點描述符等信息。

USB 設備只有一個設備描述符。在設備描述符中,可以使用 bDeviceClass = 0x00, bDeviceSubClass = 0x00, dDeviceProtocol = 0x00 表示此類信息在接口描述符內給出;也可以使用【0xEF,0x02,0x01】表示當前為組合設備。下圖為主機請求設備描述符,設備返回設備描述符報文:

9682c2d0-ebe1-11ed-90ce-dac502259ad0.png96994f1e-ebe1-11ed-90ce-dac502259ad0.png

配置描述符

配置描述符(Configuration Descriptor)說明了一個特定配置的相關信息。當主機請求配置描述符時,返回的是所有相關的接口和端點描述符。

一個USB設備有一個或多個配置描述符。配置描述符描述了配置所提供的接口數量。每個接口可以獨立操作。每種配置有一個或多個接口,而且每個接口有零個或多個端點。在一個配置中,接口不會共享一個端點,除非端點被相同接口的備用設置使用。沒有這一限制、屬于不同配置的接口可以共享端點。

配置描述符規定了設備的特征和能力。一般單個配置已經足夠了,但在驅動程序的支持下,帶有多應用或多電源選擇的設備可支持多重配置。且每次只有一個配置被激活。每個配置需要一個配置描述符,其中含有關于設備電源使用及所支持接口數的信息。每個配置描述符都有附屬描述符(subordinate descriptor),包括一個或多個接口描述符(Interface Descriptor)以及可選的端點描述符(Endpoint Descriptor)。

配置描述符如下:

9682c2d0-ebe1-11ed-90ce-dac502259ad0.png96c09970-ebe1-11ed-90ce-dac502259ad0.png

接口描述符

下圖所示為標準的接口描述符定義。

96d3ab00-ebe1-11ed-90ce-dac502259ad0.png

單個CDC類的描述符需要兩個接口:通信接口描述符和數據接口描述符。這兩個接口需要接口關聯描述符(Interface Association Descriptor)進行綁定。

96ed17de-ebe1-11ed-90ce-dac502259ad0.png

接口關聯描述符

IAD 接口關聯描述符提供了一種功能:即把實現單個功能的多個 Interface 打包在一起。通過接口關聯描述符打包在一起的若干 Interface 是同一個功能設備的 Interface,PC端只需要加載同一個驅動即可。

970e5976-ebe1-11ed-90ce-dac502259ad0.png

通信(控制)接口描述符

該接口描述符需要包含功能描述符(Header,Call Management, ACM)、端點描述符。

9726c74a-ebe1-11ed-90ce-dac502259ad0.png

功能描述符

Header 功能描述符

9739a0ae-ebe1-11ed-90ce-dac502259ad0.png

Call Management 功能描述符

97524aaa-ebe1-11ed-90ce-dac502259ad0.png

ACM

976ba1d0-ebe1-11ed-90ce-dac502259ad0.png

Union 功能描述符

978c0a38-ebe1-11ed-90ce-dac502259ad0.png

數據接口描述符

97acff4a-ebe1-11ed-90ce-dac502259ad0.png

端點描述符

下圖所示為標準的端點描述符定義。

97d2e30e-ebe1-11ed-90ce-dac502259ad0.png

本文中分配的端點如下:

97ea7398-ebe1-11ed-90ce-dac502259ad0.png

代碼:

/*CDC端點1*/
#defineEPNUM_CDC_0_NOTIF0x81
#defineEPNUM_CDC_0_OUT0x02
#defineEPNUM_CDC_0_IN0x82

/*CDC端點2*/
#defineEPNUM_CDC_1_NOTIF0x83
#defineEPNUM_CDC_1_OUT0x04
#defineEPNUM_CDC_1_IN0x84

/*CDC端點3*/
#defineEPNUM_CDC_2_NOTIF0x85
#defineEPNUM_CDC_2_OUT0x06
#defineEPNUM_CDC_2_IN0x86

配置描述符 / 接口描述符 / 端點描述符

uint8_tconstdesc_fs_configuration[]=
{
/*Confignumber,interfacecount,stringindex,totallength,attribute,powerinmA*/
TUD_CONFIG_DESCRIPTOR(1,ITF_NUM_TOTAL,0,CONFIG_TOTAL_LEN,0x00,100),

/*1stCDC:Interfacenumber,stringindex,EPnotificationaddressandsize,EPdataaddress(out,in)andsize.*/
TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_0,4,EPNUM_CDC_0_NOTIF,8,EPNUM_CDC_0_OUT,EPNUM_CDC_0_IN,64),

/*2ndCDC:Interfacenumber,stringindex,EPnotificationaddressandsize,EPdataaddress(out,in)andsize.*/
TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_1,4,EPNUM_CDC_1_NOTIF,8,EPNUM_CDC_1_OUT,EPNUM_CDC_1_IN,64),

/*3ndCDC:Interfacenumber,stringindex,EPnotificationaddressandsize,EPdataaddress(out,in)andsize.*/
TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_2,4,EPNUM_CDC_2_NOTIF,8,EPNUM_CDC_2_OUT,EPNUM_CDC_2_IN,64),
};

字符串描述符

charconst*string_desc_arr[]=
{
(constchar[]){0x09,0x04},//0:Supportedlanguage:English(0x0409)
"MindMotion",//1:Manufacturer
"MM32-3VCP",//2:Product
"20221229",//3:Serials
"CDCVirtualCOM",//4:CDCInterface
};

CDC Task 接口

在該接口函數中,本文主要實現了各個串口的回環功能,即在任務處理中發送當前端點的接收字符。

voidcdc_task(void)
{
uint8_titf;

for(itf=0;itf

基本測試

如上,我們就完成三路虛擬串口的CDC功能,將程序下載到MCU中,插上USB線,然后在電腦的設備管理器的端口欄就可以找到對應的USB CDC枚舉模擬串口設備。

98059c18-ebe1-11ed-90ce-dac502259ad0.png9818531c-ebe1-11ed-90ce-dac502259ad0.png

成功枚舉,我們繼續在Windows 和 Linux 環境下測試一下通信:

982c8f12-ebe1-11ed-90ce-dac502259ad0.png98591dc0-ebe1-11ed-90ce-dac502259ad0.png

測試成功。本文分享到此結束,謝謝!

審核編輯:湯梓紅

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

    關注

    60

    文章

    8056

    瀏覽量

    269378
  • 通信設備
    +關注

    關注

    3

    文章

    345

    瀏覽量

    32442
  • 串口
    +關注

    關注

    14

    文章

    1580

    瀏覽量

    78295
  • 開發板
    +關注

    關注

    25

    文章

    5378

    瀏覽量

    100658
  • 虛擬串口
    +關注

    關注

    3

    文章

    62

    瀏覽量

    14091
收藏 人收藏

    評論

    相關推薦

    在STM32F3 DISCOVERY上實現USB虛擬串口的作品

    【MCU實戰經驗】在STM32F3DISCOVERY上實現USB虛擬串口 我們知道,STM32F3
    發表于 04-04 17:15

    STM32如何快速實現USB虛擬串口+回環測試+USBTTL的功能?

    STM32如何快速實現USB虛擬串口+回環測試+USBTTL的功能?
    發表于 12-08 06:20

    介紹STM32F407 USB串口功能的實現

    之前的文章中介紹過STM32的USB接口虛擬串口的功能。《STM32CubeMX之USB從機》。本篇文章在此基礎上,以STM32F407為例
    發表于 02-22 06:29

    usb串口usbrs232串口

    USB串口實現計算機USB接口到通用串口之間的轉換.us
    發表于 04-27 16:13
    <b class='flag-5'>usb</b><b class='flag-5'>轉</b><b class='flag-5'>串口</b>—<b class='flag-5'>usb</b><b class='flag-5'>轉</b>rs232<b class='flag-5'>串口</b>

    微雪電子FT232(mini)USBUSART簡介

    FT232 USBUART串口模塊 USB mini接口 采用原裝FT232RL 支持3
    的頭像 發表于 12-30 15:04 ?3649次閱讀
    微雪電子FT232(<b class='flag-5'>mini</b>)<b class='flag-5'>USB</b><b class='flag-5'>轉</b>USART簡介

    USB虛擬串口

    STM32實現虛擬串口功能廢話不多說直接上代碼,Gitlab下載鏈接。USB虛擬串口用的是正點原
    發表于 12-28 19:49 ?11次下載
    <b class='flag-5'>USB</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    STM32 USB虛擬串口波特率問題(含源碼)

    之前的文章中介紹過STM32的USB接口虛擬串口的功能。《STM32CubeMX之USB從機》。本篇文章在此基礎上,以STM32F407為例
    發表于 12-28 19:51 ?21次下載
    STM32 <b class='flag-5'>USB</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>波特率問題(含源碼)

    STM32實現USB串口功能(含源碼)

    之前的文章中介紹過STM32的USB接口虛擬串口的功能。《STM32CubeMX之USB從機》。本篇文章在此基礎上,以STM32F407為例
    發表于 12-28 20:03 ?55次下載
    STM32<b class='flag-5'>實現</b><b class='flag-5'>USB</b><b class='flag-5'>轉</b><b class='flag-5'>串口</b>功能(含源碼)

    基于 RT-Thread 在 STM32 上實現 USB 虛擬串口

    之前由于工作需要,基于 RT-Thread 在 STM32 上實現USB 虛擬串口。為了方便大家,我在這里把在正點原子 F429 阿波羅
    發表于 02-10 10:01 ?4次下載
    基于 RT-Thread 在 STM32 上<b class='flag-5'>實現</b> <b class='flag-5'>USB</b> <b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    基于 RT-Thread 在 STM32 上實現 USB 虛擬串口

    之前由于工作需要,基于 RT-Thread 在 STM32 上實現USB 虛擬串口。為了方便大家,我在這里把在正點原子 F429 阿波羅
    發表于 02-10 10:28 ?9次下載
    基于 RT-Thread 在 STM32 上<b class='flag-5'>實現</b> <b class='flag-5'>USB</b> <b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    USB串口簡介及工作原理說明

    USB串口即可實現計算機USB接口到物理串口之間的相互轉換。
    發表于 06-09 09:16 ?5996次閱讀

    如何通過Mini-F0160開發板實現USB虛擬串口功能?

    Mini-F0160 開發板搭載 MM32F0160 ,產品內嵌 1 個 USB 控制器,內置 USB PHY,兼容 USB 2.0 全速規
    的頭像 發表于 05-06 15:45 ?1001次閱讀
    如何通過<b class='flag-5'>Mini-F0160</b>開發板<b class='flag-5'>實現</b><b class='flag-5'>USB</b><b class='flag-5'>轉</b>三<b class='flag-5'>路</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>功能?

    Mini-F0160實現USB3虛擬串口

    CDC 類是 USB 通信設備類 (Communication Device Class)的簡稱。由 USB 組織定義的專門給各種通信設備使用的 USB 子類。
    的頭像 發表于 05-24 15:17 ?1817次閱讀
    <b class='flag-5'>Mini-F0160</b><b class='flag-5'>實現</b><b class='flag-5'>USB</b><b class='flag-5'>轉</b><b class='flag-5'>3</b><b class='flag-5'>路</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    基于STM32F407的USB串口功能實現

    實現USB串口的功能,需要將單片機真實串口(這里以USART1為例)的收發數據與USB口進行
    發表于 10-16 16:04 ?2880次閱讀
    基于STM32<b class='flag-5'>F</b>407的<b class='flag-5'>USB</b><b class='flag-5'>轉</b><b class='flag-5'>串口</b>功能<b class='flag-5'>實現</b>

    usb串口線怎么使用 usb串口串口usb的區別

    )進行通信。因此,通過使用USB串口線,可以將現代計算機與串口設備連接起來,實現數據傳輸和通信。 在使用
    的頭像 發表于 01-22 14:56 ?5749次閱讀
    主站蜘蛛池模板: 香蕉网影院在线观看免费 | 久久伊人成人网 | 四虎在线观看免费永久 | 国产亚洲精品在天天在线麻豆 | 你懂的福利 | 日本xxxx69| 色婷婷网 | 日本视频一区在线观看免费 | 国产美女精品三级在线观看 | 成人a毛片视频免费看 | 成人5252色 | 色老头在线官方网站 | 高清色 | 一级大片免费观看 | 成人国产一区二区三区 | 免费日韩三级 | 免费人成在线观看网站品爱网日本 | 手机在线你懂的 | 青草视频久久 | 六月天色婷婷 | 日本一区二区免费在线观看 | 爽好舒服快小柔小说 | xxxx性欧美高清| 日本特黄特色免费大片 | 一区二区手机视频 | 亚洲免费色视频 | 都市禁忌猎艳风流美妇 | 黄色888| 影院在线观看免费 | 国色天香精品亚洲精品 | 成人精品一级毛片 | 男人边吃奶边爱边做视频日韩 | 五月天婷婷综合 | 色综合激情 | 国产高清免费视频 | 免费看毛片网 | 狠狠狠色丁香婷婷综合久久88 | 五月亭亭免费高清在线 | 久久精品在 | 国产色窝| 窝窝午夜在线观看免费观看 |