|
这个库是去年11月份官方升级的,U盘识别率很高,热插拔也好用。配套的例子含F407和F429,下周
FreeRTOS教程发布后贴到这个帖子里面
例子下载:
V5-348-FreeRTOS实验_FreeRTOS+STemWin+FatFS+USB Host综合.rar
(12.16 MB, 下载次数: 3956)
==========================================================================
文件名:U盘挂载模块移植和使用说明
----Eric2013整理于2016-02-26
【移植说明】
安富莱移植的U盘挂载应用说明:
usb_mass_storage 文件夹的文件主要来自于ST的USB固件库2.2.0版本中的范例
官方下载地址:
http://www.st.com/web/catalog/to ... 961/SS1743/PF257882
安富莱电子对齐进行了整理。使其可以方便地添加到不同的工程中去。
---------------------当前的SD卡模拟U盘是用的MicrUSB接口---------------------
移植步骤如下:
1. 在工程中添加USB固件库:STM32_USB_Host_Library 和 STM32_USB_OTG_Driver
STM32_USB_Host_Library\Core\Core
STM32_USB_Host_Library\Class\msc
STM32_USB_OTG_Driver\src
具体添加的文件参考此工程,就不一一详述了,注意部分文件在软件包的工程文件夹下。
2. 添加usbd_usr.c,usb_bsp.c和相应的.h文件到User文件夹下的usbd_mass_storage文件夹下。
usb_conf.h和usbh_conf.h文件也添加到这个路径下。
-----
其中usb_bsp.c此文件做较大修改,具体看此文件实现即可。这几个文件是在官方工程的具体实现文件夹下。
3. 整理USB的中断到一个专门新建的usb_it.c文件里,具体参考源文件即可。
4. 整理并修改usbd_usr.c文件。
(1)USB相关全局变量定义在 usbd_usr.c 文件
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
#pragma data_alignment=4
#endif
#endif
/* USB HOST使用 */
__ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_Core __ALIGN_END;
__ALIGN_BEGIN USBH_HOST USB_Host __ALIGN_END;
/* USB Devie使用 */
__ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_dev __ALIGN_END ;
(2)添加两个新函数,方便调用。
/* 挂载U盘 ****************************/
void usbh_OpenMassStorage(void)
{
USBH_Init(&USB_OTG_Core,
#ifdef USE_USB_OTG_FS
USB_OTG_FS_CORE_ID,
#else
USB_OTG_HS_CORE_ID,
#endif
&USB_Host,
&USBH_MSC_cb,
&USRH_cb);
}
/* 卸载U盘 ****************************/
void usbh_CloseMassStorage(void)
{
/* Host de-initializations */
USBH_DeInit(&USB_OTG_Core, &USB_Host);
USB_OTG_BSP_DisableInterrupt(); /* 关闭USB相关的所有中断 */
}
(3)添加如下调试:
//#define usb_printf printf
#define usb_printf(...)
这个文件的源文件是LCD调试的,故将其修改为了串口打印的形式。
(5) 修改USBH_Usr_cb_TypeDef USR_cb为USBD_Usr_cb_TypeDef USRH_cb。
此文件的.h文件也要做相应的extern修改。
6. 新建一个usbh_bsp_msc.h文件,专门供用户调用。
7. usb_conf.h文件
1. 删除官方评估板宏定义
2. 选择使能Host模式,其中Device模式也使能,方便兼容usb_bsp.c中修改的函数
#define USE_HOST_MODE
#define USE_DEVICE_MODE
9. 工程中添加预编译宏定义:USE_USB_OTG_HS, USE_EMBEDDED_PHY, 其中 VBUS_SENSING_ENABLED 是可选的
【使用方法】
1. 用户直接调用usbh_OpenMassStorage即可,在主程序中循环调用
USBH_Process(&USB_OTG_Core, &USB_Host);
就可以支持热插拔,无需再调用usbh_OpenMassStorage,这个函数初始化时调用一次即可。
2. 动态移除USB连接调用:
usbh_CloseMassStorage;
========================================================================== |
|