这是我使用的STM32标准库版本
* @version V1.0.5
* @date 27-January-2022
是最新的
在使用SD卡读写的时候 发现会卡死在WaitWriteOperation函数
while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
该循环判断DMA是否完成数据的传输 debug发现这俩标志位的赋值是在中断中完成的
分别为SD_ProcessIRQSrc和SD_ProcessDMAIRQ
debug发现进不去中断 查了下DMA和中断优先级的配置都是默认的 没有问题
查询资料后发现标准库存在bug eval_sdio_sd文件中中断命名有问题
将这俩中断进行封装 重新命名
SD卡读写正常了
解决方法:在stm324x9i_eval_sdio_sd.c文件末尾加上如下代码
/**
* @brief This function handles SDIO global interrupt request.
* @param None
* @retval None
*/
void SDIO_IRQHandler(void)
{
/* Process All SDIO Interrupt Sources */
SD_ProcessIRQSrc();
}
/**
* @brief This function handles DMA2 Stream3 or DMA2 Stream6 global interrupts
* requests.
* @param None
* @retval None
*/
void SD_SDIO_DMA_IRQHANDLER(void)
{
/* Process DMA2 Stream3 or DMA2 Stream6 Interrupt Sources */
SD_ProcessDMAIRQ();
}
再次运行即可进入中断。