基于原来测试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.关于这个问题也没有找到相关的资料解答。
|