STM32F407通过SDIO操作读SD卡文件系统遇到SD_WaitReadOperation()等待超时

记录一下自己遇到的问题:

程序中用到了按键中断、定时器中断、SDIO中断、DMA中断,优先级为:DMA中断>SDIO中断>按键中断>定时器中断。在运行程序的过程中发现程序卡死在SD_WaitReadOperation()中的:

 while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
  {
     timeout--;
   }

调试过程中,发现程序一直在while循环中跳不出去,其他变量都是没问题的,只有timeout变量一直>0。

解决:后来先是检查了SD卡的驱动,发现没有问题;再在主函数的没有中断处运行f_read()函数发现读写都是正常的。这时开始怀疑是中断的问题,重新梳理了中断中断分组和中断优先级:  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 发现程序多次设置了中断分组,造成中断分组混乱,把驱动.c文件中的 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)注释掉,只在主函数中设置一次中断分组就可以了。

参考:我们设置中断优先级分组只设置一次,在代码开头处设置,设置完分组后不要随意更改,避免中断管理混乱 作者:向洋2333 https://www.bilibili.com/read/cv17093270 出处:bilibili

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值