硬汉嵌入式论坛

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

[DMA] 借助STM32H7的DMAMUX的定时器触+DMA控制任意IO做PWM和脉冲数控制,爽歪歪

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2019-1-14 04:37:11 | 显示全部楼层 |阅读模式

通过DMA的双缓冲或者半缓冲,可以方便的动态控制IO输出状态,非常方便。

QQ截图20190114043623.jpg

回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2019-1-14 09:57:04 | 显示全部楼层
硬汉哥,你是不休息的吗?身体是革命的本钱啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-1-14 11:56:57 | 显示全部楼层
悠悠三千载 发表于 2019-1-14 09:57
硬汉哥,你是不休息的吗?身体是革命的本钱啊

遇到点问题,解决的晚了些。
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2019-1-14 12:09:36 | 显示全部楼层
个人觉得定时器+PWM就蛮不错的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-1-14 12:23:16 | 显示全部楼层
zl1215 发表于 2019-1-14 12:09
个人觉得定时器+PWM就蛮不错的

可以实现同样功能的是PWM+DMA方式,就是没有这个灵活,可以任意IO。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=88975
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2019-1-15 14:37:28 | 显示全部楼层
可惜DMA这种 不能控制指定个数脉冲。。。  必须多加一个定时器。。多路太浪费了。。。甚至搞不定。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-1-15 14:41:49 | 显示全部楼层
roguebear 发表于 2019-1-15 14:37
可惜DMA这种 不能控制指定个数脉冲。。。  必须多加一个定时器。。多路太浪费了。。。甚至搞不定。

都可以的,楼主位的比较方便。

而PWM+DMA这种得借助DMA双缓冲或者半缓冲也可以。动态改CCR列表值。
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2019-2-16 21:00:33 | 显示全部楼层
STM32F407有这个功能吗?有具体实现的代码吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-2-17 00:05:25 | 显示全部楼层
zerone 发表于 2019-2-16 21:00
STM32F407有这个功能吗?有具体实现的代码吗

可以的,定时器PWM的DMA方式也可以的
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2019-2-17 08:59:11 | 显示全部楼层
定时器都是有指定IO做输出的,不能任意IO吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-2-17 13:44:54 | 显示全部楼层
zerone 发表于 2019-2-17 08:59
定时器都是有指定IO做输出的,不能任意IO吧

对,这个方式的话,限制使用定时器引脚。

还可以使用定时器溢出事件控制DMA做传输,这样就可以控制任意引脚了,只是没有DMAMUX灵活。
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2019-2-18 17:34:50 | 显示全部楼层
楼主位的方法   楼主能做个 说明吗 代码方便共享下马  谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-2-18 17:36:44 | 显示全部楼层
china_fan 发表于 2019-2-18 17:34
楼主位的方法   楼主能做个 说明吗 代码方便共享下马  谢谢

V7教程发布时会专门制作一个例子。
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2019-2-22 17:22:10 | 显示全部楼层
用双缓冲传输,缓冲区存放频率控制值,每传输一次发出一个脉冲。假如要发送1000个脉冲,缓冲区大小是100,100个数据传输完成后进入中断,这样可以在线修改脉冲频率。
但是只能按100的倍数发送啊,假如我要发送987个,那传输900个后,剩余的87的怎么要怎么修改发送呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-2-22 17:24:05 | 显示全部楼层
zerone 发表于 2019-2-22 17:22
用双缓冲传输,缓冲区存放频率控制值,每传输一次发出一个脉冲。假如要发送1000个脉冲,缓冲区大小是100,1 ...

动态修改剩下的13个输出低或者高即可。
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2019-2-22 17:44:14 | 显示全部楼层
eric2013 发表于 2019-2-22 17:24
动态修改剩下的13个输出低或者高即可。

我一直在考虑如何在线修改这个发送次数,原来如此,明白了,多谢。
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2019-2-22 17:48:53 | 显示全部楼层
eric2013 发表于 2019-2-22 17:24
动态修改剩下的13个输出低或者高即可。

再请教一下,我现只能改变频率或占空比,就是DMA外设 设置为 定时器周期地或占空比地址
要如何才能同时改变频率和占空比?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2019-2-22 17:53:55 | 显示全部楼层
zerone 发表于 2019-2-22 17:48
再请教一下,我现只能改变频率或占空比,就是DMA外设 设置为 定时器周期地或占空比地址
要如何才能同时 ...


可以将DMA的缓冲整大点,让一个缓冲里面就能动态修改几个范围的频率。不满足了再去修改定时器触发速度即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 23:54 , Processed in 0.379249 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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