meixu 发表于 2017-3-15 22:15:34

STM32F4 不能读写U盘

最近在学习stm32f4的usb通信,用的是STM32F4DISCOVERY和Audio_playback_and_record工程。U盘连接如下:



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


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


发表于 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盘工程找不到,刚好发现以前的库有这个功能,所以就拿来学习了。

int USBH_USR_MSC_Application(void)
{
uint8_t res=0;
switch (USBH_USR_ApplicationState)
{
    case USH_USR_FS_INIT:

      /* Initialises the File System*/
      if (f_mount( 0, &fatfs ) != FR_OK )
      {
      /* efs initialisation fails*/
                                printf("mount fialed\n");
      return(-1);
      }
                        printf("app start\n");
      
      /* Flash Disk is write protected */
      if (USBH_MSC_Param.MSWriteProtect == DISK_WRITE_PROTECTED)
      {
      while(1)
      {
          /* Red LED On */
          STM_EVAL_LEDOn(LED5);
      }
      }
      /* Go to menu */
                        f_open(&file, MYNAME, FA_CREATE_ALWAYS | FA_WRITE);       
                        printf("fopen done\n");
      USBH_USR_ApplicationState = USH_USR_AUDIO;
      break;

    case USH_USR_AUDIO:

      /* Go to Audio menu */
//   COMMAND_AudioExecuteApplication();

      /* Set user initialization flag */
      USBH_USR_ApplicationState = USH_USR_FS_INIT;
      break;

    default:
      break;
}
return(0);
}

发表于 2018-1-31 14:13:46

枚举过程完成后,是否能读取到U盘的容量,信息等?
页: [1]
查看完整版本: STM32F4 不能读写U盘