本文是原文http://blog.csdn.net/flydream0/article/details/52777923的补充。
原文并没有考虑SD卡拔插问题,且SDIO没有使用DMA,本文作为补充,将示例如何改善这两方面的问题。
1 SD卡拔插检测
FATFS文件系统初始化得修改下:
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 */
/* USER CODE END Init */
}
即保持CubeMx自动生成的原样即可,并不需要增加任何其他内容。
关键实在main中的while循环中检测SD卡的拔插:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
curSdCardStatus =BSP_SD_IsDetected();
if(curSdCardStatus !=preSdCardStatus)
{
switch(curSdCardStatus)
{
case SD_PRESENT:
BSP_SD_Init();
MountFat32FileSystemImmeditely();
break;
case SD_NOT_PRESENT:
UnmountFilesystem();
//FATFS_UnLinkDriver("0:/");
break;
}
preSdCardStatus =curSdCardStatus;
}
// HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
// HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
// HAL_GPIO_TogglePin(LED3_GPIO_Por