你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4 不能读写U盘

[复制链接]
meixu 提问时间:2017-3-15 22:15 /
悬赏5ST金币已解决
最近在学习stm32f4的usb通信,用的是STM32F4DISCOVERY和Audio_playback_and_record工程。U盘连接如下:

IMG_20170315_220745.jpg

工程就按照原样的来,在 USBH_USR_MSC_Application 函数里加入一个测试函数     f_open (&file,"0:/message.txt", FA_CREATE_ALWAYS|FA_WRITE);

问题2.png
调试时并不能在U盘里创建message文件,函数走近f_openl里边就停在  INITBUF(dj, sfn, lfn) ,不能往下走了,请教一下是哪里出了问题

问题1.png

最佳答案

查看完整内容

我用407测试过,可以读写到文件。楼主,可以仿真f_open,看看返回的结果是什么。
收藏 1 评论4 发布时间:2017-3-15 22:15

举报

4个回答
回答时间:2017-3-15 22:15:35
我用407测试过,可以读写到文件。楼主,可以仿真f_open,看看返回的结果是什么。
回答时间:2017-3-16 08:44:47
楼主,是否挂载了U盘?最好把整体的代码提出来,U盘使用的时候,要先挂载,不然文件系统识别不了。
meixu 回答时间:2017-3-16 15:23:38
安 发表于 2017-3-16 08:44
楼主,是否挂载了U盘?最好把整体的代码提出来,U盘使用的时候,要先挂载,不然文件系统识别不了。 ...


我是找的stm32f4discovery_FW_V1.1.0中的 Audio_playback_and_record 工程,都没有改,不是枚举完了就进入USBH_USR_MSC_Application用户程序了吗,在这里我自己添了几行测试代码,通过打印串口因袭,f_mount函数应该是执行成功了,没有打印mount fialed。然后程序就停在f_open里边了。主要是现成的与discovery板对应的U盘工程找不到,刚好发现以前的库有这个功能,所以就拿来学习了。

  1. int USBH_USR_MSC_Application(void)
  2. {
  3.   uint8_t res=0;
  4.   switch (USBH_USR_ApplicationState)
  5.   {
  6.     case USH_USR_FS_INIT:

  7.       /* Initialises the File System*/
  8.       if (f_mount( 0, &fatfs ) != FR_OK )
  9.       {
  10.         /* efs initialisation fails*/
  11.                                 printf("mount fialed\n");
  12.         return(-1);
  13.       }
  14.                         printf("app start\n");
  15.       
  16.       /* Flash Disk is write protected */
  17.       if (USBH_MSC_Param.MSWriteProtect == DISK_WRITE_PROTECTED)
  18.       {
  19.         while(1)
  20.         {
  21.           /* Red LED On */
  22.           STM_EVAL_LEDOn(LED5);
  23.         }
  24.       }
  25.       /* Go to menu */
  26.                         f_open(&file, MYNAME, FA_CREATE_ALWAYS | FA_WRITE);       
  27.                         printf("fopen done\n");
  28.       USBH_USR_ApplicationState = USH_USR_AUDIO;
  29.       break;

  30.     case USH_USR_AUDIO:

  31.       /* Go to Audio menu */
  32. //     COMMAND_AudioExecuteApplication();

  33.       /* Set user initialization flag */
  34.       USBH_USR_ApplicationState = USH_USR_FS_INIT;
  35.       break;

  36.     default:
  37.       break;
  38.   }
  39.   return(0);
  40. }
复制代码
回答时间:2018-1-31 14:13:46
枚举过程完成后,是否能读取到U盘的容量,信息等?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版