一些應(yīng)用中,涉及到對存儲設(shè)備的數(shù)據(jù)訪問,例如USD卡、U盤。具備USB OTG控制器的STM32,可以實(shí)現(xiàn)對U盤訪問的支持。本文介紹STM32對于U盤訪問的硬件/軟件實(shí)現(xiàn)。介紹如何利用STM32CubeMX,一步一步實(shí)現(xiàn)STM32訪問U盤。僅需簡單的幾個(gè)步驟, 實(shí)現(xiàn)U盤訪問的應(yīng)用開發(fā)。
MSC類簡介
MSC (Mass Storage Class) 是USB規(guī)范提供的一種USB大容量存儲設(shè)備類,允許一個(gè)USB接口的設(shè)備與USB主機(jī)相連接,以便在兩者之間傳輸文件。USB MSC傳輸協(xié)議分為CBI (Control / Bulk / Interrupt) 和 BOT (Bulk-only Transfer)。BOT協(xié)議在不影響功能的情況下省去了對Interrupt端點(diǎn)的需求,被存儲設(shè)備廣泛支持。STM32提供的USB庫支持USB MSC BOT協(xié)議。
MSC設(shè)備包含很多種,例如U盤、讀卡器、移動硬盤等。STM32通過內(nèi)含的USB OTG控制器(支持主機(jī)模式)和USB主機(jī)庫,實(shí)現(xiàn)對MSC類的支持,進(jìn)而實(shí)現(xiàn)對U盤訪問的支持。本文中不涉及到USB MSC (Mass Storage Class) 的詳細(xì)介紹 ,更多MSC類介紹,請參考《USB進(jìn)階培訓(xùn)_Part1_USB類的介紹》。
01
硬件支持
不同的STM32系列,對USB的支持情況如下。對于STM32F105/107、STM32F2、STM32F4、STM32F7和STM32H7系列,部分型號支持USB OTG,能夠?qū)崿F(xiàn)USB 主機(jī)和從機(jī)。U盤作為USB MSC設(shè)備,需要STM32作為USB MSC主機(jī),實(shí)現(xiàn)兩者間的訪問。(注:系列中不是所有型號都支持OTG,以具體型號手冊為準(zhǔn)。)
STM32 OTG硬件電路圖如下所示。CN3為USB連接器。
對于STM32 OTG,配置為僅主機(jī)模式時(shí),不需使用OTG_ID,可將其引腳用于其他功能。并且在不使用SRP (Session Request Protocol) 和HNP (Host Negotiation Protocol) 時(shí),可不連接VBUS至PA9。電路簡化如下圖。
更多關(guān)于STM32 USB硬件設(shè)計(jì),請參考《AN4879 USB hardware and PCB guidelines using STM32 MCUs》。
02
軟件支持
STM32擁有豐富的軟件資源,推薦如下兩個(gè)軟件包:
STM32Cube軟件包(包含USB/OTG庫,支持MSC協(xié)議)
STM32CubeMX輔助開發(fā)工具(輔助開發(fā)自定義板上應(yīng)用)
上述軟件都是免費(fèi)對外開發(fā),可在意法半導(dǎo)體官網(wǎng)www.st.com下載。
U盤訪問實(shí)現(xiàn)例
一步一步呈現(xiàn)訪問U盤的STM32開發(fā)過程,實(shí)現(xiàn)對U盤的讀寫等操作。在下面的詳解步驟中,會介紹一些主機(jī)庫和應(yīng)用機(jī)制的內(nèi)容。如果希望快速開發(fā),可以直接按照步驟開發(fā),略過講解性的內(nèi)容。
01
前期準(zhǔn)備
出于遵循完全一致的實(shí)驗(yàn)步驟考慮,實(shí)例基于ST發(fā)布的STM32F469I-DISCO板。除此之外,開發(fā)者也可以根據(jù)自己的目標(biāo)板的具體情況,參考后面介紹的實(shí)例進(jìn)行配置。
★
STM32板
USB線
2 * USB線
Type A ←→ Mini B
Type A ←→ Micro B
STM32CubeMX
Cube軟件包
STM32CubeF4(1)
說明:在安裝STM32CubeMX后,在其“菜單欄\Help\Install New Libraries”中安裝STM32CubeF4.
本文實(shí)現(xiàn)例中采用的是V1.21.0
IDE
IAR (EWARM)
除IAR外,CubeMX還支持MDK、TrueStudio和SW4STM32等。
文本實(shí)現(xiàn)例中采用IAR v8.30.1
注1:STM32F469I-DISCO板的原理圖、用戶手冊等資源可通過鏈接獲取。
注2:STM32CubeF4可以按照介紹方式獲取,或者直接在官網(wǎng)下載,然后通過STM32CubeMX從本地導(dǎo)入軟件包功能完成導(dǎo)入。
02
應(yīng)用實(shí)現(xiàn)
一、開發(fā)流程
結(jié)合STM32CubeMX的軟件開發(fā)流程如下圖。
二、開發(fā)步驟詳解
接下來一步一步呈現(xiàn)實(shí)現(xiàn)過程。
1.打開STM32CubeMX,點(diǎn)擊File\New Project,選擇STM32F469NI(STM32F469I-DISCO板上微控制器型號)。
2.外設(shè)和中間件的選擇。首先結(jié)合STM32F469I-DISCO板的原理圖,了解功能實(shí)現(xiàn)必備的接口的使用情況,如下表所示。
注1. 在不考慮SRP和HNP時(shí),訪問U盤,只需要STM32的USB OTG的USB數(shù)據(jù)正負(fù)線即可。
根據(jù)硬件情況,選擇調(diào)試接口、外部時(shí)鐘、USB OTG FS和USB中間件,如下圖所示。
在引腳分布圖,PB2引腳上單擊鼠標(biāo)左鍵,選擇‘GPIO_Output’,如下圖所示。
3. 配置時(shí)鐘,使USB時(shí)鐘為48MHz,如下圖。其中,步驟2中外部高速晶振值要和硬件上匹配。由于USB時(shí)鐘精度要求高,STM32F469內(nèi)部時(shí)鐘無法達(dá)到要求,必須選用外部高速時(shí)鐘,如步驟3所示。對于HCLK(處理器時(shí)鐘,步驟6配置),根據(jù)性能需要進(jìn)行設(shè)置,或者簡單的設(shè)置為最大值。
4. USB和關(guān)聯(lián)的引腳配置。主要對VBUS使能引腳進(jìn)行配置及關(guān)聯(lián)。
在USB_HOST界面,配置Drive_VBUS_FS關(guān)聯(lián)引腳為PB2(與硬件連接對應(yīng))。VBUS電源開關(guān)器件為STMPS2151STR,高電平使能。所以配置如下,在初始化后為低電平(圖中步驟7~10)。其他保持默認(rèn)。
5.設(shè)置工程,如下圖所示(點(diǎn)擊菜單欄\Project\Settings打開)。選擇對應(yīng)的IDE和希望基于的STM32Cube軟件包位置。實(shí)例簡單,堆棧占用小,堆棧配置保持默認(rèn)即可。除EWARM外,STM32CubeMX還支持MDK-ARM、TrueStudio、SW4STM32等。
6. 點(diǎn)擊菜單欄\Project\Generate Code生成工程。
工程生成后,會出現(xiàn)提示框,點(diǎn)擊"Open Project"打開工程。工程架構(gòu)和文件結(jié)構(gòu)如下圖(右側(cè)為USB主機(jī)應(yīng)用架構(gòu))。生成工程包含全部層的實(shí)現(xiàn),開發(fā)者在生成工程的基礎(chǔ)上,可直接調(diào)用寫讀等API,實(shí)現(xiàn)對U盤的訪問。
注: USB主機(jī)庫和各文件功能介紹,請參考《UM1720 STM32Cube USB host library》。
7. 添加U盤訪問實(shí)現(xiàn)。
STM32CubeMX生成的工程,調(diào)用STM32Cube USB主機(jī)庫。在庫中,軟核將USB事件傳輸至用戶層,并執(zhí)行回調(diào)用戶函數(shù)。方便在用戶層的回調(diào)函數(shù)中添加應(yīng)用實(shí)現(xiàn)。用戶回調(diào)事件如下表。
USB軟核狀態(tài)機(jī)如下圖所示。
在HOST_CLASS狀態(tài)中,軟核會通知應(yīng)用類初始化完成。對U盤的訪問,應(yīng)放置在應(yīng)用層接收到類初始化完成事件后,即HOST_USER_CLASS_ACTIVE事件后,否則無法正常工作。
在工程中添加/修改對U盤的寫讀訪問操作和相關(guān)源碼,如下表所示。
注1:省略號為了表示還有其他沒有改動部分的源碼,不用添加進(jìn)源碼中。展現(xiàn)的源碼為了更好的表現(xiàn)出對應(yīng)工程中位置,包含一些生成工程時(shí)原有的源碼。
注2:MX_DriverVbusFS()中,需要根據(jù)實(shí)際情況進(jìn)行配置。實(shí)驗(yàn)板上采用的電源開關(guān)STMPS2151STR高電平有效。在一些系列STM32的生成工程中,MX_DriverVbusFS函數(shù)原型已經(jīng)生成,此時(shí)無需再添加這個(gè)函數(shù)的聲明,但要確認(rèn)函數(shù)中引腳設(shè)置對應(yīng)關(guān)系(形參為1時(shí)表示要激活)。
8.編譯生成的應(yīng)用固件。
利用IDE進(jìn)行編譯、鏈接、下載到目標(biāo)板,實(shí)現(xiàn)U盤信息獲取和讀寫操作。
檢驗(yàn)驗(yàn)證
連接U盤至STM32F469I-DISCO板的USB_User連接口。IAR進(jìn)入在線調(diào)試模式,利用在線調(diào)試,查看獲取到的U盤信息和寫讀緩存中的數(shù)據(jù)情況。
運(yùn)行完畢后,連接U盤至PC,利用PC上安裝的Active@ Disk Editor(外部鏈接)查看U盤對應(yīng)扇區(qū)數(shù)據(jù)(10扇區(qū)對應(yīng)起始位置為5120),從而驗(yàn)證U盤信息獲取和寫讀功能正常。如下圖所示。
總結(jié)
STM32CubeMX加速了STM32的開發(fā)過程。即使類似USB這種復(fù)雜的外設(shè)使用,也可以如上述實(shí)例,只需要幾個(gè)步驟即可以實(shí)現(xiàn)USB應(yīng)用。并且提供了除MSC類之外,HID、UAC、CDC等類支持。
-
msc
+關(guān)注
關(guān)注
0文章
29瀏覽量
20120 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355728
原文標(biāo)題:技術(shù)筆記 | 基于STM32CubeMX開發(fā)U盤訪問應(yīng)用
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論