硬汉嵌入式论坛

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

[DMA] 用DMA的方式输出指定个数的PWM脉冲的问题

[复制链接]

2

主题

8

回帖

14

积分

新手上路

积分
14
发表于 2021-6-10 22:23:04 | 显示全部楼层 |阅读模式
1.ARR寄存器只有16位,如果我以10us为单位,设置需要的周期值超过了65535该怎么办?只能通过调大单位时间(调低频率)来解决吗?

2.连续输出的一定数量的脉冲若都是同周期、同占空比的情况,同时脉冲个数较大时,如HAL_TIM_PWM_Start_DMA(&htim15, TIM_CHANNEL_1, aCCValue_Buffer, 10000);
   也需要将aCCValue_Buffer[]数组上万个值都设置成同一个pulse值吗?这种方式数组空间太浪费了(特别是还有多个通道执行类似功能的情况),
   而且每次都用for循环进行赋值浪费时间,一定程度上有点影响us级定时器中断程序的运行

新的芯片都没有标准库可以用了,用HAL库封装性太强,有些细节一点的实现上真的不是很方便,如果通过直接操作寄存器的方式或者其他方式可以实现的话,求大佬指点

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-6-11 08:51:39 | 显示全部楼层
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2021-6-11 08:53:04 | 显示全部楼层
LL库和之前的标准库类似
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-6-11 15:06:39 | 显示全部楼层
eric2013 发表于 2021-6-11 08:51
参考我的,比较好用个

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

我需要将PWM输出配置在TIM15_CH1下,请问您这种方式是要通过另一个触发源同步请求才能触发到这个定时器进行输出吗?我在看DMAMUX的触发源里没有TIM15,我没有多余的定时器可用了只能单纯靠TIM15进行能控制个数的PWM脉冲输出。
我想实现的效果也很简单,就是我通过串口接收到三个数据,一个是有效电平时长-2字节(10us为单位),一个是无效电平时长-2字节,还有一个触发个数-2字节,再通过PWM的形式实现硬件输出一定数量方波。所以我就想到用DMA的方式,遇到的问题就是刚刚提出的那个。
我只剩下3个定时器TIM15.16.17可用,这三个定时器要配置在三个输出口里输出PWM信号,且相互独立工作。
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-6-11 15:08:21 | 显示全部楼层
qqzhaojs 发表于 2021-6-11 08:53
LL库和之前的标准库类似

我的标准代码使用stm32mxcube配置的,选的HAL,没用过LL库,如果要更换的话是不是要整体代码重新构造一边才行啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-6-11 16:10:59 | 显示全部楼层
JaysonZ 发表于 2021-6-11 15:06
我需要将PWM输出配置在TIM15_CH1下,请问您这种方式是要通过另一个触发源同步请求才能触发到这个定时器进 ...

我这个不限制IO,任何GPIO都可以使用
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-6-11 16:36:45 | 显示全部楼层
eric2013 发表于 2021-6-11 16:10
我这个不限制IO,任何GPIO都可以使用

这个请求触发器选择我该怎么选呢?列表里好像没有能用的,其他定时器都分配满了
D:\屏幕截图 2021-06-11 163401.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-6-11 16:52:25 | 显示全部楼层
JaysonZ 发表于 2021-6-11 16:36
这个请求触发器选择我该怎么选呢?列表里好像没有能用的,其他定时器都分配满了

H7有10几个定时器呢,建议你用HRTIM和5个LPTIM分担下,留个给DMAMUX使用。
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-6-11 17:18:49 | 显示全部楼层
eric2013 发表于 2021-6-11 16:52
H7有10几个定时器呢,建议你用HRTIM和5个LPTIM分担下,留个给DMAMUX使用。

我有3路输出口需要同时工作各自输出不同的PWM波,这种方式可以实现吗?本来是安排了TIM15.16.17各自控制一个的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-6-11 17:31:12 | 显示全部楼层
JaysonZ 发表于 2021-6-11 17:18
我有3路输出口需要同时工作各自输出不同的PWM波,这种方式可以实现吗?本来是安排了TIM15.16.17各自控制 ...

STM32H7实现单个定时器中不同通道配置不同频率PWM的方法
http://www.armbbs.cn/forum.php?m ... 9008&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2021-6-11 17:56:33 | 显示全部楼层
eric2013 发表于 2021-6-11 17:31
STM32H7实现单个定时器中不同通道配置不同频率PWM的方法
http://www.armbbs.cn/forum.php?mod=viewthrea ...

这个方法不能在DMAMUX触发的方式里面体现吧?而且LPTIM1.2和TIM1.2.3.4.5都占用成编码器模式了,DMAMUX触发源里面好像唯一能选的就剩下LPTIM3_OUT,这一个触发源能同时触发多个不同的PWM波嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-6-11 18:11:36 | 显示全部楼层
JaysonZ 发表于 2021-6-11 17:56
这个方法不能在DMAMUX触发的方式里面体现吧?而且LPTIM1.2和TIM1.2.3.4.5都占用成编码器模式了,DMAMUX触 ...

1、你搞错了,我这个是对你前面的”安排了TIM15.16.17各自控制一个“ 的回复。

2、你可以使用TIM12的,此贴有详细说明
区分STM32H7的DMAMUX中同步触发源和外部触发源以及配套的几个实战案例
http://www.armbbs.cn/forum.php?mod=viewthread&tid=98811

这个问题暂时就交流这么吧,结贴。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 00:43 , Processed in 0.431292 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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