使用CubeMX(版本6.7.0,STM32CubeL4 Firmware Package V1.17.0 / 11-February-2021 )生成工程,修改了下面几个地方:void MX_SDMMC1_SD_Init(void) { /* USER CODE BEGIN SDMMC1_Init 0 */ /* USER CODE END SDMMC1_Init 0 */ /* USER CODE BEGIN SDMMC1_Init 1 */ /* USER CODE END SDMMC1_Init 1 */ hsd1.Instance = SDMMC1; hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE; hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B; hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; hsd1.Init.ClockDiv = 0; /* USER CODE BEGIN SDMMC1_Init 2 */ hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B; //初始化时改为1线,否则卡死在BSP_SD_Init中 /* USER CODE END SDMMC1_Init 2 */ } 金士顿32G内存卡运行正常,更换为16G内存卡却总是卡在下面的死循环:while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND)) { if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) { *(tempscr + index) = SDMMC_ReadFIFO(hsd->Instance); index++; } if((HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT) { return HAL_SD_ERROR_TIMEOUT; } } 测试主函数: main(void) { /* USER CODE BEGIN 1 */ uint32_t ii; DWORD frr; FATFS *FSS; SD_POWER_ON; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_SDMMC1_SD_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(BSP_SD_IsDetected() != SD_NOT_PRESENT) { HAL_Delay(1000u); if(BSP_SD_Init() == MSD_OK) { retSD = FATFS_LinkDriver(&SD_Driver, SDPath); if(retSD==0u) { retSD = f_mount(&SDFatFS,(TCHAR const *)SDPath,1u); FSS = &SDFatFS; retSD = f_getfree((TCHAR const *)SDPath,&frr,&FSS); ii = frr*(SDFatFS.csize)/2048; retSD = f_mkdir("TEST0"); retSD = f_mkdir("TEST1"); retSD = f_mkdir("TEST2"); f_mount(NULL,(TCHAR const*)SDPath,1u); } OKcnt++; } else { ERRcnt++; } } } /* USER CODE END 3 */ }
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16