0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【試用報(bào)告】STM32與RT-Thread的完美結(jié)合:SD卡操作的順暢體驗(yàn)!

電子發(fā)燒友論壇 ? 來(lái)源:未知 ? 2023-07-11 09:20 ? 次閱讀

本篇將介紹——如何在正點(diǎn)原子STM32探索者V3開(kāi)發(fā)板上使用RT-ThreadSDIO驅(qū)動(dòng)和FATFS文件系統(tǒng)組件實(shí)現(xiàn)SD卡上的文件讀寫(xiě)。


開(kāi)始本篇實(shí)驗(yàn)前,需要搭建RT-Thread開(kāi)發(fā)環(huán)境,可以參考我之前的帖子:【正點(diǎn)原子STM32探索者V3開(kāi)發(fā)板體驗(yàn)】體驗(yàn)RT-Thread 5.0.0版本


在正點(diǎn)原子STM32探索者V3開(kāi)發(fā)板上使用RT-Thread驅(qū)動(dòng)SD卡實(shí)現(xiàn)文件讀寫(xiě)只需要三步:


  • 配置FATFS和SDIO功能

  • 編譯項(xiàng)目代碼

  • 燒錄程序到開(kāi)發(fā)板


對(duì),你沒(méi)看錯(cuò),不用寫(xiě)代碼,只需要改改配置,編譯、燒錄、運(yùn)行就可以了!


一、準(zhǔn)備工作


1.1 準(zhǔn)備好開(kāi)發(fā)板和SD卡

開(kāi)始本篇實(shí)驗(yàn)之前,需要準(zhǔn)備一個(gè)MicroSD卡,我這里準(zhǔn)備的是一個(gè)32G的閃迪卡:



1.2 創(chuàng)建RT-Thread項(xiàng)目

和上一篇文章類(lèi)似,首先打開(kāi)RT-Thread Env工具, 并跳轉(zhuǎn)到rt-thread源碼的bsp/stm32/stm32f407-atk-explorer子目錄。


然后,使用如下scons命令,創(chuàng)建RT-Thtread項(xiàng)目:

scons --dist --target=mdk --project-name=rtt_sdio --project-path=D:\Hardware\ST\ExplorerV3_STM32F407\Elecfans_03\rtt_sdio

(左右移動(dòng)查看全部?jī)?nèi)容)


如下圖所示:



注:如果已有RT-Thread項(xiàng)目,則可以跳過(guò)此步驟。


該命令執(zhí)行完成后,就可以看到創(chuàng)建的目錄和文件了:



其中,rtt_sdio.uvprojx即為剛剛scons命令生成的Keil項(xiàng)目文件。


二、配置RT-Thread


PS:這個(gè)以RT-Thread Env工具為例,對(duì)RT-Thread進(jìn)行配置,如果是使用RT-Thread Studio創(chuàng)建項(xiàng)目,進(jìn)行配置也是類(lèi)似的。


2.1 打開(kāi)文件系統(tǒng)相關(guān)配置

RT-Thread Env命令行窗口跳轉(zhuǎn)到項(xiàng)目所在目錄后,執(zhí)行meuconfig命令并回車(chē),打開(kāi)配置界面:



常用操作說(shuō)明:

  • 上下鍵,移動(dòng)光標(biāo)

  • 回車(chē)鍵,進(jìn)入配置項(xiàng)

  • ESC鍵,退出當(dāng)前配置,返回上一級(jí)配置

  • 空格鍵,選中或取消光標(biāo)所在配置項(xiàng)

  • “/”鍵,搜索界面


在 Hardware Drivers Config -> Onboard Periopheral Drivers 配置中,選中 Enable File System:



PS:該配置項(xiàng)選(BSP_USING_FS)中后,會(huì)自動(dòng)選中RT_USING_DFS和RT_USING_DFS_ROMFS配置項(xiàng)。


2.2 打開(kāi)SD卡相關(guān)配置

選中 Hardware Drivers Config -> Onboard Periopheral Drivers -> Enable File System (BSP_USING_FS)配置項(xiàng)后,繼續(xù)回車(chē):



