eric2013 发表于 2020-5-24 18:30:52

这么多年了,才发现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。



雷鹏 发表于 2020-5-24 19:51:55

研究的太细了{:32:}{:32:}{:32:}

honami520 发表于 2020-5-24 20:00:30

卧槽,竟然是这样的,长见识了。

云琴箫龙 发表于 2020-5-24 21:04:35

我控制AD7606用的PWM输出,然后在busy下降沿触发的外部中断中用FMC读出数据,顶多就是后期优化时在外部中断中触发一个内存到内存的DMA传输。请教硬汉哥在用定时器的up中断有何思量?

hpdell 发表于 2020-5-24 21:47:14

牛逼呀, 估计吧 f4 发挥到极致的人很少啊

eric2013 发表于 2020-5-24 21:48:48

云琴箫龙 发表于 2020-5-24 21:04
我控制AD7606用的PWM输出,然后在busy下降沿触发的外部中断中用FMC读出数据,顶多就是后期优化时在外部中断 ...

这是一个崭新的实现方案,全程硬件控制。

你用的还是我们好多年前分享的方案。

morning_enr6U 发表于 2020-5-24 22:13:46

佩服,佩服!{:8:}

hexenzhou 发表于 2020-5-25 08:06:04

研究得太细了,佩服佩服。

艾那的小强 发表于 2020-5-25 11:37:26

这真是把stm32给玩的转转的。

byccc 发表于 2020-5-25 13:01:03

mark,收藏下

凨霄澐归 发表于 2020-5-31 23:22:10

研究得太细了,学习了

mirlee_i 发表于 2020-6-14 18:46:10

专业专业
{:8:}

jackem 发表于 2020-6-19 09:51:54

支持大佬!

小堕多 发表于 2020-8-4 21:52:55

请问侠 V5板子做FMC DMA控制AD7606?

小堕多 发表于 2020-8-4 21:55:03

V5板子能实现 FSMC DMA控制AD7606?还是只能FSMC 控制AD7606

eric2013 发表于 2020-8-4 22:26:17

小堕多 发表于 2020-8-4 21:55
V5板子能实现 FSMC DMA控制AD7606?还是只能FSMC 控制AD7606
V5板子的那个固定FSMC插座使用的定时器时钟引脚导致不能使用FSMC DMA,而不是V5板子不能使用FSMC DMA,即不是STM32F407不能使用FSMC DMA驱动AD7606

小堕多 发表于 2020-8-4 22:39:38

eric2013 发表于 2020-8-4 22:26
V5板子的那个固定FSMC插座使用的定时器时钟引脚导致不能使用FSMC DMA,而不是V5板子不能使用FSMC DMA,即 ...

推荐 DMA2下的TIM1或者TIM8?

eric2013 发表于 2020-8-5 08:45:41

小堕多 发表于 2020-8-4 22:39
推荐 DMA2下的TIM1或者TIM8?

这个没区别了。

看V6的第36章搞即可:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

廷润 发表于 2021-1-6 13:58:37

顶起来,感谢分享。

wander 发表于 2021-10-19 15:25:49

本帖最后由 wander 于 2021-10-19 17:09 编辑


这图显示DMA1-P1根本没有连接总线矩阵

eric2013 发表于 2021-10-19 15:56:57

wander 发表于 2021-10-19 15:25
这图显示DMA1根本没有连接总线矩阵

这个图太简单。看我楼主位的

taoo232 发表于 2022-8-10 09:34:29

PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢

eric2013 发表于 2022-8-10 11:11:26

taoo232 发表于 2022-8-10 09:34
PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢

那个是控制外设,我们这里说的是控制任意IO

taoo232 发表于 2022-8-10 11:35:05

eric2013 发表于 2022-8-10 11:11
那个是控制外设,我们这里说的是控制任意IO

是PH12挂在AHB1总线上的原因?

eric2013 发表于 2022-8-10 16:05:35

taoo232 发表于 2022-8-10 11:35
是PH12挂在AHB1总线上的原因?

对,ABP外设可以复用到相应的GPIO上

zengyi703 发表于 2022-8-22 11:39:21

前两天用stm32f405才发现,DMA2才支持Memory to Memory
页: [1]
查看完整版本: 这么多年了,才发现STM32F4系列使用DMA1的大坑,只有DMA2才是完全体