硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9352|回复: 6
收起左侧

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2016-6-22 10:37:23 | 显示全部楼层 |阅读模式
配套的例子含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_BEGIN  USB_OTG_CORE_HANDLE  USB_OTG_dev   __ALIGN_END;
    __ALIGN_BEGIN  USB_OTG_CORE_HANDLE  USB_OTG_Core  __ALIGN_END;

   (2)全局变量USB_OTG_CORE_HANDLE  USB_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);

==========================================================================
回复

使用道具 举报

3

主题

9

回帖

3

积分

新手上路

积分
3
发表于 2016-7-4 15:45:58 | 显示全部楼层
[s:151]
回复

使用道具 举报

6

主题

390

回帖

408

积分

高级会员

积分
408
发表于 2016-7-4 20:09:56 | 显示全部楼层
[s:140] [s:140]
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2016-9-13 17:24:48 | 显示全部楼层
有SPI FLASH + 文件系统 +USB Mass Storage 的例程吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
 楼主| 发表于 2016-9-13 18:17:37 | 显示全部楼层

回 zerone 的帖子

zerone:有SPI FLASH + 文件系统 +USB Mass Storage 的例程吗&#160;(2016-09-13 17:24)&#160;

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

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2016-9-14 09:55:31 | 显示全部楼层
看了 407的例子,怎么没找到USB初始化程序啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
 楼主| 发表于 2016-9-15 10:06:22 | 显示全部楼层

回 zerone 的帖子

zerone:
看了 407的例子,怎么没找到USB初始化程序啊
以429那个例子为例:
1.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 21:48 , Processed in 0.177267 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表