eric2013 发表于 2016-6-22 10:37:23

STM32移植USB库2.2.0版本----USB Device之模拟U盘移植步骤及其注意事项

配套的例子含F407和F429,下周FreeRTOS教程发布后会贴到这个帖子里面
例子下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
===============================================

===============================================
文件名:USB Mass Storage 模块移植和使用说明

----Eric2013整理于2016-02-26

【移植说明】
安富莱移植的USB Mass Storage 应用说明:
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_Device_Library 和 STM32_USB_OTG_Driver
    STM32_USB_Device_Library\Core\Core
    STM32_USB_Device_Library\Class\msc
    STM32_USB_OTG_Driver\src   

   具体添加的文件参考此工程,就不一一详述了,注意部分文件在软件包的工程文件夹下。

2. 添加usbd_desc.c,usbd_storage_msd.c,usbd_usr.c,usb_bsp.c和相应的.h文件到User文件夹下的usbd_mass_storage文件夹下。
   -----
   其中usb_bsp.c此文件做较大修改,具体看此文件实现即可。这几个文件是在官方工程的具体实现文件夹下。

3. 整理USB的中断到一个专门新建的usb_it.c文件里,具体参考源文件即可。

4. 整理并修改usbd_usr.c文件。
   (1)全局变量 USB_OTG_dev 定义在 usbd_usr.c 文件
       #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
      #if defined ( __ICCARM__ ) /*!< IAR Compiler */
         #pragma data_alignment=4
      #endif
       #endif

    __ALIGN_BEGINUSB_OTG_CORE_HANDLEUSB_OTG_dev   __ALIGN_END;
    __ALIGN_BEGINUSB_OTG_CORE_HANDLEUSB_OTG_Core__ALIGN_END;

   (2)全局变量USB_OTG_CORE_HANDLEUSB_OTG_Core;也定义在此文件
   (3)添加两个新函数,方便调用。
      /* 使能U盘设备 ****************************/
      void usbd_OpenMassStorage(void)
      {
            USBD_Init(&USB_OTG_dev,
                  USB_OTG_FS_CORE_ID,
                  &USR_desc,
                  &USBD_MSC_cb,
                  &USRD_cb);
      }

      /* 移除U盘设备 ***************************/
      void usbd_CloseMassStorage(void)
      {
            DCD_DevDisconnect(&USB_OTG_dev);

            USB_OTG_BSP_DisableInterrupt();   
      }
   (4)添加如下调试(测试发现这个文件里面的打印功能不太好用,一旦开启,造成无法识别设备):
      //#define usb_printf    printf
      #define usb_printf(...)

      这个文件的源文件是LCD调试的,故将其修改为了串口打印的形式。
    (5) 修改USBD_Usr_cb_TypeDef USR_cb为USBD_Usr_cb_TypeDef USRD_cb。
         此文件的.h文件也要做相应的extern修改。
    (6) 注释掉文件   //#include "lcd_log.h"


5. 整理并修改usbd_storage_msd.c文件。
   (1) 简单整理并添加如下调试:
       //#define printf_ok            printf
      #define printf_ok(...)

      //#define printf_err            printf
      #define printf_err(...)
   (2) 简单修改函数的实现,其中变量SD_CardInfo SDCardInfo;在bsp_sido_sd.c文件,在其.h文件里面进行外部声明

6. 新建一个usb_bsp_msc.h文件,专门供用户调用。

7. usb_conf.h文件
   1. 注释相应文件

8. usb_dcd_int.c文件中函数简单修改
   static uint32_t DCD_WriteEmptyTxFifo(USB_OTG_CORE_HANDLE *pdev, uint32_t epnum)
   {
   uint32_t fifoemptymsk;/* 此处有bug,将其挪到前面 */
   }

9. 工程中添加预编译宏定义:USE_USB_OTG_FS, USE_EMBEDDED_PHY, 其中 VBUS_SENSING_ENABLED 是可选的



【使用方法】
1. 主程序调用 USBD_Init() 函数完成USB的硬件配置。 需要 #include "usb_bsp.h"
    USBD_Init(&USB_OTG_dev,
      #ifdef USE_USB_OTG_HS
            USB_OTG_HS_CORE_ID,
      #else
            USB_OTG_FS_CORE_ID,
      #endif
            &USR_desc,
            &USBD_MSC_cb,
            &USR_cb);

2. 动态移除USB连接调用:
    DCD_DevDisconnect(&USB_OTG_dev);

3. 动态恢复USB连接,请重新调用:USBD_Init 函数
      //DCD_DevConnect(&USB_OTG_dev);这个不好使
      USBD_Init(&USB_OTG_dev,
            #ifdef USE_USB_OTG_HS
                USB_OTG_HS_CORE_ID,
            #else
                USB_OTG_FS_CORE_ID,
            #endif
                &USR_desc,
                &USBD_MSC_cb,
                &USR_cb);

==========================================================================

zhang 发表于 2016-7-4 15:45:58

star_66666 发表于 2016-7-4 20:09:56

zerone 发表于 2016-9-13 17:24:48

有SPI FLASH + 文件系统 +USB Mass Storage 的例程吗

eric2013 发表于 2016-9-13 18:17:37

回 zerone 的帖子

zerone:有SPI FLASH + 文件系统 +USB Mass Storage 的例程吗 (2016-09-13 17:24) images/back.gif


F407的例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=14894
F429的例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=20006

zerone 发表于 2016-9-14 09:55:31

看了 407的例子,怎么没找到USB初始化程序啊

eric2013 发表于 2016-9-15 10:06:22

回 zerone 的帖子

zerone:
看了 407的例子,怎么没找到USB初始化程序啊 images/back.gif

以429那个例子为例:
页: [1]
查看完整版本: STM32移植USB库2.2.0版本----USB Device之模拟U盘移植步骤及其注意事项