目录

一、新建FATFS USBH工程的流程

二、私有App中调用USBH驱动函数的流程

1、FATFS管理USBH文件系统的文件流程

2、USBH初始化流程

3、使用FATFS\Target\专用函数管理USBH文件系统的方法

4、使用FATFS通用函数管理USBH文件系统的方法

5、FATFS初始化


        与参考文章不同的是,通过STM32Cubeide配置USB-OTG FS HOST项目并启用FATFS管理U盘的文件系统时,文件结构的中间件里新增了2个有关USBH的驱动函数提供者,一个是ST,另一个Third Party。它们互为作用,缺一不可。

        本文的目的是,向读者介绍在用FatFS管理USB-OTG FS HOST项目中,在自己的App里,当需要管理U盘文件(如:读、写、查询信息、检查U盘状态,初始化,等)时,既可以调用第三方提供的通用驱动函数(f_前缀),也可以调用FATFS\Target里的的专用驱动函数(USBH_前缀,2个中间件共同作用的结果)。两种方法最终的归口是一样的。

        特别地,当对U盘进行读、写、查信息、状态的操作尤其应该选择USBH_前缀的专用驱动函数。因为访问专用驱动函数的路径最短、方法更简洁。 一些对U盘的特殊操作,只能通过专用驱动函数去完成;

        为了更好地描述作者观点,需要读者参考本文作者前期写的文章,参考文章:

        细说STM32单片机在应用SD卡的项目中调用不同路径的库函数的规则和使用方法_stm32,sd文件系统的操作函数大全-CSDN博客  https://wenchm.blog.csdn.net/article/details/149663645?spm=1011.2415.3001.5331

        细说STM32单片机配置为USB-OTG FS并用FatFS管理U盘文件系统的方法与实例-CSDN博客  https://wenchm.blog.csdn.net/article/details/150212784?spm=1011.2415.3001.5331

一、新建FATFS USBH工程的流程

  • 第一步,在Connectivity分组里设置USB-OTG FS(含HS)硬件接口,选择Host、Device、还是双角色,进而选择设置速率、SOF、VBUS、ID等细节,多数情况下,这些细节是默认的;
  • 进一步地,在Middleware分组里设置USB_HOST或USB_DEVICE,没有双角色的选择项,这一步的目的是生成驱动库。然后选择类,比如MSC,然后,选择和设置参数等选项,多数情况下这些参数的选择都是默认的;
  • 进一步地,在Middleware分组里设置FATFS,在模式里选择USB disk,这一步的目的是使用文件系统管理U盘操作。然后选择和设置宏参数、高级宏定义等

二、私有App中调用USBH驱动函数的流程

1、FATFS管理USBH文件系统的文件流程

2、USBH初始化流程

        USB初始化→USB_HOST→中间件/ST/.../Core/

        举例:

// 摘录于main.c,详见参考文章

MX_USB_HOST_Init();

3、使用FATFS\Target\专用函数管理USBH文件系统的方法

       FATFS\Target\里的驱动函数是专用驱动函数,USBH_前缀,特别当需要对U盘读、写、IO控制、状态查询、初始化时,特别适合使用专用驱动函数。私有App里调用USBH_前缀专用函数时,私有函数在main.h里声明,在usbh_diskio.c里定义,能否在其他的位置定义,需要读者去尝试,定义的位置不对,会引起百编译错误,按做这个方法声明和定义,没有编译错误。

        举例:

4、使用FATFS通用函数管理USBH文件系统的方法

        此后,函数调用路径与调用f_前缀的通用函数的时候相同。两种调用函数的方法在usbh_diskio.h/.c处归口。

         diskio.h/.c → usbh_diskio.h/.c通过结构体Diskio_drvTypeDef里的参数映射的。

5、FATFS初始化

//摘录于main.c,详见参考文章

MX_FATFS_Init();

        与参考文章描述的方法和路径相同。

        总结:是否使用通用函数还是使用专用函数,除了显而易见的几个专用函数之外(5个),能用就用。其它的通用函数或专用函数,数量繁多,功能也有雷同,并且大多数并需要调用文件流经至usbh_diskio.c/.h处,就完成了应用的目的。选择哪一类函数,读者可以根据自己的需要和掌握的熟练程度去选择。

        可以遵循如下的规则,能专用不通用,选择文件流最短的函数,选择编程方法最简洁的函数。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