硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8665|回复: 25
收起左侧

这么多年了,才发现STM32F4系列使用DMA1的大坑,只有DMA2才是完全体

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2020-5-24 18:30:52 | 显示全部楼层 |阅读模式
注:这些不是bug,但却是每个上手STM32用户最容易入坑的地方,本次的坑,倒腾了整整一天才恍然大悟。

STM32F4系列里面这种骚操作有不少:
1、有两个CAN,但是一个主,一个是从。
2、有两个USB,但是一个FS,一个HS不带高速PHY。
3、有两块大RAM区,但是CCM RAM不支持DMA。

而这次我们要说的骚操作是有两个通用DMA,但是一个强,一个弱。

引出问题,看下面STM32F407的总线框图。

特别注意红色线条:

444.png


这个红色线条的意思是DMA1仅支持APB1下的外设,而DMA2却都支持,含APB1,APB2,AHB1、AHB2。


针对这种骚操作,我们一般使用是发现不了问题的,但是用定时UP事件触发DMA实现各种数据传输时,问题就来了。

DMA1支持的UP事件如下:

1.png
2.png


这个UP事件仅能触发APB1下的外设做DMA,即如下这些

4.png


如果我们要用这些UP事件触发DMA做FMC DMA或者控制任意IO做脉冲数控制,都是不支持的。

而我这次的坑就在使用V5板子做FMC DMA控制AD7606上,V5板子是用的TIM5对应的PH12引脚做AD7606时钟,恰好踩到这个坑上,完全不能用。

我还是一直检查配置问题,搞了一天才发现DMA1就是这么设计的。

总结:

如果打算使用定时UP事件实现各种DMA骚操作,请务必使用DMA2下的TIM1或者TIM8。



回复

使用道具 举报

82

主题

401

回帖

667

积分

金牌会员

积分
667
QQ
发表于 2020-5-24 19:51:55 | 显示全部楼层
研究的太细了  
武汉天纵鹏元科技有限公司。承接嵌入式项目开发,相关技术交流。STM32,物联网,工业控制方向。QQ  408137104
回复

使用道具 举报

5

主题

201

回帖

216

积分

高级会员

积分
216
发表于 2020-5-24 20:00:30 | 显示全部楼层
卧槽,竟然是这样的,长见识了。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2020-5-24 21:04:35 | 显示全部楼层
我控制AD7606用的PWM输出,然后在busy下降沿触发的外部中断中用FMC读出数据,顶多就是后期优化时在外部中断中触发一个内存到内存的DMA传输。请教硬汉哥在用定时器的up中断有何思量?
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2020-5-24 21:47:14 | 显示全部楼层
牛逼呀, 估计吧 f4 发挥到极致的人很少啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-5-24 22:13:46 | 显示全部楼层
佩服,佩服!
回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2020-5-25 08:06:04 | 显示全部楼层
研究得太细了,佩服佩服。
回复

使用道具 举报

0

主题

77

回帖

77

积分

初级会员

积分
77
发表于 2020-5-25 11:37:26 | 显示全部楼层
这真是把stm32给玩的转转的。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2020-5-25 13:01:03 | 显示全部楼层
mark,收藏下
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-5-31 23:22:10 | 显示全部楼层
研究得太细了,学习了
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2020-6-14 18:46:10 | 显示全部楼层
专业专业
回复

使用道具 举报

0

主题

44

回帖

44

积分

新手上路

积分
44
发表于 2020-6-19 09:51:54 | 显示全部楼层
支持大佬!
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2020-8-4 21:52:55 | 显示全部楼层
请问侠 V5板子做FMC DMA控制AD7606?
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2020-8-4 21:55:03 | 显示全部楼层
V5板子能实现 FSMC DMA控制AD7606?还是只能FSMC 控制AD7606
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 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
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2020-8-4 22:39:38 | 显示全部楼层
eric2013 发表于 2020-8-4 22:26
V5板子的那个固定FSMC插座使用的定时器时钟引脚导致不能使用FSMC DMA,而不是V5板子不能使用FSMC DMA,即 ...

推荐 DMA2下的TIM1或者TIM8?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 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
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2021-1-6 13:58:37 | 显示全部楼层
顶起来,感谢分享。
Releasing your creativity
回复

使用道具 举报

0

主题

68

回帖

68

积分

初级会员

积分
68
发表于 2021-10-19 15:25:49 | 显示全部楼层
本帖最后由 wander 于 2021-10-19 17:09 编辑

11111111111.png
这图显示DMA1-P1根本没有连接总线矩阵
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2021-10-19 15:56:57 | 显示全部楼层
wander 发表于 2021-10-19 15:25
这图显示DMA1根本没有连接总线矩阵

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

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-8-10 09:34:29 | 显示全部楼层
PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-10 11:11:26 | 显示全部楼层
taoo232 发表于 2022-8-10 09:34
PH12不是可以用DAMA1中的数据流0的通道6和 数据流6的通道6吗?为什么就不能用了呢

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

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-8-10 11:35:05 | 显示全部楼层
eric2013 发表于 2022-8-10 11:11
那个是控制外设,我们这里说的是控制任意IO

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-10 16:05:35 | 显示全部楼层
taoo232 发表于 2022-8-10 11:35
是PH12挂在AHB1总线上的原因?

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

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2022-8-22 11:39:21 | 显示全部楼层
前两天用stm32f405才发现,DMA2才支持Memory to Memory
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 22:08 , Processed in 0.257295 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表