一些應用中,涉及到對存儲設備的數據訪問,例如USD卡、U盤。具備USB OTG控制器的STM32,可以實現對U盤訪問的支持。本文介紹STM32對于U盤訪問的硬件/軟件實現。介紹如何利用STM32CubeMX,一步一步實現STM32訪問U盤。僅需簡單的幾個步驟, 實現U盤訪問的應用開發(fā)。
MSC類簡介
MSC (Mass Storage Class) 是USB規(guī)范提供的一種USB大容量存儲設備類,允許一個USB接口的設備與USB主機相連接,以便在兩者之間傳輸文件。USB MSC傳輸協議分為CBI (Control / Bulk / Interrupt) 和 BOT (Bulk-only Transfer)。BOT協議在不影響功能的情況下省去了對Interrupt端點的需求,被存儲設備廣泛支持。STM32提供的USB庫支持USB MSC BOT協議。
MSC設備包含很多種,例如U盤、讀卡器、移動硬盤等。STM32通過內含的USB OTG控制器(支持主機模式)和USB主機庫,實現對MSC類的支持,進而實現對U盤訪問的支持。本文中不涉及到USB MSC (Mass Storage Class) 的詳細介紹 ,更多MSC類介紹,請參考《USB進階培訓_Part1_USB類的介紹》。
01
硬件支持
不同的STM32系列,對USB的支持情況如下。對于STM32F105/107、STM32F2、STM32F4、STM32F7和STM32H7系列,部分型號支持USB OTG,能夠實現USB 主機和從機。U盤作為USB MSC設備,需要STM32作為USB MSC主機,實現兩者間的訪問。(注:系列中不是所有型號都支持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協議)
STM32CubeMX輔助開發(fā)工具(輔助開發(fā)自定義板上應用)
上述軟件都是免費對外開發(fā),可在意法半導體官網www.st.com下載。
U盤訪問實現例
一步一步呈現訪問U盤的STM32開發(fā)過程,實現對U盤的讀寫等操作。在下面的詳解步驟中,會介紹一些主機庫和應用機制的內容。如果希望快速開發(fā),可以直接按照步驟開發(fā),略過講解性的內容。

01
前期準備
出于遵循完全一致的實驗步驟考慮,實例基于ST發(fā)布的STM32F469I-DISCO板。除此之外,開發(fā)者也可以根據自己的目標板的具體情況,參考后面介紹的實例進行配置。
★
STM32板
USB線
2 * USB線
Type A ←→ Mini B
Type A ←→ Micro B
STM32CubeMX
Cube軟件包
STM32CubeF4(1)
說明:在安裝STM32CubeMX后,在其“菜單欄\Help\Install New Libraries”中安裝STM32CubeF4.
本文實現例中采用的是V1.21.0
IDE
IAR (EWARM)
除IAR外,CubeMX還支持MDK、TrueStudio和SW4STM32等。
文本實現例中采用IAR v8.30.1
注1:STM32F469I-DISCO板的原理圖、用戶手冊等資源可通過鏈接獲取。
注2:STM32CubeF4可以按照介紹方式獲取,或者直接在官網下載,然后通過STM32CubeMX從本地導入軟件包功能完成導入。
02
應用實現
一、開發(fā)流程
結合STM32CubeMX的軟件開發(fā)流程如下圖。

二、開發(fā)步驟詳解
接下來一步一步呈現實現過程。
1.打開STM32CubeMX,點擊File\New Project,選擇STM32F469NI(STM32F469I-DISCO板上微控制器型號)。
2.外設和中間件的選擇。首先結合STM32F469I-DISCO板的原理圖,了解功能實現必備的接口的使用情況,如下表所示。

注1. 在不考慮SRP和HNP時,訪問U盤,只需要STM32的USB OTG的USB數據正負線即可。
根據硬件情況,選擇調試接口、外部時鐘、USB OTG FS和USB中間件,如下圖所示。

在引腳分布圖,PB2引腳上單擊鼠標左鍵,選擇‘GPIO_Output’,如下圖所示。

