打印
[STM32F1]

STM32CubeMx生成SDIO+FATFS工程的记录和问题

[复制链接]
1158|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
基于原来测试SD卡的实验基础上,重新生成了一个带有FATFS的工程。CubeMx配置如图。
生成代码后,如果想要挂载SD卡的话,需要用户自己调用函数f_mount()。
我把它添加在函数MX_FATFS_Init(void)中。
void MX_FATFS_Init(void)
{
  /*## FatFS: Link the SD driver ###########################*/
  retSD = FATFS_LinkDriver(&SD_Driver, SD_Path);

  /* USER CODE BEGIN Init */
  /* additional user code for init */
        if(!retSD)
        {
                retSD = f_mount(&MYSD_FATFS,SD_Path,0);
        }
  /* USER CODE END Init */
}


在主函数的while循环中添加代码如下:
  while (1)
  {
  /* USER CODE END WHILE */
       
  /* USER CODE BEGIN 3 */
//                HAL_Delay(200);
//                fserrors = f_mkfs(SD_Path,0,0);
                HAL_Delay(200);
                fserrors = f_open(&fileb,"test1.txt",FA_WRITE | FA_CREATE_ALWAYS);
                printf("open error = %d\n",fserrors);
                HAL_Delay(200);
                fserrors = f_write(&fileb,"123456789",10,&bw);
                printf("write error = %d\n",fserrors);
                HAL_Delay(200);
                fserrors = f_close ( &fileb );
                HAL_Delay(200);
                fserrors = f_open(&fileb,"test1.txt",FA_READ);
                HAL_Delay(200);
                fserrors = f_read(&fileb,rbuffer,10,&bw);
                printf("read error = %d\n",fserrors);
                HAL_Delay(200);
                fserrors = f_close ( &fileb );
                HAL_Delay(200);
                while(1);

  }
  /* USER CODE END 3 */


测试能够正确的写入和读取文件内容。测试结果如下图所示。
最后,在测试中有一个疑问,开始提到的添加调用函数f_mount函数,如果最后一个加载的参数给1(立即加载)(retSD = f_mount(&MYSD_FATFS,SD_Path,1);)的话就返回错误0x0D。经过多次试验,加载参数必须设置为0.关于这个问题也没有找到相关的资料解答。

搜狗截图20161219211340.jpg (103.05 KB )

CubeMx pinout配置

CubeMx pinout配置

搜狗截图20161219212330.jpg (121.19 KB )

测试结果

测试结果
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

10

帖子

0

粉丝