STM32F429的USB读取U盘的问题,挂载总是失败,返回FR_NOT_ENABLED,可能是哪里的问题呢?

2019-07-20 16:01发布

我用的是STM32F429ZET6,用的uCosII系统,文件系统是FATFS,uCosII和文件系统都已经移植成功,因为外接的Flash芯片可以正常使用FATFS操作.没有用HAL库,USB是移植的原子的F407的<<实验53 USB U盘(Host)实验>>,串口打印提示检测到了U盘,但是f_mount时始终返回FR_NOT_ENABLED,可能是哪里的问题呢?我使用原子的F429的例程<<实验56 USB U盘(Host)实验>>测试可以正常操作U盘,读写格式化都没问题,这就说明我硬件都是没问题的.我将F429例程的的USB相关的全部移植到我自己的代码,貌似就时钟和库不一样,我时钟用的180M,标准固件库,不是HAL库,结果还是不行,一样的错误.看原子教程文档写的USB时钟使用的48M,但是没看到有分频函数啊(原子F429的教程使用的是192M),是哪里将USB时钟设置成了48M呢?F407的也没看到有将USB时钟配置成48M.USB的时钟必须使用48M吗?我的U盘f_mount总是失败是不是就是这个问题呢?烦请大家帮我看看是什么问题.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
隨颩洏過
2019-07-21 14:46
正点原子 发表于 2017-3-22 01:38
在系统时钟设置函数,就决定了USB的频率,必须是48Mhz

谢谢你的提醒,时钟搞清楚了.
F407的FATFS版本的
typedef struct {
        FATFS*        fs;                                /* Pointer to the related file system object (**do not change order**) */
        WORD        id;                                /* Owner file system mount ID (**do not change order**) */
        BYTE        flag;                        /* Status flags */
        BYTE        err;                        /* Abort flag (error code) */
        DWORD        fptr;                        /* File read/write pointer (Zeroed on file open) */
        DWORD        fsize;                        /* File size */
        DWORD        sclust;                        /* File start cluster (0:no cluster chain, always 0 when fsize is 0) */
        DWORD        clust;                        /* Current cluster of fpter (not valid when fprt is 0) */
        DWORD        dsect;                        /* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
        DWORD        dir_sect;                /* Sector number containing the directory entry */
        BYTE*        dir_ptr;                /* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
        DWORD*        cltbl;                        /* Pointer to the cluster link map table (Nulled on file open) */
#endif
#if _FS_LOCK
        UINT        lockid;                        /* File lock ID origin from 1 (index of file semaphore table Files[]) */
#endif
#if !_FS_TINY
        BYTE        buf[_MAX_SS];        /* File private data read/write window */
#endif
} FIL;
F429的U盘例程里面的FATFS版本
typedef struct {
        _FDID        obj;                        /* Object identifier */
        BYTE        flag;                        /* File status flags */
        BYTE        err;                        /* Abort flag (error code) */
        FSIZE_t        fptr;                        /* File read/write pointer (Zeroed on file open) */
        DWORD        clust;                        /* Current cluster of fpter (not valid when fprt is 0) */
        DWORD        sect;                        /* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
        DWORD        dir_sect;                /* Sector number containing the directory entry */
        BYTE*        dir_ptr;                /* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
        DWORD*        cltbl;                        /* Pointer to the cluster link map table (Nulled on file open) */
#endif
#if !_FS_TINY
        BYTE        buf[_MAX_SS];        /* File private data read/write window */
#endif
} FIL;
没有了fsize,这个是新版本的没有这个了还是人为去掉了呢?
这个可以获取文件大小,用来实现在文件后面追加数据,很方便.

一周热门 更多>