stm32f407使用正点原子的sd例程无法进行初始化,HAL_SD_Init(&g_sdcard_handler)这个函数初始化有问题。因为函数分装及调用,经过debug调试最后找到在下面未能完成初始化。
static uint32_t SDMMC_GetCmdResp1(SDIO_TypeDef *SDIOx, uint8_t SD_CMD, uint32_t Timeout)
{
uint32_t response_r1;
uint32_t sta_reg;
/* 8 is the number of required instructions cycles for the below loop statement.
The Timeout is expressed in ms */
uint32_t count = Timeout * (SystemCoreClock / 8U /1000U);
do
{
if (count-- == 0U)
{
return SDMMC_ERROR_TIMEOUT;
}
sta_reg = SDIOx->STA;
}while(((sta_reg & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) == 0U) ||
((sta_reg & SDIO_FLAG_CMDACT) != 0U ));
_ if(__SDIO_GET_FLAG(SDIOx, SDIO_FLAG_CTIMEOUT))
{
__SDIO_CLEAR_FLAG(SDIOx, SDIO_FLAG_CTIMEOUT);
return SDMMC_ERROR_CMD_RSP_TIMEOUT;
}
else if(__SDIO_GET_FLAG(SDIOx, SDIO_FLAG_CCRCFAIL))
{
__SDIO_CLEAR_FLAG(SDIOx, SDIO_FLAG_CCRCFAIL);
return SDMMC_ERROR_CMD_CRC_FAIL;
}

就是在这里直接就返回SDMMC_EEROR_CMD_RSP_TIMEOUT。
我自己尝试拔出sd卡,发现也是在这里返回这个宏。
按照我的理解应该是初始化没有问题,能读取sd卡的数据。
是我的程序移植有问题还是硬件问题还是其他什么呢?
卡了两天了(大哭!)
在csdn上的第一个问题,如有不对请多指教!