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