SD卡读写 卡死while循环问题

这是我使用的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();
}

再次运行即可进入中断。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值