久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19030|回復: 19
收起左側(cè)

基于STM32F103xx的USB轉(zhuǎn)多路串口(USB-Multiple-CDC)測試已完成,全部開啟DMA自動發(fā)...

  [復制鏈接]
ID:75926 發(fā)表于 2015-4-4 01:38 | 顯示全部樓層 |閱讀模式

基于STM32F103xx的USB轉(zhuǎn)多路串口(USB-Multiple-CDC)測試已完成,全部開啟DMA自動發(fā)送功能。簡要說明如下:


1. 支持通過DMA方式連續(xù)發(fā)送超過64字節(jié)大小的數(shù)據(jù)包。而且在DMA發(fā)送的同時,繼續(xù)接收來自PC主機的數(shù)據(jù)。發(fā)完64字節(jié)后,RS485不換向,可以立即發(fā)送剩余的數(shù)據(jù)。

2. USB轉(zhuǎn)多路串口(USB-Multiple-CDC)支持在大蝦103核心板,USB-Dual-RS485板上運行,代碼無需修改。在其它板子上運行,需要修改USB控制腳和RS485控制腳。

3. 三路CDC串口,均支持DMA發(fā)送功能,接收仍為中斷方式。TLL通信使用時,波特率不要超過921600bps。RS232/RS485通信時,硬件限制一般不能超過250000/500000bps。


STM32_USB-FS-Device_Lib_V7.0.0.2014.12.20_3CDC_for_DX103.zip 可不用修改直接運行在大蝦103核心板上。其它STM32F103xx板子需要修改。

備注: USB-Dual-RS485板的通信部分為專用磁耦隔離的RS485芯片,只需要一個USB端口,就能同時連接兩臺PLC
刷新程序。目前
USB-Dual-RS485板處于缺貨狀態(tài),但有大蝦103核心板大量供應。

附錄:“USB復合設備”和
“USB組合設備”的區(qū)別

關鍵字

Communication Device Class,簡稱CDC

USB Compound Device,USB復合設備
USB Composite Device,USB組合設備

摘要
Compound Device內(nèi)嵌Hub和多個Function,每個Function都相當于一個獨立的USB外設,有自己的PID/VID/DID。
Composite Device內(nèi)只有一個Function,只有一套PID/VID/DID,通過將不同的interface定義為不同的類來實現(xiàn)
多個功能的組合。


正文
Compound Device內(nèi)嵌Hub和多個Function,每個Function都相當于一個獨立的USB外設,有自己的PID/VID/DID。

Composite Device內(nèi)只有一個Function,只有一套PID/VID/DID,通過將不同的interface定義為不同的類來實現(xiàn)多個功能的組

合。很多人認為一個USB接口上實現(xiàn)多個設備,就是指復合設備,其實,這是不確切的,雖然USB Compound Device和USB Composite Device 都會被百度翻譯為USB復合設備。

在一個USB接口上實現(xiàn)多個設備有2中方法,一種是Compound Device,就是復合設備;另一種是Composite Device,就是組合設備。
在USB2.0的標準協(xié)議中,定義如下:


When multiple functions are combined with a hub in a single package, they are referred to as a compound device.



A device that has multiple interfaces controlled independently of each other is referred to as a

composite device.


所以,復合設備其實就是幾個設備通過一個USB Hub形成的單一設備;組合設備也就是具有多個接口的設備,每個接口代表一個獨立的設備。顯然,如果是想同樣的功能的話,組合設備的方法要簡單很多(可以去看一下USB2.0協(xié)議中,USB2.0 Hub的復雜度)。

附錄:USB Serial Tools工具軟件的特殊功能介紹


一般的串口調(diào)試工具,不會針對USB插拔做專門的檢測和處理,比較容易崩潰,例如微軟收購的超級終端等。
USB Serial Tools 是本人自2009-2012年,個人業(yè)余時間開發(fā)的一個帶有USB插拔檢測的串口調(diào)試軟件。
和其它串口調(diào)試工具相比,是專用軟件,值得一提的功能如下:
1 支持高波特率。(支持該功能的串口調(diào)試工具屈指可數(shù),大部分串口調(diào)試工具僅支持到115200)
2 支持USB插拔檢測。(支持該功能的串口調(diào)試工具屈指可數(shù),大部分串口調(diào)試工具都會因此崩潰)
3 支持STM32虛擬串口的USB端點號顯示(該工具特有的支持,和嵌入式及PC的底層驅(qū)動相關)。







