OpenEdv-开源电子网

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

自动重装载值和预分频系数怎么算 定时器的频率

[复制链接]

19

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2015-9-26
在线时间
7 小时
发表于 2016-3-16 18:08:46 | 显示全部楼层 |阅读模式
1金钱
        TIM_TimeBaseInitStruct.TIM_Period=arr;
        TIM_TimeBaseInitStruct.TIM_Prescaler=pre;
        TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
不清楚定时器的频率怎么算
比方说10khz的  
我的第一反应就是 时钟频率/预分频系数  72MHZ/7200
但是这样我就不知道这个自动冲装载值怎么设了

        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = 999;  //1KHz
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
        //TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  
        TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);               



比方说这么例题 这个1khz 怎么算的?

最佳答案

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

好好理解公式f=1/T(频率=1/周期) TIM_TimeBaseStructure.TIM_Period里面装的就是周期 TIM_TimeBaseStructure.TIM_Prescaler装的是预分频系数,用来驱动计数器自加的 如果TIM_Period装的数值是999并且TIM_Prescaler装的是71 那么计数器就会以1us记一次,记满1000次(0-999是1000次),那么记满的时间就是1000us,相对应的周期就是1000us 所以频率=1000000/1000=1000Hz,为什么是1000000,因为公式的单位是秒,你要化成us才能正确计算
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-16 18:08:47 | 显示全部楼层
好好理解公式f=1/T(频率=1/周期)
TIM_TimeBaseStructure.TIM_Period里面装的就是周期
TIM_TimeBaseStructure.TIM_Prescaler装的是预分频系数,用来驱动计数器自加的
如果TIM_Period装的数值是999并且TIM_Prescaler装的是71
那么计数器就会以1us记一次,记满1000次(0-999是1000次),那么记满的时间就是1000us,相对应的周期就是1000us
所以频率=1000000/1000=1000Hz,为什么是1000000,因为公式的单位是秒,你要化成us才能正确计算
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-3-16 19:01:30 | 显示全部楼层
这个您复制代码的时候是不是下面的参数丢了,这个TIM_Prescaler 设置成7200才可以把。
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-16 19:44:44 | 显示全部楼层
PWM频率 = 定时器模块频率 / (Period+1) / (Prescaler+1)
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-16 20:02:01 | 显示全部楼层
461450651 发表于 2016-3-16 19:48
好好理解公式f=1/T(频率=1/周期)
TIM_TimeBaseStructure.TIM_Period里面装的就是周期
TIM_TimeBaseStruct ...

你指的是电机正反转吗?
0.png
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-16 20:19:20 | 显示全部楼层
xkwy 发表于 2016-3-16 20:02
你指的是电机正反转吗?

不是,蓝桥杯那里不是有电路设计吗
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-16 21:57:16 | 显示全部楼层
461450651 发表于 2016-3-16 20:19
不是,蓝桥杯那里不是有电路设计吗

这就是2013的电路设计题。

去年国赛真题有中文界面,提供有取模软件,这是我写的,你参考一下。
第六届国赛真题-xkwy.rar (95.41 KB, 下载次数: 597)
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-19
在线时间
9 小时
发表于 2016-3-16 22:09:09 | 显示全部楼层
TIMx_Period = (SystemCoreClock / 频率) - 1
ChannelxPulse = DutyCycle * (TIMx_Period - 1) / 100
回复

使用道具 举报

344

主题

1464

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8039
金钱
8039
注册时间
2015-10-15
在线时间
2905 小时
发表于 2016-3-16 22:09:16 | 显示全部楼层
其实不用死记硬背。。。
一个频率A ,经过预分频PRE后得到频率B=A/(PRE+1)。 预分频就是把频率做除法嘛。。。
然后定时器按频率B计数,计数到ARR+1重载,就是重新开始。。。所以一个全周期时间就是
(ARR+1)*(PRE+1)/A
倒数就是频率。。。。。

这个只有你理解了定时器的工作原理就得心应手
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2015-10-5
在线时间
27 小时
发表于 2016-3-17 21:39:21 | 显示全部楼层
旗威 发表于 2016-3-16 22:09
TIMx_Period = (SystemCoreClock / 频率) - 1
ChannelxPulse = DutyCycle * (TIMx_Period - 1) / 100

好谢谢
回复

使用道具 举报

5

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-1-25
在线时间
7 小时
发表于 2016-4-21 15:23:05 | 显示全部楼层
461450651 发表于 2016-3-16 18:08
好好理解公式f=1/T(频率=1/周期)
TIM_TimeBaseStructure.TIM_Period里面装的就是周期
TIM_TimeBaseStruct ...

你说的不好,定时器频率就是72 000 000hz(APB1频率)除以7200(预分频数)等于1000hz计算出来的,哪用你说的那么麻烦。然后计算周期的时候用到自动重载值就好了,根据频率1us计数一次,计数是1000次,所以计数周期就是1000us即1s
专注
回复

使用道具 举报

3

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2016-9-8
在线时间
44 小时
发表于 2016-11-4 10:03:12 | 显示全部楼层
zcls 发表于 2016-4-21 15:23
你说的不好,定时器频率就是72 000 000hz(APB1频率)除以7200(预分频数)等于1000hz计算出来的,哪用你 ...

大兄弟,72 000 000/7200=10 000,no 1 000啊!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-7-14
在线时间
0 小时
发表于 2017-7-14 14:12:43 | 显示全部楼层
zcls 发表于 2016-4-21 15:23
你说的不好,定时器频率就是72 000 000hz(APB1频率)除以7200(预分频数)等于1000hz计算出来的,哪用你 ...

APB1时钟频率应该是36Mhz吧,我记得APB2才是72Mhz
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-12-24
在线时间
8 小时
发表于 2017-12-30 20:57:26 | 显示全部楼层
123546 发表于 2017-7-14 14:12
APB1时钟频率应该是36Mhz吧,我记得APB2才是72Mhz

因为它的分频系数不是1,所以时钟频率为APB1的两倍
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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