打印
[STM32F4]

版主,STM32F407的DMA能否配置为外部中断触发?

[复制链接]
1003|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzzly|  楼主 | 2021-12-13 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
407ZGT6芯片,外挂AD7606,TIM3的PWM触发AD转换,AD7606中断启动DMA读取8个数据,希望DMA读取16个或者更多数据产生一次DMA中断,如何做?

使用特权

评论回复
沙发
香水城| | 2021-12-13 11:00 | 只看该作者
本帖最后由 香水城 于 2021-12-13 11:05 编辑

你现在ADC的转换通过定时器启动这个没问题;

通过AD7606提供外部中断然后触发DMA去读取数据,目前F407的话,我们可以基于外部中断手动开启相关DMA传输,至于每轮数据个数我们可以自由定义。

如果是其它G4/F7/H7系列的话,可以使用DMAMUX的同步功能,它可以基于外部中断事件来控制相关DMA的传输。
通过STM32外部中断触发DMA传输

使用特权

评论回复
板凳
yzzly|  楼主 | 2021-12-13 11:07 | 只看该作者
香水城 发表于 2021-12-13 11:00
你现在ADC的转换通过定时器启动这个没问题;

通过AD7606提供外部中断然后触发DMA去读取数据,目前F407的话 ...

每轮传输数据个数是可以自由定义,问题是一次AD中断只能读取8个数据,如果定义传输16个数据发生一次DMA中断的话,那第二个八个数据是紧接着前8个数据读取,后8个数据是无效的。

使用特权

评论回复
地板
yzzly|  楼主 | 2021-12-13 11:09 | 只看该作者
本帖最后由 yzzly 于 2021-12-13 11:14 编辑

之所以有这样的需求,是需要新采样的数据与前面采样的数据组成完整的周波,然后计算。过去用CPU内部AD模块是没有这样的问题。

使用特权

评论回复
5
香水城| | 2021-12-13 11:14 | 只看该作者
yzzly 发表于 2021-12-13 11:07
每轮传输数据个数是可以自由定义,问题是一次AD中断只能读取8个数据,如果定义传输16个数据发生一次DMA中 ...

我说的自由定义是根据情况来定的意思;

既然每次AD中断只有8数据可读,那就设置8个就行啊;

我没用过AD7606,你现在是每次转换得到8个数据在缓冲,然后是通过SPI去读取的意思吧。

如果这样的话,每次通过外部中断代码开启SPI的DMA传输,每轮读8个数据应该可以实现。

使用特权

评论回复
6
香水城| | 2021-12-13 13:03 | 只看该作者
caosix 发表于 2021-12-13 12:03
依照 ST的强大 , 估计 : 应该可以 配置为:外部 硬件 Even 事件 ,直接 触发 DMA 吧 !? ...

STM32系列中带DMAMUX的都肯定可以。

使用特权

评论回复
7
yzzly|  楼主 | 2021-12-16 15:08 | 只看该作者
对于STM32F407ZGT6型号,我的这个问题只有靠软件逻辑解决,增加一个DMA数据流搬移数据,目前已经OK。

使用特权

评论回复
8
g0d5xs| | 2022-1-25 13:51 | 只看该作者
这个应该是可以的吧,外部触发之后使能DMA呗

使用特权

评论回复
9
l1uyn9b| | 2022-1-25 13:58 | 只看该作者
没得问题的,我觉得是没啥问题

使用特权

评论回复
10
q1d0mnx| | 2022-1-25 14:02 | 只看该作者
你可以自己写代码试试,看看是否能行

使用特权

评论回复
11
w2nme1ai7| | 2022-1-25 14:12 | 只看该作者
用不定长接收呗,是么

使用特权

评论回复
12
p0gon9y| | 2022-1-25 14:26 | 只看该作者
这个我还没做过,有空我也试试

使用特权

评论回复
13
koala889| | 2022-1-25 15:58 | 只看该作者
yzzly 发表于 2021-12-16 15:08
对于STM32F407ZGT6型号,我的这个问题只有靠软件逻辑解决,增加一个DMA数据流搬移数据,目前已经OK。 ...

这是用两个DMA么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

1178

帖子

3

粉丝