通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或等于DMA中断优先级,则SDIO中断永远不能抢占DMA中断,DMA处于持续等待中,解决办法由两种,一种是直接提高SDIO中断优先级到比DMA中断优先级高,第二种是直接在HAL库中卡住的中断等待函数中注释掉while等待。

  另外还有一点就是在SDIO数据读写的时候需要注意的两点,一个是读写数据最好四字节对其,否则可能出BUG,二是读写BUFF的大小必须大于等于读写函数的SIZE参数,否则会出现内存莫名错误导致指针出乱,程序出乱。

05-08 08:13