OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7103|回复: 8

两个PWM使用同一个引脚,如何同步开启

[复制链接]

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
发表于 2021-1-27 17:06:27 | 显示全部楼层 |阅读模式
1金钱
是这样的,我用PA1输出一个频率F可调,多少个脉冲X里可以缺失几个脉冲Y(X和Y都可调)。
TIM5负责输出频率F,占空比50%。TIM2负责输出F/X频率,占空比(Y/X)%。
理想情况下是频率少许误差,但是脉冲必须精准,像图一,频率9990Hz,X=10,Y=1。(就是10个脉冲就会少一个)
cea3b7a0f611488ffef768acd9a5dfa.jpg
但是现在就是会出现像图二这样,两个定时器的开启时间有少许偏差,导致PWM没有重叠在一起。
bb351b318c6ddb95eae8b09effa4818.jpg
为了避免这个问题,我在配置完PWM后加入了以下代码
                        RCC->APB1ENR &= ~9;    //TIM2时钟不使能TIM5时钟不使能
                        TIM5->CR1 &= ~0x01;      //不使能定时器5
                        TIM2->CR1 &= ~0x01;      //不使能定时器2
                        TIM5->CR1 |= 1 << 1;     //禁止定时器5的UEV
                        TIM2->CR1 |= 1 << 1;     //禁止定时器2的UEV
                        TIM5->CNT = 0;           //清空定时器5的计数器
                        TIM2->CNT = 0;           //清空定时器2的计数器
                        TIM5->CR1 &= ~(1 << 1);  //允许定时器5的UEV
                        TIM2->CR1 &= ~(1 << 1);  //允许定时器2的UEV
                        TIM5->CR1 |= 0x01;       //使能定时器5
                        TIM2->CR1 |= 0x01;       //使能定时器2
                        RCC->APB1ENR |= 9;       //TIM2时钟使能TIM5时钟使能
但是没用,我猜测是这里除了计数器清空,还得把进给计数器的清空,但是不知道怎么搞,想请问一下。。。


最佳答案

查看完整内容[请看2#楼]

TIMx_EGR寄存器0位的UG产生更新事件
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
 楼主| 发表于 2021-1-27 17:06:28 | 显示全部楼层
TIMx_EGR寄存器0位的UG产生更新事件
回复

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-10-28
在线时间
37 小时
发表于 2021-1-27 17:57:43 | 显示全部楼层
不懂啊
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-1-27 18:10:46 | 显示全部楼层
本帖最后由 edmund1234 于 2021-1-27 18:19 编辑

没必要这样做, 用一个计时器的比较通道+DMA就能做到的
ST的应用笔记AN4776, 看Arbitrary waveform generation using timer DMA-burst feature那一章

回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
 楼主| 发表于 2021-1-27 18:34:35 | 显示全部楼层
edmund1234 发表于 2021-1-27 18:10
没必要这样做, 用一个计时器的比较通道+DMA就能做到的
ST的应用笔记AN4776, 看Arbitrary waveform gener ...

DMA的频率好像只有8种选择吧
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-1-27 19:41:07 | 显示全部楼层
二三五 发表于 2021-1-27 18:34
DMA的频率好像只有8种选择吧

不明白你说的什么DMA的频率好像只有8种选择, 频率跟DMA有什么关系?你看那应用笔记了吗?
回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
 楼主| 发表于 2021-1-28 08:52:33 | 显示全部楼层
edmund1234 发表于 2021-1-27 19:41
不明白你说的什么DMA的频率好像只有8种选择, 频率跟DMA有什么关系?你看那应用笔记了吗?

不好意思,刚在写SPI,记反了。手册我看了,不过好像你说的这种方法STM32F1不支持,我用的芯片是STM32F103VET6,手册“The DMA burst transfer feature supported only by the STM32F2 products DMA”
回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
 楼主| 发表于 2021-1-28 09:37:29 | 显示全部楼层
edmund1234 发表于 2021-1-27 19:41
不明白你说的什么DMA的频率好像只有8种选择, 频率跟DMA有什么关系?你看那应用笔记了吗?

不好意思,昨晚在看SPI,记岔了。手册我看了,但好像不支持STM32F1,“The DMA burst transfer feature supported only by the STM32F2 products DMA”我用的芯片是STM32F103VET6
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-1-28 11:03:04 | 显示全部楼层
二三五 发表于 2021-1-28 09:37
不好意思,昨晚在看SPI,记岔了。手册我看了,但好像不支持STM32F1,“The DMA burst transfer feature s ...

F1的DMA支持burst的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-2 03:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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