選中Enable SDCARD配置項(xiàng)目,如上圖所示。


然后左右移動(dòng)底部光標(biāo)到Save菜單上,回車(chē)保存,提示保存為.config:



回車(chē)后,彈出提示說(shuō)配置已寫(xiě)入到.config了:



敲回車(chē),界面將會(huì)返回配置界面。


此時(shí),我們的對(duì)項(xiàng)目配置的修改已經(jīng)保存到.config文件了,我們只需要連續(xù)按ESC鍵即可退出配置界面。


2.3 打開(kāi)RTC配置

類(lèi)似的,找到并打開(kāi)如下配置項(xiàng):



該配置項(xiàng)用于打開(kāi)RTC功能,以實(shí)現(xiàn)計(jì)時(shí)功能(PS:文件系統(tǒng)需要計(jì)時(shí)功能)。


2.4 重新生成Keil項(xiàng)目文件

由于剛剛我們修改了配置項(xiàng),開(kāi)啟了文件系統(tǒng)和SD卡相關(guān)的配置項(xiàng)目,需要重新生成Keil項(xiàng)目文件,才能正常編譯成功。


在當(dāng)前項(xiàng)目目錄中,使用如下命令,重新生成Keil項(xiàng)目文件:

scons --target=mdk --project-name=rtt_sdio

(左右移動(dòng)查看全部?jī)?nèi)容)


如下圖所示:




三、編譯、燒錄、運(yùn)行


3.1 編譯項(xiàng)目

由于我安裝的是Keil 5.37,需要先切換默認(rèn)便器才可以正常編譯通過(guò)。


切換默認(rèn)編譯器,具體操作為:



在彈出的Options for Target - rt-thread界面中,下拉ARM Compiler,選擇Use default compiler version 6,即使用默認(rèn)的版本6編譯器;


點(diǎn)擊底部的OK,確認(rèn)。


修改完默認(rèn)編譯器后,點(diǎn)擊編譯圖標(biāo)(或者按快捷鍵F7進(jìn)行編譯),將會(huì)開(kāi)始編譯:



編譯完成后,Build Output將會(huì)看到:



有一個(gè)Error,重新編譯一下,可以直接看得清楚,不用往回找是哪個(gè)文件編譯報(bào)錯(cuò):



報(bào)錯(cuò)信息說(shuō):

  • board/ports/drv_filesystem.c文件中,聲明變量romfs_root為static,

  • rt-thread/components/dfs/filesystems/romfs\dfs_romfs.h文件中,聲明變量romfs_root為非static,


前后聲明不一致,導(dǎo)致報(bào)錯(cuò),解決方法很簡(jiǎn)單, 將drv_filesystem.c中的static去掉即可 。


修改后,再次重新編譯,就可以編譯通過(guò)了:



3.2 下載程序

編譯成功后,我們需要將生成的二進(jìn)制程序代碼文件燒錄到開(kāi)發(fā)板上。


開(kāi)始測(cè)試之前,我們需要先將MicroSD卡插入開(kāi)發(fā)板(建議斷電操作,PC端先斷開(kāi)):



插入SD卡后,檢查開(kāi)發(fā)板和PC之間的USB線和JTAG調(diào)試器連接。


由于我使用的是JLink調(diào)試器,因此還需要修改項(xiàng)目的調(diào)試器設(shè)置(Keil項(xiàng)目默認(rèn)的調(diào)試器設(shè)置是ULINK)。


修改Keil項(xiàng)目的調(diào)試設(shè)置,具體操作如下(這里以JLink為例):





這里,我修改了Port為SW,代表使用SWD接口(JTAG也可以),Max表示最大時(shí)鐘信號(hào)頻率,修改為50M下載速度更快。


看到成功識(shí)別了 ARM CoreSight JTAG-DP,說(shuō)明JLINK調(diào)試器已經(jīng)成功識(shí)別到主控芯片了。



