【发布时间】:2014-09-11 15:47:49
【问题描述】:
我正在使用 STM32 eval2 板并尝试对其进行调试。它过去工作正常,我没有改变任何东西,但是在过去一周左右的时间里,当我处于调试器模式时,我总是陷入这个循环,但当我不在时,程序运行良好。
while(!__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))
{
if(__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXDAVL))
{
*(tempscr + index) = SDIO_ReadFIFO(hsd->Instance);
index++;
}
}
我什至尝试运行 ST 为开发板提供的示例项目代码,但没有对其进行任何更改,而且我在他们的代码中也陷入了相同的 while 循环。
有人知道我在这里做错了什么吗?这没有任何意义,因为没有任何改变。
while循环中的变量定义的错误分别是:
接收到 FIFO 溢出错误
数据块发送/接收(CRC校验失败)
数据超时
数据块发送/接收(CRC校验通过)
在宽总线模式下的所有数据信号上都没有检测到起始位
并且看起来在这个 while 循环中,如果有意义的话,它会卡在“接收 FIFO 中可用的数据”标志的 if 语句中。我不能跳过那个 if 语句。
我正在使用 keil v5 和 c++ 编程
好吧,我已经为此苦苦挣扎了一个星期,几乎在我发布后我就想通了。
我有 SD 卡,但出于某种原因将其取出修复了它。所以我会留下这个,以防其他人遇到这个愚蠢的问题。
【问题讨论】:
-
你将不得不向我们展示所有这些宏是什么......
-
您在尝试使用 SDIO 控制器之前是否对其进行了初始化?您使用的是硬件流量控制还是旁路模式(48 MHz)?那些都坏了,有勘误表。
-
告诉我们芯片是什么,而不是板子。 STM32 是一个范围的零件,而不是一个芯片。 SDIO线是否可以与JTAG线复用?
-
如果你阅读了整个“问题”,你会注意到问题已经解决了。 “取出 SD 卡修复它。”