这个问题一不留心就出错,排查了好多天。
网上方法试了都不行,甚至无奈去看底层函数,都发现没有用,后来想到可能优先级问题。
紧急避坑!!!如果没有用freertos,那中断优先级设置没啥关系。但如果用了freertos,那SDIO的优先级必须要注意跟freertos区分开来,不能高过他!不然就是mout正常,read等其他操作都返回错误3 not ready。
其实当你开启freertos,然后点击NVIC时候,cube会提醒你,要注意函数的中断优先级和freertos优先级的关系。
(如果中断处理程序调用RTOS函数,请确保其抢占优先级低于最高的SysCall中断优先级。如FreeRTOS中的“LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY”)
当初没怎么注意,现在才发现这是多么重要!!
还有一个要注意的小地方
cube需要设置sd卡检测引脚