本篇將介紹——如何在正點原子STM32探索者V3開發板上使用RT-Thread的SDIO驅動和FATFS文件系統組件實現SD卡上的文件讀寫。
開始本篇實驗前,需要搭建RT-Thread開發環境,可以參考我之前的帖子:【正點原子STM32探索者V3開發板體驗】體驗RT-Thread 5.0.0版本
在正點原子STM32探索者V3開發板上使用RT-Thread驅動SD卡實現文件讀寫只需要三步:
配置FATFS和SDIO功能
編譯項目代碼
燒錄程序到開發板
對,你沒看錯,不用寫代碼,只需要改改配置,編譯、燒錄、運行就可以了!
一、準備工作
1.1 準備好開發板和SD卡
開始本篇實驗之前,需要準備一個MicroSD卡,我這里準備的是一個32G的閃迪卡:
1.2 創建RT-Thread項目
和上一篇文章類似,首先打開RT-Thread Env工具, 并跳轉到rt-thread源碼的bsp/stm32/stm32f407-atk-explorer子目錄。
然后,使用如下scons命令,創建RT-Thtread項目:
scons --dist --target=mdk --project-name=rtt_sdio --project-path=D:\Hardware\ST\ExplorerV3_STM32F407\Elecfans_03\rtt_sdio
(左右移動查看全部內容)
如下圖所示:
注:如果已有RT-Thread項目,則可以跳過此步驟。
該命令執行完成后,就可以看到創建的目錄和文件了:
其中,rtt_sdio.uvprojx即為剛剛scons命令生成的Keil項目文件。
二、配置RT-Thread
PS:這個以RT-Thread Env工具為例,對RT-Thread進行配置,如果是使用RT-Thread Studio創建項目,進行配置也是類似的。
2.1 打開文件系統相關配置
RT-Thread Env命令行窗口跳轉到項目所在目錄后,執行meuconfig命令并回車,打開配置界面:
常用操作說明:
上下鍵,移動光標
回車鍵,進入配置項
ESC鍵,退出當前配置,返回上一級配置
空格鍵,選中或取消光標所在配置項
“/”鍵,搜索界面
在 Hardware Drivers Config -> Onboard Periopheral Drivers 配置中,選中 Enable File System:
PS:該配置項選(BSP_USING_FS)中后,會自動選中RT_USING_DFS和RT_USING_DFS_ROMFS配置項。
2.2 打開SD卡相關配置
選中 Hardware Drivers Config -> Onboard Periopheral Drivers -> Enable File System (BSP_USING_FS)配置項后,繼續回車:
選中Enable SDCARD配置項目,如上圖所示。
然后左右移動底部光標到Save菜單上,回車保存,提示保存為.config:
回車后,彈出提示說配置已寫入到.config了:
敲回車,界面將會返回配置界面。
此時,我們的對項目配置的修改已經保存到.config文件了,我們只需要連續按ESC鍵即可退出配置界面。
2.3 打開RTC配置
類似的,找到并打開如下配置項:
該配置項用于打開RTC功能,以實現計時功能(PS:文件系統需要計時功能)。
2.4 重新生成Keil項目文件
由于剛剛我們修改了配置項,開啟了文件系統和SD卡相關的配置項目,需要重新生成Keil項目文件,才能正常編譯成功。
在當前項目目錄中,使用如下命令,重新生成Keil項目文件:
scons --target=mdk --project-name=rtt_sdio
(左右移動查看全部內容)
如下圖所示:
三、編譯、燒錄、運行
3.1 編譯項目
由于我安裝的是Keil 5.37,需要先切換默認便器才可以正常編譯通過。
切換默認編譯器,具體操作為:
在彈出的Options for Target - rt-thread界面中,下拉ARM Compiler,選擇Use default compiler version 6,即使用默認的版本6編譯器;
點擊底部的OK,確認。
修改完默認編譯器后,點擊編譯圖標(或者按快捷鍵F7進行編譯),將會開始編譯:
編譯完成后,Build Output將會看到:
有一個Error,重新編譯一下,可以直接看得清楚,不用往回找是哪個文件編譯報錯:
報錯信息說:
board/ports/drv_filesystem.c文件中,聲明變量romfs_root為static,
rt-thread/components/dfs/filesystems/romfs\dfs_romfs.h文件中,聲明變量romfs_root為非static,
前后聲明不一致,導致報錯,解決方法很簡單, 將drv_filesystem.c中的static去掉即可 。
修改后,再次重新編譯,就可以編譯通過了:
3.2 下載程序
編譯成功后,我們需要將生成的二進制程序代碼文件燒錄到開發板上。
開始測試之前,我們需要先將MicroSD卡插入開發板(建議斷電操作,PC端先斷開):
插入SD卡后,檢查開發板和PC之間的USB線和JTAG調試器連接。
由于我使用的是JLink調試器,因此還需要修改項目的調試器設置(Keil項目默認的調試器設置是ULINK)。
修改Keil項目的調試設置,具體操作如下(這里以JLink為例):
這里,我修改了Port為SW,代表使用SWD接口(JTAG也可以),Max表示最大時鐘信號頻率,修改為50M下載速度更快。
看到成功識別了 ARM CoreSight JTAG-DP,說明JLINK調試器已經成功識別到主控芯片了。
最后點擊確定,回到Options for Target - Blinky界面,點擊OK,保存設置;
以上準備就緒后,在Keil中,點擊Download按鈕(或者F8快捷鍵),開始下載程序到開發板:
3.3 運行程序
燒錄完成后,連接串口,輸入help命令回車可以看到:
可以看到文件系統相關的操作命令:
mkfs,可以用于創建文件系統
mount,可以用于掛載文件系統
umount,可以用于卸載文件系統
還有文件相關的操作命令:
cp,拷貝文件
mv,移動或重命名文件
cat,顯示文件內容
echo,可用于創建或寫入文件
四、在msh中操作SD卡
燒錄完成后,我們就可以在RT-Thread的msh環境中愉快地操作SD卡了。
4.1 查看設備
輸入list device命令并回車,可以查看設備:
這里sd0為分區,后續會對他進行操作。
4.2 格式化SD卡
初次使用的SD卡,可能沒有文件系統,或者文件系統不是FAT格式的,需要將SD卡格式化為FAT文件系統,后續才能掛載成功。
注意:格式化操作會導致SD卡上已有數據全部丟失;因此,在執行格式化操作前,請確認SD卡上沒有重要數據,或者你已對SD卡上的重要數據進行了備份。
mkfs命令用法:
接下來,我們可以通過mkfs命令對SD卡進行格式化:
mkfs執行會持續一段時間,請耐心等待(具體因不同SD卡容量和速度等級而異,我的32GB卡消耗了幾秒鐘)。
4.3 掛載文件系統
接下來,我們可以在串口終端內使用mount命令將SD卡掛載到根目錄:
mount -h可以查看mount命令的用法:
另外需要注意的是,fstype參數使用的是elm(這里的elm實際就是FATFS)。
4.4 簡單的文件讀寫測試
前面提到echo命令比較特殊,可以寫文件,接下來使用echo寫文件,cat讀文件,ls查看文件:
這里使用了ls、echo、cat命令,進行了文件讀寫操作。
4.5 簡單的目錄操作測試
接下來,進行簡單的目錄操作演示。
這里首先使用了pwd查看當前工作目錄,然后演示了ls、mkdir、cd命令;
如果你是對RT-Thread了解不多的朋友,看到這里可能會非常驚奇——在一個可以運行在單片機的RTOS上,居然可以這么方便的進行文件系統、目錄、文件操作。
五、本篇小結
可以看到,在基于RT-Thread系統的項目中,我們沒有添加任何代碼,就可以實現SD卡進行文件系統和件相關操作。這是因為RT-Thread系統正點原子STM32探索者V3開發板的BSP中已經支持了SDIO功能,另外RT-Thread系統本身包含了SDIO驅動框架、FATFS支持,以及相關的命令。因此,我們可以在shell中非常方便的進行文件系統相關操作,以及文件相關操作。
參考鏈接
RT-Thread Env工具下載:https://www.rt-thread.org/download.html#download-rt-thread-studio
RT-Thread Env 用戶手冊:https://www.rt-thread.org/document/site/#/development-tools/env/env
RT-Thread 5.0.0 發布聲明:https://mp.weixin.qq.com/s/x9Sb3hc_GxV5VYfagGKhcA
RT-Thread RTC設備文檔:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc
RT-Thread 虛擬文件系統:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem
更多熱點文章閱讀
原文標題:【試用報告】STM32與RT-Thread的完美結合:SD卡操作的順暢體驗!
文章出處:【微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
-
電子技術
+關注
關注
18文章
890瀏覽量
55979 -
電子發燒友論壇
+關注
關注
4文章
197瀏覽量
1085
原文標題:【試用報告】STM32與RT-Thread的完美結合:SD卡操作的順暢體驗!
文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論