加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、STM32CubeMX配置
    • 二、ENV配置
    • 三、運(yùn)行測(cè)試
    • 四、常見(jiàn)問(wèn)題解答
    • 五、結(jié)束語(yǔ)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

RT-thread應(yīng)用講解——U盤(pán)(usb host)

04/06 09:55
4724
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

U盤(pán)是一個(gè)很常用的存儲(chǔ)設(shè)備,它是通過(guò)usb實(shí)現(xiàn)數(shù)據(jù)傳輸的,那么在stm32上面,我們要怎么接入U(xiǎn)盤(pán),并實(shí)現(xiàn)文件讀寫(xiě)呢?這一講基于RT-thread操作系統(tǒng),我來(lái)介紹一下如何使用usb host實(shí)現(xiàn)U盤(pán)的讀寫(xiě)。

RT-thread也有關(guān)于U盤(pán)的使用,可以先看一下,我這邊主要講一下重點(diǎn)。

STM32上使用USB Host讀寫(xiě)U盤(pán):https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/driver/usb/an0046-rtthread-driver-usbh

特別說(shuō)明:本教程的配置如下:

配置 說(shuō)明
MCU STM32F429VET6
RT-thread源碼版本 v4.0.3
U盤(pán) 閃迪文件格式FAT

一、STM32CubeMX配置

使用STM32CubeMX配置底層接口(路徑一般在工程目錄下boardCubeMX_Config文件夾里面)

不懂的同學(xué)可以看下我之前的博客。

RT-Thread零基礎(chǔ)快速入門(mén)第1講——新建工程

打開(kāi)USB_OTG_FS,配置模式為Host_Only,使能中斷,其他按默認(rèn)即可。

在這里插入圖片描述

二、ENV配置

1、使能USB Host

如果你不知道env怎么使用,可以在下面這個(gè)鏈接查看。

env使用方法:https://www.rt-thread.org/document/site/programming-manual/env/env/#bsp-menuconfig

用env打開(kāi)工程,進(jìn)入menuconfig配置頁(yè)面,打開(kāi)USB Host,配置掛載目錄。

在這里插入圖片描述

提示:除了U盤(pán),如果沒(méi)有掛載其他存儲(chǔ)設(shè)備,這里直接掛載到根目錄即可,如果有其他設(shè)備已經(jīng)掛載到根目錄了,這里就要選擇其他目錄。

在這里插入圖片描述

2、使能文件系統(tǒng)

USB Host讀寫(xiě)U盤(pán)的功能需要依賴(lài)RT-Thread的虛擬文件系統(tǒng),所以這里要打開(kāi)文件系統(tǒng),不然會(huì)報(bào)錯(cuò)。

在這里插入圖片描述

3、重新生成工程

在env輸入下面的命令,重新生成新的工程。

提示:會(huì)使用env的話(huà)應(yīng)該都知道這個(gè)操作。

scons --target=mdk5

三、運(yùn)行測(cè)試

啟動(dòng)設(shè)備,插入U(xiǎn)盤(pán),正常識(shí)別到U盤(pán)的話(huà)會(huì)提示找到一個(gè)設(shè)備并顯示該設(shè)備的內(nèi)存大?。ㄈ缦聢D所示)。輸入ls命令,可以查看U盤(pán)里面的文件(文件的操作命令跟linux系統(tǒng)是一樣的)。

在這里插入圖片描述

正常到這里其實(shí)就已經(jīng)完成了U盤(pán)的掛載和讀寫(xiě)了。如果還不放心,可以按照官網(wǎng)給的測(cè)試用例再跑一遍。

測(cè)試用例如下:

#include <dfs_posix.h>
#define TEST_FN     "/test_usbh.c"
static char test_data[120], buffer[120];

