OpenEdv-开源电子网

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

请教大家一下如何使用STM32输出一个频率可调的方波

[复制链接]

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
发表于 2016-5-31 18:18:32 | 显示全部楼层 |阅读模式
1金钱
如题~请各位大虾赐教

最佳答案

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

TIM_SetCompare1(TIM1,x ); 动态改变频率,引用就好了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2015-12-26
在线时间
54 小时
发表于 2016-5-31 18:18:33 | 显示全部楼层
TIM_SetCompare1(TIM1,x );  动态改变频率,引用就好了。
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
 楼主| 发表于 2016-6-1 10:38:04 | 显示全部楼层
没人吗--~顶
回复

使用道具 举报

5

主题

121

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2016-1-26
在线时间
150 小时
发表于 2016-6-1 10:41:07 | 显示全部楼层
更改计数值就可以了
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
 楼主| 发表于 2016-6-1 10:43:58 | 显示全部楼层
无休 发表于 2016-6-1 10:41
更改计数值就可以了

是指用定时器输出PWM吗?
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11548
金钱
11548
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-6-1 10:44:38 | 显示全部楼层

PWM方式,
修改ARR寄存器改变频率。



回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
 楼主| 发表于 2016-6-1 10:53:47 | 显示全部楼层
xuande 发表于 2016-6-1 10:44
PWM方式,
修改ARR寄存器改变频率。

修改ARR寄存器可以直接改变频率,但是不是还跟系统时钟有关吗。
有一个具体的公式吗。。。
求大虾赐教
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-6-1 10:57:06 | 显示全部楼层
PWM输出好了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11548
金钱
11548
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-6-1 11:05:23 | 显示全部楼层
571420670 发表于 2016-6-1 10:53
修改ARR寄存器可以直接改变频率,但是不是还跟系统时钟有关吗。
有一个具体的公式吗。。。
求大虾赐教


没错,有关。
系统时钟——分频——AHB或APB时钟——定时器再分频,得到时钟周期t,
那么定时器的周期=ARR * t,1/x 就是频率。


回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
 楼主| 发表于 2016-6-1 11:16:37 | 显示全部楼层
xuande 发表于 2016-6-1 11:05
没错,有关。
系统时钟——分频——AHB或APB时钟——定时器再分频,得到时钟周期t,
那么定时器的周 ...

恩懂了。
但是在程序中我要改变PWM的频率有没有一个函数可以直接改变ARR寄存器的值呢
比如直接改变CRR寄存器的值是用这个函数TIM_SetCompare2();
还是说我每改变一次ARR寄存器的值就要TIM3_PWM_Init()初始化一下呢?
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-1 11:16:43 | 显示全部楼层
是跟系统时钟有关,不过一般不会为了这个而去改变系统的时钟,都是直接设置预分频得到你想要的定时器时钟。
然后ARR设置频率,CCRx设置占空比
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-4-9
在线时间
14 小时
 楼主| 发表于 2016-6-2 09:21:35 | 显示全部楼层
zhangyimj007 发表于 2016-5-31 18:18
TIM_SetCompare1(TIM1,x );  动态改变频率,引用就好了。

这个不是设置CCR寄存器来改变占空比的吗?也可以改变频率吗?

如果我想要输出一个1Hz的方波,需要怎么设置ARR的值呢。系统时钟都是KHz级别的,怎么设置为Hz级别呢?
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2016-5-31
在线时间
17 小时
发表于 2016-6-2 14:11:57 | 显示全部楼层
不是用定时器输出PWM波么
回复

使用道具 举报

5

主题

121

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2016-1-26
在线时间
150 小时
发表于 2016-6-2 16:35:24 | 显示全部楼层
TIM_SetCompare1(TIM1,x )只能改变占空比,要改变频率根据需求来确定,可以直接初始化定时器的计数模式,也可以直接设置寄存器的值
回复

使用道具 举报

11

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2016-3-16
在线时间
15 小时
发表于 2016-7-15 10:24:40 | 显示全部楼层
571420670 发表于 2016-6-1 11:16
恩懂了。
但是在程序中我要改变PWM的频率有没有一个函数可以直接改变ARR寄存器的值呢
比如直接改变CRR ...

这个肯定是可以的,去定时器的库函数里找找,我以前好像用过
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 19:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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