3. 配置時鐘,使USB時鐘為48MHz,如下圖。其中,步驟2中外部高速晶振值要和硬件上匹配。由于USB時鐘精度要求高,STM32F469內部時鐘無法達到要求,必須選用外部高速時鐘,如步驟3所示。對于HCLK(處理器時鐘,步驟6配置),根據性能需要進行設置,或者簡單的設置為最大值。

4. USB和關聯的引腳配置。主要對VBUS使能引腳進行配置及關聯。
在USB_HOST界面,配置Drive_VBUS_FS關聯引腳為PB2(與硬件連接對應)。VBUS電源開關器件為STMPS2151STR,高電平使能。所以配置如下,在初始化后為低電平(圖中步驟7~10)。其他保持默認。

5.設置工程,如下圖所示(點擊菜單欄\Project\Settings打開)。選擇對應的IDE和希望基于的STM32Cube軟件包位置。實例簡單,堆棧占用小,堆棧配置保持默認即可。除EWARM外,STM32CubeMX還支持MDK-ARM、TrueStudio、SW4STM32等。

6. 點擊菜單欄\Project\Generate Code生成工程。
工程生成后,會出現提示框,點擊"Open Project"打開工程。工程架構和文件結構如下圖(右側為USB主機應用架構)。生成工程包含全部層的實現,開發(fā)者在生成工程的基礎上,可直接調用寫讀等API,實現對U盤的訪問。

注: USB主機庫和各文件功能介紹,請參考《UM1720 STM32Cube USB host library》。
7. 添加U盤訪問實現。
STM32CubeMX生成的工程,調用STM32Cube USB主機庫。在庫中,軟核將USB事件傳輸至用戶層,并執(zhí)行回調用戶函數。方便在用戶層的回調函數中添加應用實現。用戶回調事件如下表。

USB軟核狀態(tài)機如下圖所示。

在HOST_CLASS狀態(tài)中,軟核會通知應用類初始化完成。對U盤的訪問,應放置在應用層接收到類初始化完成事件后,即HOST_USER_CLASS_ACTIVE事件后,否則無法正常工作。
在工程中添加/修改對U盤的寫讀訪問操作和相關源碼,如下表所示。

注1:省略號為了表示還有其他沒有改動部分的源碼,不用添加進源碼中。展現的源碼為了更好的表現出對應工程中位置,包含一些生成工程時原有的源碼。
注2:MX_DriverVbusFS()中,需要根據實際情況進行配置。實驗板上采用的電源開關STMPS2151STR高電平有效。在一些系列STM32的生成工程中,MX_DriverVbusFS函數原型已經生成,此時無需再添加這個函數的聲明,但要確認函數中引腳設置對應關系(形參為1時表示要激活)。
8.編譯生成的應用固件。
利用IDE進行編譯、鏈接、下載到目標板,實現U盤信息獲取和讀寫操作。
檢驗驗證
連接U盤至STM32F469I-DISCO板的USB_User連接口。IAR進入在線調試模式,利用在線調試,查看獲取到的U盤信息和寫讀緩存中的數據情況。
運行完畢后,連接U盤至PC,利用PC上安裝的Active@ Disk Editor(外部鏈接)查看U盤對應扇區(qū)數據(10扇區(qū)對應起始位置為5120),從而驗證U盤信息獲取和寫讀功能正常。如下圖所示。

總結
STM32CubeMX加速了STM32的開發(fā)過程。即使類似USB這種復雜的外設使用,也可以如上述實例,只需要幾個步驟即可以實現USB應用。并且提供了除MSC類之外,HID、UAC、CDC等類支持。
-
msc
+關注
關注
0文章
29瀏覽量
20584 -
STM32
+關注
關注
2312文章
11187瀏覽量
374426
原文標題:技術筆記 | 基于STM32CubeMX開發(fā)U盤訪問應用
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
使用STM32CubeMx生成USB HOST及fatfs,實現STM32F105RC訪問U盤的功能,無法枚舉設備的原因?
STM32-comStick U盤版開發(fā)平臺(ST)
STM32&SD卡實現USB虛擬U盤
STM32CubeMX | STM32基于HAL實現USB模擬U盤
基于STM32CubeMX開發(fā)U盤訪問應用
STM32對于U盤訪問的硬件/軟件實現
評論