这么多年了,才发现STM32F4系列使用DMA1的大坑,只有DMA2才是完全体
注:这些不是bug,但却是每个上手STM32用户最容易入坑的地方,本次的坑,倒腾了整整一天才恍然大悟。STM32F4系列里面这种骚操作有不少:
1、有两个CAN,但是一个主,一个是从。
2、有两个USB,但是一个FS,一个HS不带高速PHY。
3、有两块大RAM区,但是CCM RAM不支持DMA。
而这次我们要说的骚操作是有两个通用DMA,但是一个强,一个弱。
引出问题,看下面STM32F407的总线框图。
特别注意红色线条:
这个红色线条的意思是DMA1仅支持APB1下的外设,而DMA2却都支持,含APB1,APB2,AHB1、AHB2。
针对这种骚操作,我们一般使用是发现不了问题的,但是用定时UP事件触发DMA实现各种数据传输时,问题就来了。
DMA1支持的UP事件如下:
这个UP事件仅能触发APB1下的外设做DMA,即如下这些
如果我们要用这些UP事件触发DMA做FMC DMA或者控制任意IO做脉冲数控制,都是不支持的。
而我这次的坑就在使用V5板子做FMC DMA控制AD7606上,V5板子是用的TIM5对应的PH12引脚做AD7606时钟,恰好踩到这个坑上,完全不能用。
我还是一直检查配置问题,搞了一天才发现DMA1就是这么设计的。
总结:
如果打算使用定时UP事件实现各种DMA骚操作,请务必使用DMA2下的TIM1或者TIM8。
研究的太细了{:32:}{:32:}{:32:} 卧槽,竟然是这样的,长见识了。 我控制AD7606用的PWM输出,然后在busy下降沿触发的外部中断中用FMC读出数据,顶多就是后期优化时在外部中断中触发一个内存到内存的DMA传输。请教硬汉哥在用定时器的up中断有何思量? 牛逼呀, 估计吧 f4 发挥到极致的人很少啊 云琴箫龙 发表于 2020-5-24 21:04
我控制AD7606用的PWM输出,然后在busy下降沿触发的外部中断中用FMC读出数据,顶多就是后期优化时在外部中断 ...
这是一个崭新的实现方案,全程硬件控制。
你用的还是我们好多年前分享的方案。 佩服,佩服!{:8:} 研究得太细了,佩服佩服。 这真是把stm32给玩的转转的。 mark,收藏下 研究得太细了,学习了 专业专业
{:8:} 支持大佬! 请问侠 V5板子做FMC DMA控制AD7606? V5板子能实现 FSMC DMA控制AD7606?还是只能FSMC 控制AD7606 小堕多 发表于 2020-8-4 21:55
V5板子能实现 FSMC DMA控制AD7606?还是只能FSMC 控制AD7606
V5板子的那个固定FSMC插座使用的定时器时钟引脚导致不能使用FSMC DMA,而不是V5板子不能使用FSMC DMA,即不是STM32F407不能使用FSMC DMA驱动AD7606 eric2013 发表于 2020-8-4 22:26
V5板子的那个固定FSMC插座使用的定时器时钟引脚导致不能使用FSMC DMA,而不是V5板子不能使用FSMC DMA,即 ...
推荐 DMA2下的TIM1或者TIM8? 小堕多 发表于 2020-8-4 22:39
推荐 DMA2下的TIM1或者TIM8?
这个没区别了。
看V6的第36章搞即可:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 顶起来,感谢分享。 本帖最后由 wander 于 2021-10-19 17:09 编辑
这图显示DMA1-P1根本没有连接总线矩阵 wander 发表于 2021-10-19 15:25
这图显示DMA1根本没有连接总线矩阵
这个图太简单。看我楼主位的 PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢 taoo232 发表于 2022-8-10 09:34
PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢
那个是控制外设,我们这里说的是控制任意IO eric2013 发表于 2022-8-10 11:11
那个是控制外设,我们这里说的是控制任意IO
是PH12挂在AHB1总线上的原因? taoo232 发表于 2022-8-10 11:35
是PH12挂在AHB1总线上的原因?
对,ABP外设可以复用到相应的GPIO上 前两天用stm32f405才发现,DMA2才支持Memory to Memory
页:
[1]