1. USB數(shù)據(jù)接收及阻塞式串口發(fā)送,部分源代碼瀏覽如下:
/* USB的OUT端點 通過物理串口向外發(fā)送數(shù)據(jù)(阻塞方式) */
#define EPx_OUT_Callback(ENDPx, USARTx, GPIOx, GPIO_Pin_x) {\
    uint32_t i;\
    uint16_t USB_Rx_Cnt;\
    USB_Rx_Cnt = USB_SIL_Read(ENDPx | 0x00, USB_Rx_Buffer); \
    GPIOx->BSRR = GPIO_Pin_x;\
    for (i = 0; i < USB_Rx_Cnt; i++) {\
        USARTx->DR = *(USB_Rx_Buffer + i);\
        while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);\
    }\
    SetEPRxValid(ENDPx);\
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);\
    USART_ClearFlag(USARTx, USART_FLAG_TC);\
    GPIOx->BRR = GPIO_Pin_x;\
}
2. USB數(shù)據(jù)接收及DMA式串口發(fā)送,部分源代碼瀏覽如下
/* USB的OUT端點 通過物理串口向外發(fā)送數(shù)據(jù)(DMA方式) */
#define EPx_OUT_Callback_DMA(Flag_VCPx_Tx_Buf_Use, ENDPx, VCPx_Tx_Buffer1,VCPx_Tx_Buffer2,\
    GPIOx, GPIO_Pin_x, DMA1_Channelx, VCPx_Tx_Buffer_Cnt, Flag_VCPx_Tx_Buf_Full) {\
    uint16_t USB_Rx_Cnt;\
    if(Flag_VCPx_Tx_Buf_Use == 0){\
        USB_Rx_Cnt = GetEPRxCount(ENDPx & 0x7F);\
        PMAToUserBufferCopy(&VCPx_Tx_Buffer1[0], GetEPRxAddr(ENDPx & 0x7F), USB_Rx_Cnt);\
        SetEPRxValid(ENDPx);\
        GPIOx->BSRR = GPIO_Pin_x;\
        DMA1_Channelx->CNDTR = USB_Rx_Cnt;\
        DMA_Cmd(DMA1_Channelx, ENABLE);\
        Flag_VCPx_Tx_Buf_Use = 1;\
        VCPx_Tx_Buffer_Cnt = 0;\
    } else {\
        USB_Rx_Cnt = GetEPRxCount(ENDPx & 0x7F);\
        if(VCPx_Tx_Buffer_Cnt < (1024-128)){\
          PMAToUserBufferCopy(&VCPx_Tx_Buffer2[VCPx_Tx_Buffer_Cnt], GetEPRxAddr(ENDPx & 0x7F), USB_Rx_Cnt);\
          VCPx_Tx_Buffer_Cnt += USB_Rx_Cnt;\
          SetEPRxValid(ENDPx);\
        } else {\
          PMAToUserBufferCopy(&VCPx_Tx_Buffer2[VCPx_Tx_Buffer_Cnt], GetEPRxAddr(ENDPx & 0x7F), USB_Rx_Cnt);\
          VCPx_Tx_Buffer_Cnt += USB_Rx_Cnt;\
          Flag_VCPx_Tx_Buf_Full = 1;\
        }\
    }\
}


以上兩段代碼是帶參數(shù)的宏,由于是多個USB端點和串口之間的通信數(shù)據(jù)轉(zhuǎn)發(fā),思路是一樣的,但寫代碼的時候,
就非常容易寫錯,因此用帶參數(shù)的宏代替。每個虛擬串口通信函數(shù)內(nèi),都插入這些帶參數(shù)的宏,編譯器在編譯預
處理時,會將這些宏展開, 然后再進行編譯。只要調(diào)好了一個虛擬串口,另外兩個就調(diào)好了,非常方便。編譯器
是不會出現(xiàn)書寫錯誤的。

One CDC function requires 2 IN / 1 OUT endpoints (interrupt IN/ bulk IN/ bulk OUT), other than the default EP.
Available endpoints of each STM32F family are,

STM32F102/103
- FS Device core: 7 IN / 7 OUT

STM32F105/107
- OTG_FS: 3 IN / 3 OUT

STM32F2xx/4xx
- OTG_FS: 3 IN / 3 OUT
- OTG_HS: 5 IN / 5 OUT

STM32F102/103 - 3x CDC composite
STM32F105/107 - just one CDC
STM32F2xx/4xx - 2x CDC composite on OTG_HS






評分

參與人數(shù) 1威望 +5 收起 理由
0406445 + 5 很給力!

查看全部評分

回復

使用道具 舉報

ID:89891 發(fā)表于 2015-9-11 14:44 | 顯示全部樓層
樓主,能給個源碼呀?
回復

使用道具 舉報

ID:90881 發(fā)表于 2015-9-23 15:58 | 顯示全部樓層
樓主好,我正在做USB枚舉3個串口的項目。想請教您一些問題。我的郵箱  550253025@qq.com,請加我好么
回復