最后點(diǎn)擊確定,回到Options for Target - Blinky界面,點(diǎn)擊OK,保存設(shè)置;


以上準(zhǔn)備就緒后,在Keil中,點(diǎn)擊Download按鈕(或者F8快捷鍵),開(kāi)始下載程序到開(kāi)發(fā)板:



3.3 運(yùn)行程序

燒錄完成后,連接串口,輸入help命令回車(chē)可以看到:



可以看到文件系統(tǒng)相關(guān)的操作命令:

  • mkfs,可以用于創(chuàng)建文件系統(tǒng)

  • mount,可以用于掛載文件系統(tǒng)

  • umount,可以用于卸載文件系統(tǒng)


還有文件相關(guān)的操作命令:

  • cp,拷貝文件

  • mv,移動(dòng)或重命名文件

  • cat,顯示文件內(nèi)容

  • echo,可用于創(chuàng)建或?qū)懭胛募?/p>


四、在msh中操作SD卡


燒錄完成后,我們就可以在RT-Thread的msh環(huán)境中愉快地操作SD卡了。


4.1 查看設(shè)備

輸入list device命令并回車(chē),可以查看設(shè)備:



這里sd0為分區(qū),后續(xù)會(huì)對(duì)他進(jìn)行操作。


4.2 格式化SD卡

初次使用的SD卡,可能沒(méi)有文件系統(tǒng),或者文件系統(tǒng)不是FAT格式的,需要將SD卡格式化為FAT文件系統(tǒng),后續(xù)才能掛載成功。


注意:格式化操作會(huì)導(dǎo)致SD卡上已有數(shù)據(jù)全部丟失;因此,在執(zhí)行格式化操作前,請(qǐng)確認(rèn)SD卡上沒(méi)有重要數(shù)據(jù),或者你已對(duì)SD卡上的重要數(shù)據(jù)進(jìn)行了備份。


mkfs命令用法:



接下來(lái),我們可以通過(guò)mkfs命令對(duì)SD卡進(jìn)行格式化:



mkfs執(zhí)行會(huì)持續(xù)一段時(shí)間,請(qǐng)耐心等待(具體因不同SD卡容量和速度等級(jí)而異,我的32GB卡消耗了幾秒鐘)。


4.3 掛載文件系統(tǒng)

接下來(lái),我們可以在串口終端內(nèi)使用mount命令將SD卡掛載到根目錄:



mount -h可以查看mount命令的用法:



另外需要注意的是,fstype參數(shù)使用的是elm(這里的elm實(shí)際就是FATFS)。


4.4 簡(jiǎn)單的文件讀寫(xiě)測(cè)試

前面提到echo命令比較特殊,可以寫(xiě)文件,接下來(lái)使用echo寫(xiě)文件,cat讀文件,ls查看文件:



這里使用了ls、echo、cat命令,進(jìn)行了文件讀寫(xiě)操作。


4.5 簡(jiǎn)單的目錄操作測(cè)試

接下來(lái),進(jìn)行簡(jiǎn)單的目錄操作演示。



這里首先使用了pwd查看當(dāng)前工作目錄,然后演示了ls、mkdir、cd命令;


如果你是對(duì)RT-Thread了解不多的朋友,看到這里可能會(huì)非常驚奇——在一個(gè)可以運(yùn)行在單片機(jī)RTOS上,居然可以這么方便的進(jìn)行文件系統(tǒng)、目錄、文件操作。


五、本篇小結(jié)


可以看到,在基于RT-Thread系統(tǒng)的項(xiàng)目中,我們沒(méi)有添加任何代碼,就可以實(shí)現(xiàn)SD卡進(jìn)行文件系統(tǒng)和件相關(guān)操作。這是因?yàn)镽T-Thread系統(tǒng)正點(diǎn)原子STM32探索者V3開(kāi)發(fā)板的BSP中已經(jīng)支持了SDIO功能,另外RT-Thread系統(tǒng)本身包含了SDIO驅(qū)動(dòng)框架、FATFS支持,以及相關(guān)的命令。因此,我們可以在shell中非常方便的進(jìn)行文件系統(tǒng)相關(guān)操作,以及文件相關(guān)操作。


