打印
[STM32F4]

STM32CubeMX生成全速USB U盘读写工程的问题

[复制链接]
2854|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Cjy_JDxy 于 2019-7-6 16:38 编辑

我买了一块硬石的F4开发板,里面有U盘读写的例程,运行正常,可以读写U盘。
后来我在网上看到一篇**,是写用STM32CubeMX生成高速U盘读写工程。
链接如下:http://blog.sina.com.cn/s/blog_a4e2465a0102wyfn.html
我想仿照他的步骤生成STM32F407  全速U盘读写工程,并且参考例程,完成代码,可是不成功。
下面写一下步骤,各位大神看看哪里有错误。
1.en.STM32CubeMX_v5-2-0
选择芯片:STM32F407

选择外部晶振



2,选择调试接口:










3.选择USB_OTG_FS:

4.选择USB_HOST:

5.选择FATFS:













1.jpg (107.21 KB )

1.jpg

使用特权

评论回复
沙发
Cjy_JDxy|  楼主 | 2019-7-6 16:49 | 只看该作者
5.设置时钟:

48MHz
6,设置各模块参数:






NVIC设置:


7,生成代码:

弹出一个这个:

点YES生成代码。
工程目录:



使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2019-7-6 17:08 | 只看该作者
完善代码:
变量:


char USBDISKPath[4];             /* 串行Flash逻辑设备路径 */
FRESULT f_res;                    /* 文件操作结果 */
FATFS fs;             /* FatFs文件系统对象 */
FIL file;             /* 文件对象 */
BYTE WriteBuffer[]= "Hello World!";/* 写缓冲区*/
UINT fnum;                   /*文件成功读写变量 */
BYTE ReadBuffer[1024]={0};       /* 读缓冲区 */
UINT Flag=0;

增加一个函数:
static void read_write_flie(void)
{
/*----------------------- 文件系统测试,写测试 -----------------------------*/
  /* 打开文件,如果文件不存在则创建它 */
  
  f_res = f_open(&file, "ccb.txt",FA_CREATE_ALWAYS | FA_WRITE );

  if ( f_res == FR_OK )
  {
   
    /* 将指定存储区内容写入到文件内 */
  f_res=f_write(&file,WriteBuffer,sizeof(WriteBuffer),&fnum);
    if(f_res==FR_OK)
    {
     
    }
    else
    {
      
    }   
  /* 不再读写,关闭文件 */
    f_close(&file);
  }
  else
  {
         
  }

/*------------------- 文件系统测试:读测试 ------------------------------------*/

  f_res = f_open(&file, "ccb.txt", FA_OPEN_EXISTING | FA_READ);   
  if(f_res == FR_OK)
  {
   
    f_res = f_read(&file, ReadBuffer, sizeof(ReadBuffer), &fnum);
    if(f_res==FR_OK)
    {
      
    }
    else
    {
     
    }  
  }
  else
  {
         
  }
  /* 不在读写,关闭文件 */
  f_close(&file);
}
大循环增加这一段代码:
if(Flag==0)
  {
   f_res = f_mount(&fs,"0:",1); /* 在串行FLASH挂载文件系统,文件系统挂载时会对串行FLASH初始化 */
  
   if(f_res != FR_OK)
   {
   
    //continue;
   }
   read_write_flie();  /* 读取根目录下的文件内容 */
   Flag=1;
  }
编译下载程序。
仿真,设断点,观察变量值:

出错了。请问高手,哪里有错?谢谢!


使用特权

评论回复
地板
Cjy_JDxy|  楼主 | 2019-7-6 17:39 | 只看该作者
f_res = f_mount(&fs,"0:",0);
我改成这样,这里没错了。
可是,这儿有错。


使用特权

评论回复
5
734774645| | 2019-7-6 21:15 | 只看该作者
跟开发板的配置不一样吧

使用特权

评论回复
6
Cjy_JDxy|  楼主 | 2019-7-7 14:17 | 只看该作者
734774645 发表于 2019-7-6 21:15
跟开发板的配置不一样吧

肯定不一样啊。不过不好找区别,好多代码看不懂

使用特权

评论回复
7
xuanhuanzi| | 2019-7-7 21:26 | 只看该作者
是的,32的代码很复杂。特别是库写的

使用特权

评论回复
8
晓伍| | 2019-8-6 10:29 | 只看该作者
只能一步一步的找

使用特权

评论回复
9
八层楼| | 2019-8-6 10:38 | 只看该作者
能达到多少速度啊

使用特权

评论回复
10
观海| | 2019-8-6 10:56 | 只看该作者
把速度降下来试试呢

使用特权

评论回复
11
无为之益| | 2019-9-10 16:38 | 只看该作者
本帖最后由 无为之益 于 2019-9-11 16:24 编辑

我是从官网上下载的库和例程,然后移植修改,运行初始化函数void USBH_Init(USB_OTG_CORE_HANDLE *pdev,
               USB_OTG_CORE_ID_TypeDef coreID,
               USBH_HOST *phost,               
               USBH_Class_cb_TypeDef *class_cb,
               USBH_Usr_cb_TypeDef *usr_cb),到其中的HCD_Init(pdev , coreID);就运行不下去了,不知道哪里出了问题...(昨天找到原因:忘了开例程的TIMER2中断,打开后就OK了)

还不会用STM32CubeMX生成工程代码...

使用特权

评论回复
12
Cjy_JDxy|  楼主 | 2019-9-10 17:04 | 只看该作者
无为之益 发表于 2019-9-10 16:38
我是从官网上下载的库和例程,然后移植修改,运行初始化函数void USBH_Init(USB_OTG_CORE_HANDLE *pdev,
   ...

网上有例子,名字我记不清了,有好多例子,叫什么微雪什么的。

使用特权

评论回复
13
无为之益| | 2019-9-11 16:22 | 只看该作者
我的程序暂时只能识别2G的U盘,8G和16G的不行。不知道是容量问题还是U盘品牌问题...

使用特权

评论回复
14
Cjy_JDxy|  楼主 | 2019-9-11 16:52 | 只看该作者
无为之益 发表于 2019-9-11 16:22
我的程序暂时只能识别2G的U盘,8G和16G的不行。不知道是容量问题还是U盘品牌问题... ...

你很厉害呀

使用特权

评论回复
15
无为之益| | 2019-9-11 16:56 | 只看该作者

我是小白菜啊,第一次做USB,这不还在网上找答案吗?...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3530

帖子

19

粉丝