使用道具 舉報

ID:90881 發(fā)表于 2015-9-23 16:01 | 顯示全部樓層
USB 轉(zhuǎn)3路串口,需要創(chuàng)建3個cdc-acm類,還是3個實例啊?這部分不懂,請賜教
回復

使用道具 舉報

ID:91616 發(fā)表于 2015-10-4 22:35 | 顯示全部樓層
good!!!!!
回復

使用道具 舉報

ID:74620 發(fā)表于 2016-6-22 18:31 | 顯示全部樓層
想問問樓主用的單片機的具體型號,我用的是STM32F103VET6,HID模式ok,CDC插上后,連無法識別的USB提示都沒有,我查的JLINK模式需要退出調(diào)試后,將單片機復位,試過后,還是覺得不行,看看你能不能給點好的建議。謝謝親,么么噠!
回復

使用道具 舉報

ID:74620 發(fā)表于 2016-6-22 18:39 | 顯示全部樓層
想問問樓主用的單片機具體型號,我用的是STM32f103vet6,HID模式OK,CDC模式插上后,連無法識別的USB接口的提示都沒有,希望幫忙解決一下,我的QQ是1036980828,請您有時間幫助解決下,謝謝,么么噠!
回復

使用道具 舉報

ID:74620 發(fā)表于 2016-6-22 18:44 | 顯示全部樓層
樓主你好,不知你用的單片機具體型號是什么,我的是STM32f103vet6,HID模式OK,CDC模式插上后連無法識別的USB提示都沒有,我的QQ是1036980828,希望看到后可以給我回復,謝謝了,么么噠!
回復

使用道具 舉報

ID:73429 發(fā)表于 2016-12-30 23:22 | 顯示全部樓層
樓主有沒有公開源碼啊?還有,你寫的那個串口工具,在哪里可以找到啊?
回復

使用道具 舉報

ID:275678 發(fā)表于 2018-1-13 21:06 | 顯示全部樓層
seven 發(fā)表于 2015-9-23 15:58
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

你好!我想問下你這個方案最后實現(xiàn)了嗎?
回復

使用道具 舉報

ID:165037 發(fā)表于 2018-6-20 09:43 | 顯示全部樓層
能下載測試一下么
回復

使用道具 舉報

ID:294362 發(fā)表于 2018-11-28 10:15 | 顯示全部樓層
你好,樓主,組合設備的CDC設備,PC端發(fā)下來的修改CDC波特率怎么實現(xiàn)?怎么才能識別到是發(fā)給哪個設備的CDC?我現(xiàn)在改收到波特率是幾個串口同時改波特率了,因無法知道是發(fā)給哪個的設備,所有只能改所有的設備波特率,無法實現(xiàn)獨立控制,挺麻煩的!請問要如何解決?
回復

使用道具 舉報

ID:294362 發(fā)表于 2018-11-28 10:20 | 顯示全部樓層
你好樓主,這個組合設備CDC,如果PC端發(fā)修改波特率下來后,是發(fā)給哪個設備的要如何識別?怎么區(qū)分是發(fā)給哪個設備的?我只能控制所有設備都同時改波特率了,因為我無法區(qū)分數(shù)據(jù)是發(fā)給哪個設備的!要怎么做才能獨立控制?
回復

使用道具 舉報

ID:94309 發(fā)表于 2019-1-24 15:15 | 顯示全部樓層
我還以為提供全部代碼給我們參考呢
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区四区 | 96久久久久久 | 毛片在线视频 | 日韩精品一区二区三区免费视频 | 免费观看羞羞视频网站 | 国产女人第一次做爰毛片 | 羞羞视频免费观看 | 欧美精品中文字幕久久二区 | 久久1区 | 中文字幕免费 | 黄色免费网址大全 | 中文字幕一区二区三区日韩精品 | 美日韩精品 | 在线免费观看成人 | 精品久久久久久亚洲综合网 | 日韩成人免费视频 | 国产精品视频网 | 一区二区三区免费 | 成人不卡| 狠狠涩 | 中文字幕 在线观看 | 亚洲精选久久 | 成人在线免费观看视频 | 日韩国产精品一区二区三区 | 精品福利av导航 | 天天干夜夜操视频 | 欧洲成人 | 日韩不卡视频在线 | 久久伊| 日韩在线国产 | 91网站在线观看视频 | 亚洲三级在线观看 | 日韩在线免费 | 欧美成人精品在线观看 | 欧美三级电影在线播放 | 7777精品伊人久久精品影视 | 九九热视频这里只有精品 | 欧美午夜视频 | 亚洲第一视频网 | 国产精品99久久久久久久久久久久 | 成年人黄色小视频 |