void readwrite(const char* filename)
{
    int fd;
    int index, length;

    fd = open(TEST_FN, O_WRONLY | O_CREAT | O_TRUNC, 0);
    if (fd < 0)
    {
        rt_kprintf("open file for write failedn");
        return;
    }

    for (index = 0; index < sizeof(test_data); index ++)
    {
        test_data[index] = index + 27;
    }

    length = write(fd, test_data, sizeof(test_data));
    if (length != sizeof(test_data))
    {
        rt_kprintf("write data failedn");
        close(fd);
        return;
    }

    close(fd);

    fd = open(TEST_FN, O_RDONLY, 0);
    if (fd < 0)
    {
        rt_kprintf("check: open file for read failedn");
        return;
    }

    length = read(fd, buffer, sizeof(buffer));
    if (length != sizeof(buffer))
    {
        rt_kprintf("check: read file failedn");
        close(fd);
        return;
    }

    for (index = 0; index < sizeof(test_data); index ++)
    {
        if (test_data[index] != buffer[index])
        {
            rt_kprintf("check: check data failed at %dn", index);
            close(fd);
            return;
        }
    }

    rt_kprintf("usb host read/write udisk successfulrn");

    close(fd);
}

MSH_CMD_EXPORT(readwrite, usb host read write test);

上面這段測(cè)試代碼運(yùn)行結(jié)果如下:

在這里插入圖片描述

這段代碼的作用是新建一個(gè)test_usbh.c文件,并寫(xiě)入一些數(shù)據(jù),運(yùn)行完之后可以拔出u盤(pán),然后在電腦上查看test_usbh.c文件的內(nèi)容來(lái)驗(yàn)證讀寫(xiě)的數(shù)據(jù)是否正常。
test_usbh.c文件的內(nèi)容如下:

在這里插入圖片描述

四、常見(jiàn)問(wèn)題解答

1、ENV配置里面沒(méi)有USB Host怎么辦?

原因:RT-thread的源碼不是4.0.2以上版本的

解決辦法:使用新版的源碼,或者在舊版的基礎(chǔ)上移植USB Host的代碼,USB Host的代碼結(jié)構(gòu)很清晰,把驅(qū)動(dòng)代碼和框架代碼這兩部分移植過(guò)來(lái)即可。

2、USB Host的配置都對(duì)了,但是U盤(pán)識(shí)別不出來(lái)。

如果USB Host的配置和硬件電路都確認(rèn)沒(méi)問(wèn)題的話(huà),有可能是掛載的問(wèn)題,比如掛載的目錄已經(jīng)有其他設(shè)備掛載了,或者設(shè)備最大掛載數(shù)量不夠,RT-thread掛載設(shè)備是有限制掛載數(shù)量的,可以在ENV配置里面修改,如果你掛載的設(shè)備數(shù)量大于最大掛載數(shù),大于那部分設(shè)備就掛載不上了。

3、能識(shí)別到U盤(pán)的內(nèi)存,但是讀不到U盤(pán)里面的文件。

跟U盤(pán)的文件系統(tǒng)格式有關(guān)系,我試了幾個(gè)U盤(pán),F(xiàn)AT或FAT32格式都是可以的,NTFS格式有些可以,有些不行,這個(gè)就有點(diǎn)奇怪了,原因還不確定。

五、結(jié)束語(yǔ)

好了,關(guān)于U盤(pán)讀寫(xiě)的介紹就到這里,如果還有什么問(wèn)題,歡迎在評(píng)論區(qū)留言。如果這篇文章能夠幫到你,就給我點(diǎn)個(gè)贊吧,如果想了解更多RT-thread和單片機(jī)的內(nèi)容,可以關(guān)注一下博主,后續(xù)我還會(huì)繼續(xù)分享更多的經(jīng)驗(yàn)給大家。

教程相關(guān)源碼:https://pan.baidu.com/s/1N2D8dM31deKIqNqaIQfPiA
提取碼:7nsx

RT-thread相關(guān)教程匯總:https://blog.csdn.net/ShenZhen_zixian/article/details/120563891

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠(chǎng)商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
TJA1055T/1J 1 NXP Semiconductors TJA1055 - Enhanced fault-tolerant CAN transceiver SOIC 14-Pin
$1.72 查看
ECS-.327-12.5-34QS-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom, SMD, 2 PIN
$1.16 查看
ABS25-32.768KHZ-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 12.5PF SMD

ECAD模型

下載ECAD模型
$1.17 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