一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

STM32 USB學(xué)習(xí)筆記1

 goodwangLib 2017-10-25

主機(jī)環(huán)境:Windows 7 SP1

開發(fā)環(huán)境:MDK5.14

目標(biāo)板:STM32F103C8T6

開發(fā)庫:STM32F1Cube庫和STM32_USB_Device_Library

之前在STM32論壇里領(lǐng)取過一塊STM32開發(fā)板,本來以為是帶有USB模塊接口的,最后發(fā)現(xiàn)NUCLEO里是沒有把USB模塊外接出來的,所以就自個(gè)兒掏錢買了一塊單板,如下圖所示:


單板很簡(jiǎn)單,單純是為了學(xué)習(xí)一下STM32的USB模塊,之所以選擇這個(gè)是因?yàn)樗阋?,而且ST官方有提供USB模塊庫方便開發(fā)。

USB開發(fā)博大精深,比之串口,SPI,I2C來說多了很多東西,一個(gè)很簡(jiǎn)單的例子就是串口,SPI,I2C都可以使用通用IO口來模擬實(shí)現(xiàn),但USB卻很少有人這么做。學(xué)習(xí)USB模塊就要學(xué)習(xí)USB協(xié)議,USB協(xié)議從1.1到2.0再到3.0,現(xiàn)在貌似到3.1版本了都,版本更替了這么多但不影響我們學(xué)習(xí),因?yàn)閁SB協(xié)議都是向后兼容的,學(xué)習(xí)了一個(gè)就夠了。STM32F103C8T6的USB模塊實(shí)現(xiàn)了USB2.0全速總線,符合USB2.0全速設(shè)備的計(jì)數(shù)規(guī)范,支持8個(gè)雙向端點(diǎn)等。

USB總線使用兩根線實(shí)現(xiàn)差分傳輸D 、D-,這跟485總線類似。因此,在USB總線上同一時(shí)刻只能有一個(gè)方向上的傳輸。

有關(guān)USB2.0協(xié)議規(guī)范可以從USB官網(wǎng)上下載,重點(diǎn)看第9章節(jié)即可,600多頁的文檔從頭看到尾是很枯燥的。當(dāng)然如果有精力的話,整個(gè)規(guī)范都看完也是很有好處的。跟USB2.0規(guī)范相關(guān)的還有很多類規(guī)范,在開發(fā)時(shí)如果有需要再看就可以了。

一、USB器件庫概述

ST官網(wǎng)提供的USB文檔有STM32Cube USB器件庫,以及USB培訓(xùn)的一些文檔,重點(diǎn)看USB器件庫文檔就好了,因?yàn)槲覀兪前裇TM32的USB模塊當(dāng)作從設(shè)備,當(dāng)然如果STM32支持USB主機(jī)的話還有另外一個(gè)主機(jī)庫(不在這里討論)。通過查看STM32Cube USB器件庫,可以幫助我們快速理解USB模塊的架構(gòu),簡(jiǎn)化應(yīng)用開發(fā)。STM32CubeUSB設(shè)備庫在Cube中所處位置如下:


USB設(shè)備庫位于HAL驅(qū)動(dòng)層之上,在開發(fā)中我們只需關(guān)注USB設(shè)備庫即可,不必關(guān)注USB設(shè)備的HAL驅(qū)動(dòng),不然USB設(shè)備庫就沒有存在的意義了。而且USB設(shè)備庫代碼是只讀的,不需要修改。

設(shè)備庫中使用的主要結(jié)構(gòu)體為設(shè)備句柄,其類型為USBD_HandleTypeDef,我們不必刻意關(guān)注USB HAL驅(qū)動(dòng)中USB所使用的數(shù)據(jù)結(jié)構(gòu),因?yàn)樗鼈儗?duì)于我們來說是隱藏的,只需關(guān)注設(shè)備庫曝露給我們的接口即可,設(shè)備庫是和USB2.0協(xié)議密切相關(guān)的,因此需要熟悉USB2.0文檔有助于我們理解設(shè)備庫的工作流程。

USB設(shè)備庫目錄分為兩層:一層為Core(核心層);另一層為Class(類層),目錄結(jié)構(gòu)如下:


結(jié)構(gòu)比較清晰,核心層是不需要?jiǎng)拥?,類層是擴(kuò)展用的。

USB設(shè)備庫中核心層的usbd_conf文件是需要用戶自己實(shí)現(xiàn)的,用來配置USB的屬性,其各個(gè)文件的作用如下:


