我在 STM32F7 板上使用带有 SDMMC 接口的 SD 卡。我正在关注这个视频,项目进展顺利。https://www.youtube.com/watch?v=0NbBem8U80Y
FATFS SDFatFs;
FIL MyFile;
FRESULT res;
uint32_t byteswritten;
uint8_t wtext[] = "This is test of Fatfs with STM32F7-Disco DMA&RTOS\n";
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_SDMMC2_SD_Init();
MX_FATFS_Init();
/* Call init function for freertos objects (in freertos.c) */
MX_FREERTOS_Init();
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
void StartDefaultTask(void const * argument)
{
/* init code for FATFS */
if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
{
Error_Handler();
}
else
{
if(f_open(&MyFile, "sd_test.txt", FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)
{
Error_Handler();
}
else
{
res = f_write(&MyFile, wtext, sizeof(wtext)-1, (void *)&byteswritten);
char buf[]="Hello World";
res = f_write(&MyFile,buf, sizeof(buf)-1, (void *)&byteswritten);
char buf1[]="I am GEHAD";
res = f_write(&MyFile,buf1, sizeof(buf1)-1, (void *)&byteswritten);
if((byteswritten == 0) || (res != FR_OK))
{
Error_Handler();
}
else
{
f_close(&MyFile);
}
}
}
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
if(f_open(&MyFile, "sd_test2.txt", FA_OPEN_APPEND | FA_WRITE) != FR_OK)
{
Error_Handler();
}
else
{
res = f_write(&MyFile, wtext, sizeof(wtext)-1, (void *)&byteswritten);
char buf[]="Hello World";
res = f_write(&MyFile,buf, sizeof(buf)-1, (void *)&byteswritten);
char buf1[]="I am gehad";
res = f_write(&MyFile,buf1, sizeof(buf1)-1, (void *)&byteswritten);
if((byteswritten == 0) || (res != FR_OK))
{
Error_Handler();
}
else
{
f_close(&MyFile);
}
}
osDelay(1);
}
/* USER CODE END StartDefaultTask */
}
在程序运行并可能写入时,我无法安全地移除 SD 卡并重新插入它。我可以安全地取出卡,但是当我在同一次运行中重新连接它时它不起作用。