stm32DMA干扰中断的严重问题!

liyang203   2010-6-4 11:56 楼主
各位大侠,不知有人碰到过没有,在打开ADC的DMA操作后会严重干扰到中断的问题。
用的芯片是STM32f103,我在调步进电机和ADC。步进电机用定时中断直接驱动,ADC用DMA直接操作,两个模块单独调都没问题,可是只要同时打开,步进电机就无**常转动。只要把DMA关掉就正常了。郁闷中。。。。。是不是STM32的DMA设计有问题,有没有什么好的解决方法。

回复评论 (9)

随便说说 仅供参考
用过别的片子 DMA时数据总线会被占用的 程序假死中
对于STM32 没用过 不懂 请看数据手册
点赞  2010-6-4 12:58
DMA的工作原理是挪用MCU占用总线的时间,临时接管系统总线。

在DMA模块占用总线的时候,如果CPU也需要访问系统总线,CPU就会临时避让,等DMA操作周期结束在继续运行。

你的问题恰好出在这里,估计你的定时中断操作已经基本榨干了CPU的所有时间,或者定时中断内的操作对CPU速度的要求太高。没办法,你必须降低定时中断内的操作对CPU速度的要求。
点赞  2010-6-4 13:24
                                 那该怎么办,看来AD采样只好不用DMA了。
点赞  2010-6-4 14:56
                                 可以考虑使用DMA驱动步进电机。
点赞  2010-6-4 15:02
                                 发现一个问题,当DMA打开时,TIM1的定时脉冲被放大了10倍,原来两个脉冲间隔为1.5ms,打开DMA操作后两个脉冲间隔变为15ms。在MDK中调试时暂时关闭DMA也没有任何效果。
点赞  2010-6-4 17:10
                                 而且此后无论关闭ADC还是DMA,定时器的脉冲间隔都无法变回原来1.5ms,只有修改TIM1-PSC的值才有效。我原来的TIM1-PSC值为0x3f,现在要设置为0xa才行,现在初步怀疑是在初始化DMA操作时影响了Tim1的时钟源,否则不至于我在MDK中关闭了DMA,中断还恢复不了原来的脉冲间隔。
点赞  2010-6-4 17:21
                                 不知大家遇见过上述情况没有。事实上我在同时DMA后Tim1中断后,只好把Tim1的预分频值缩小10后发现中断脉冲又恢复到原来的宽度,说明我的定时中断操作并没有把CPU或总线占死,否则的话应该无论怎么调整定时器定时都不应该能够缩小。
点赞  2010-6-4 17:45
不知大家遇见过上述情况没有。事实上我在同时DMA后Tim1中断后,只好把Tim1的预分频值缩小10后发现中断脉冲又恢复到原来的宽度,说明我的定时中断操作并没有把CPU或总线占死,否则的话应该无论怎么调整定时器定时都不 ...
这样的话,还是要检查一下程序中哪里有问题。
点赞  2010-6-4 18:01
                                 AD采样可以考虑不用DMA模式
点赞  2010-6-5 09:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复