我是使用的
STM32F103VDT6
芯片,TF卡使用的是sandisk class4 4G的。使用的是SDIO+DMA官方例程,单独测试没有发现问题,但是当我开启其他中断时(不管什么中断),比如我开启
tiM3定时中断,中断频率为200Hz,中断中执行一个for循环来模拟中断处理,只要for循环的执行时间较长,就会出现TF卡的操作卡死问题,就是TF卡操作一直在等待DMA标志,并且for循环越长出现这种卡死的概率越大,当达到一定程度后TF卡完全不能操作。我大概估算了一下,差不多在中断执行时间达到总时间的20%左右就会明显有卡死现象,达到50%左右就基本上不能正常操作TF卡了。
由于我需要降低功耗,所以将主频降的比较低,4MHz,所以中断处理相对来说就显得执行时间较长,这样我才意识到这个问题,后来直接用官方例程实测,开通一个TIM3中断,执行for循环延时,当达到一定程度后,可以重现这个问题,所以我觉得应该是固件库或者是硬件的原因,不知道你们有没有发现这个问题,可以的话你们也可以这样测试一下,看能否重现这个问题,要是能解决的话,希望帮忙解决一下,要是这个问题得不到解决的话,我们只能放弃使用这个芯片了。
首先中断中没有涉及任何事情,只是延时问题。DMA是使用例程的,没有中断,是使用的查询方式,只有SDIO中断,并且SDIO中断的优先级最高,可以嵌套TIM3中断,整个系统就只有这两个中断。我没有使用操作系统,完全使用的是SDIO+DMA官方例程测试的。当然,把中断中的执行代码拿到中断外,这个问题就不会出现了,但是我的主频很低,中断中稍微多一点事务处理就很可能触发这个问题,我现在已经尽量将可以移出的处理移出来了,但是这个并没有找到问题的根源,说不准他就一定不会在什么时候出问题,而且以后系统需要扩展功能的话,这也是一个暗藏的问题。
我的意思是,即使在中断处理时间较长的情况下(条件比较苛刻的情况),也能保证程序不被卡死,因为只有这样才能保证系统的可靠性。
一周热门 更多>