代码运行到此处进入到FindSCR函数中在while和if中死循环了,跳不出判断条件,请问一下有大佬会解决吗?试了好多办法都不行
/*!< Get SCR Register */
errorstatus = FindSCR(RCA, scr);
while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND| SDIO_FLAG_STBITERR)))
{
if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
{
*(tempscr + index) = SDIO_ReadData();
index++;
if(index > 1 )
break;
}
}
版主你好,硬件加了上拉,程序是可以识别有没有插入TF卡的,但是到了初始化卡那里就循环判断了
进入这个判断,这时SDIO_FLAG的值是0x00200000,根据介绍是 SDIO_FLAG_RXDAVL: Data available in receive FIFO 这个值也是0x00200000,所以在判断不等于RESET值时,不符合就一直循环在这两个函数中。所以应该怎么解决?
FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_SDIO_FLAG(SDIO_FLAG));
if ((SDIO->STA & SDIO_FLAG) != (uint32_t)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND| SDIO_FLAG_STBITERR)))
{
if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
{
*(tempscr + index) = SDIO_ReadData();
index++;
if(index > 1 )
break;
}
注释了这段上面这段代码,SD卡初始化成功,到了SD_EraseTest()的擦除测试里面的
uint32_t SD_DMAEndOfTransferStatus(void)
{
return (uint32_t)DMA_GetFlagStatus(DMA2_FLAG_TC4); //Channel4 transfer complete flag.
}
在DMA_GetFlagStatus中bitstatus就一直重置SD_WaitReadOperation