參考鏈接

  • RT-Thread Env工具下載:https://www.rt-thread.org/download.html#download-rt-thread-studio

  • RT-Thread Env 用戶(hù)手冊(cè):https://www.rt-thread.org/document/site/#/development-tools/env/env

  • RT-Thread 5.0.0 發(fā)布聲明:https://mp.weixin.qq.com/s/x9Sb3hc_GxV5VYfagGKhcA

  • RT-Thread RTC設(shè)備文檔:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc

  • RT-Thread 虛擬文件系統(tǒng):https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem





聲明本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來(lái)源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。


更多熱點(diǎn)文章閱讀

  • 基于Cortex-M3內(nèi)核的32位微控制器,STM32項(xiàng)目實(shí)戰(zhàn)分享!

  • 基于32位RISC-V設(shè)計(jì)的互聯(lián)型微控制器,沁恒微CH32V307開(kāi)發(fā)樣例

  • RK3568!四核64位ARMv8.2A架構(gòu),匯聚編譯源碼及實(shí)戰(zhàn)樣例

  • 尺寸僅有21mm*51mm,板邊采用郵票孔設(shè)計(jì),合宙 Air105 核心板開(kāi)發(fā)總結(jié)

  • 嵌入式Linux開(kāi)發(fā)秘籍!工程師大佬親歷分享項(xiàng)目樣例


原文標(biāo)題:【試用報(bào)告】STM32與RT-Thread的完美結(jié)合:SD卡操作的順暢體驗(yàn)!

文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:【試用報(bào)告】STM32與RT-Thread的完美結(jié)合:SD卡操作的順暢體驗(yàn)!