其中usbd_req改為了usbd_ioreq。由表7就可以看出USB2.0規(guī)范中第9章很重要。USB器件庫文檔還詳細(xì)說明了一下控制端點(diǎn)0,這在USB開發(fā)中是一個(gè)重要的端點(diǎn)。其作為默認(rèn)的控制端點(diǎn)用于接收主機(jī)發(fā)來的各種請(qǐng)求,請(qǐng)求作為Setup包發(fā)送到設(shè)備,請(qǐng)求又分為標(biāo)準(zhǔn)請(qǐng)求和非標(biāo)準(zhǔn)請(qǐng)求,標(biāo)準(zhǔn)請(qǐng)求在控制端點(diǎn)0上就可處理了,對(duì)于非標(biāo)準(zhǔn)請(qǐng)求通過回調(diào)函數(shù)傳遞給特定類進(jìn)行進(jìn)一步處理。

USB設(shè)備庫的類層中各個(gè)文件作用如下:


其中的usbd_xxx_if_template文件需要由用戶實(shí)現(xiàn),目前跟USB設(shè)備庫相關(guān)的文件有兩個(gè)需要用戶去實(shí)現(xiàn)即usbd_conf文件和usbd_xxx_if_template文件。至此USB器件庫的概述說明就完畢了,更多詳細(xì)情況查看USB器件庫文檔即可。

二、USB協(xié)議概述

USB協(xié)議中用到的一些邏輯部件:

端點(diǎn):數(shù)據(jù)傳輸?shù)淖罱K對(duì)象

管道:主機(jī)和設(shè)備端點(diǎn)之間數(shù)據(jù)傳輸?shù)哪P?/span>

接口:用于描述特定的功能(有一組端點(diǎn)組成)

設(shè)備:由一個(gè)或多個(gè)接口組成

USB傳輸分為了3層:Packet、Transaction、Transfer,三者是由小到大,關(guān)系如下圖:


一次Transfer傳輸分為幾個(gè)Transaction,一次Transaction由幾次Packer組成。

Packet包格式如下:


所有的USB傳輸都是由USB主機(jī)發(fā)起,這點(diǎn)跟I2C通信有些類似。

USB的傳輸分為4類:控制傳輸、中斷傳輸、同步傳輸、批量傳輸,由此引申出4類端點(diǎn)類型:控制端點(diǎn)、中斷端點(diǎn)、同步端點(diǎn)、批量端點(diǎn)。


控制傳輸是雙向的,須有IN和OUT兩個(gè)方向上的端點(diǎn)號(hào)。其他類型的傳輸是單向的。各類傳輸差別不是很大,只是對(duì)時(shí)間的要求不同。

有關(guān)USB協(xié)議的大概情況就介紹到這,更多詳情請(qǐng)查閱USB2.0規(guī)范以及STM32F103的參考手冊(cè)。后面將通過VCP具體示例來分析USB開發(fā)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品久久男人的天堂| 91偷拍与自偷拍精品| 久久国内午夜福利直播| 国产日韩精品欧美综合区| 福利专区 久久精品午夜| 91精品国产av一区二区| 日本精品啪啪一区二区三区| 人妻中文一区二区三区| 亚洲国产中文字幕在线观看| 日韩一区二区三区高清在 | 欧美野外在线刺激在线观看| 午夜福利网午夜福利网| 国产精品欧美一级免费| 精品人妻一区二区三区免费| 日韩欧美一区二区不卡视频| 欧美日本亚欧在线观看| 日韩一区二区三区久久| 人妻熟女欲求不满一区二区| 九九热精品视频免费在线播放 | 午夜福利视频偷拍91| 国产亚洲系列91精品| 国产一级一片内射视频在线| 东北老熟妇全程露脸被内射| 不卡中文字幕在线免费看| 国产乱人伦精品一区二区三区四区| 成人精品日韩专区在线观看| 美女极度色诱视频在线观看| 日本一本在线免费福利| 欧美激情视频一区二区三区| 欧美激情一区=区三区| 国产日韩欧美在线播放| 粉嫩国产一区二区三区在线| 欧美亚洲美女资源国产| 欧美韩日在线观看一区| 久久热在线免费视频精品| 午夜精品黄片在线播放| 欧美六区视频在线观看| 精品熟女少妇av免费久久野外| 日韩1区二区三区麻豆| 日本三区不卡高清更新二区| 国产又粗又猛又爽色噜噜|