文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread 新里程碑達(dá)成——GitHub Star 破萬(wàn)!

    RT-Thread實(shí)時(shí)操作系統(tǒng)開(kāi)源項(xiàng)目在GitHub上的star數(shù)量突破一萬(wàn)!截止發(fā)文,RT-Thread作為實(shí)時(shí)操作系統(tǒng)在業(yè)界Star數(shù)量排名第一!倉(cāng)庫(kù)地址:https://gith
    的頭像 發(fā)表于 07-04 08:35 ?265次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達(dá)成——GitHub Star 破萬(wàn)!

    新書(shū)發(fā)布——《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù):RT-Thread與ARM編程實(shí)踐》

    RT-Thread又一本新書(shū)《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù)——基于RT-Thread與ARM的編程實(shí)踐》發(fā)布,標(biāo)志著RT-Thread生態(tài)和實(shí)時(shí)操作
    的頭像 發(fā)表于 05-11 08:35 ?526次閱讀
    新書(shū)發(fā)布——《實(shí)時(shí)<b class='flag-5'>操作</b>系統(tǒng)應(yīng)用技術(shù):<b class='flag-5'>RT-Thread</b>與ARM編程實(shí)踐》

    請(qǐng)問(wèn)rt-thread可以同時(shí)開(kāi)啟usb虛擬串口和sd模擬U盤(pán)嗎?

    rt-thread可不可以同時(shí)開(kāi)啟usb虛擬串口和sd模擬U盤(pán),求問(wèn)
    發(fā)表于 03-05 08:06

    RT-Thread SDIO驅(qū)動(dòng)SDget scr返回失敗是什么原因呢?

    STM32F429芯片,rt-thread標(biāo)準(zhǔn)版,添加了SD驅(qū)動(dòng),調(diào)試時(shí)發(fā)現(xiàn)在mmcsd_get_scr時(shí)返回-1,打印錯(cuò)誤日志發(fā)現(xiàn)是cmd.err=-1,這是什么原因呢? 打印信
    發(fā)表于 02-23 06:05

    基于RT-Thread快速上手SD NAND 虛擬文件系統(tǒng)

    ,可以看到貼片SD卡尺寸更小,不要SD卡座,占用更小的PCB面積;也可以節(jié)省PCB板層數(shù),2層板即可使用。而且兼容可替代普通TF/SD,
    發(fā)表于 12-15 17:29

    RT-thread源碼移植到STM32F10x和STM32F4xx

    RT-thread源碼移植到STM32F10x和STM32F4xx: 一、源碼下載 點(diǎn)擊入門(mén)->下載 ? 在歷史版本里邊隨便選取一個(gè) ? 會(huì)進(jìn)入百度云盤(pán)的下載地址,里邊有全部版本的源碼。這里下載
    的頭像 發(fā)表于 11-15 09:38 ?2058次閱讀
    <b class='flag-5'>RT-thread</b>源碼移植到<b class='flag-5'>STM32</b>F10x和<b class='flag-5'>STM32</b>F4xx

    基于rt-thread的socket通信設(shè)計(jì)

    最近再研究 rt-thread 的通信 ,想設(shè)計(jì)出 eps8266(多個(gè)) rt-thread(作為中控) 服務(wù)器的通信框架,使用的開(kāi)發(fā)板是 潘多拉
    的頭像 發(fā)表于 10-13 15:02 ?1066次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket通信設(shè)計(jì)

    rt-thread studio新建stm32f407工程

    rt-thread studio新建stm32f407工程,使用的版本是:2.2.6,stm32f4的支持包版本為0.2.2。先不用0.2.3,因?yàn)槭褂?.2.3建立的模板編譯會(huì)報(bào)錯(cuò)。
    的頭像 發(fā)表于 10-12 17:42 ?1046次閱讀

    RT-Thread使用Soft RTC(軟件模擬RTC)

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,rt-thread 使用版本為4.0.3,stm32f4的資源包為0.2.2。
    的頭像 發(fā)表于 10-12 17:39 ?579次閱讀
    <b class='flag-5'>RT-Thread</b>使用Soft RTC(軟件模擬RTC)

    RT-Thread在Lan8720a和 lwip基礎(chǔ)上移植ntp流程

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2。以RT-Thread中Lan8720和lwip協(xié)議棧的
    的頭像 發(fā)表于 10-12 16:59 ?1479次閱讀
    <b class='flag-5'>RT-Thread</b>在Lan8720a和 lwip基礎(chǔ)上移植ntp流程

    RT-Thread移植使用webserver (lwip+httpd)

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2,rt-thread版本為4.0.3。
    的頭像 發(fā)表于 10-12 12:49 ?1072次閱讀
    <b class='flag-5'>RT-Thread</b>移植使用webserver (lwip+httpd)

    試用RT-Thread Studio(VSCode)

    想嘗試RT-Thread studio (VSCode),先下載安裝VSCode,再搜索RT-Thread
    的頭像 發(fā)表于 10-12 10:58 ?877次閱讀
    <b class='flag-5'>試用</b><b class='flag-5'>RT-Thread</b> Studio(VSCode)

    RT-Thread使用cjson軟件包發(fā)送64位長(zhǎng)整型數(shù)據(jù)

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2,rt-thread版本為4.1.1,cjson軟件包使
    的頭像 發(fā)表于 10-11 15:09 ?713次閱讀
    <b class='flag-5'>RT-Thread</b>使用cjson軟件包發(fā)送64位長(zhǎng)整型數(shù)據(jù)

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉(cāng)庫(kù)地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?1202次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

    新書(shū)上架|嵌入式系統(tǒng)原理及應(yīng)用——基于STM32RT-Thread

    教程書(shū)籍編撰過(guò)程中的第一選擇! 本次上新的書(shū)籍為胡永濤主編的《嵌入式系統(tǒng)原理及應(yīng)用——基于STM32RT-Thread》。 本書(shū)以意法半導(dǎo)體(ST)的STM32L431系列微控制器為硬件核心,采用
    的頭像 發(fā)表于 09-25 18:25 ?813次閱讀
    新書(shū)上架|嵌入式系統(tǒng)原理及應(yīng)用——基于<b class='flag-5'>STM32</b>和<b class='flag-5'>RT-Thread</b>