OpenEdv-开源电子网

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

分享关于stm32f407定时器时钟频率的问题

[复制链接]

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
发表于 2016-2-26 15:27:47 | 显示全部楼层 |阅读模式
本帖最后由 特朗姆斯 于 2016-9-26 15:16 编辑

上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解。
仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结:


从时钟树中我们可以得知(时钟树的图片可以直接参考6楼,感谢6楼xkwy补上的图):
(1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线
(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线

从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。


因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,APB2总线时钟为2分频即84M,所以TIM1、TIM8~TIM11的时钟为APB2时钟的两倍即168M,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M




知道定时器的时钟源频率我们用定时器做延时就很方便了,只要设定合适的分频系数即可,附一下用中断实现延时的公式:(摘自原子的STM32F4开发指南)
                      Tout = ((arr+1)*(psc+1))/Tclk;


公式中psc就是分频系数,arr就是计数值,达到这个计数就会发生溢出中断,Tclk就是我上述分析的时钟源频率的倒数。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-2-28 22:57:23 | 显示全部楼层
坚决不用寄存器,拒绝重复造轮子。
回复 支持 1 反对 0

使用道具 举报

305

主题

1425

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7868
金钱
7868
注册时间
2015-10-15
在线时间
2873 小时
发表于 2016-2-26 15:34:20 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2016-2-26 15:35:40 | 显示全部楼层

原子哥的开发指南里只有TIM3的例子,其它的定时器就要大家举一反三,自己思考研究了
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2016-1-20
在线时间
34 小时
发表于 2016-2-28 17:18:53 | 显示全部楼层
码 等学到定时器的时候有啥不懂的会出来掘坟。
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-2-28 22:37:05 | 显示全部楼层
你是在时钟树里面怎么看出APB1,APB2时钟的啊?我看的是F4中文参考手册,时钟树没有明确写着定时器时钟啊?!
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2016-2-29 11:17:22 | 显示全部楼层
q546163199 发表于 2016-2-28 22:37
你是在时钟树里面怎么看出APB1,APB2时钟的啊?我看的是F4中文参考手册,时钟树没有明确写着定时器时钟啊? ...

参考6楼xkwy附上的图
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2016-2-29 11:19:02 | 显示全部楼层
xkwy 发表于 2016-2-28 22:57
再来个图就更好了

非常感谢,省去我截图的时间了!
回复 支持 反对

使用道具 举报

35

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
476
金钱
476
注册时间
2015-12-27
在线时间
116 小时
发表于 2016-3-4 22:30:41 | 显示全部楼层
特朗姆斯 发表于 2016-2-29 11:17
参考6楼xkwy附上的图

这个图不错,不过是在哪里找到的啊?
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2016-3-7 18:07:16 | 显示全部楼层
q546163199 发表于 2016-3-4 22:30
这个图不错,不过是在哪里找到的啊?

datasheet..
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-12
在线时间
17 小时
发表于 2016-7-22 21:17:46 | 显示全部楼层
这个我看了,分频为一,但是示波器测出来的效果是84mhz,按照上面的应该是42Mhz呀,怎么回事
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-12
在线时间
17 小时
发表于 2016-7-22 21:18:31 | 显示全部楼层
这个我看了,分频为一,但是示波器测出来的效果是84mhz,按照上面的应该是42Mhz呀,怎么回事
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2016-7-25 09:25:55 | 显示全部楼层
feng_dou 发表于 2016-7-22 21:18
这个我看了,分频为一,但是示波器测出来的效果是84mhz,按照上面的应该是42Mhz呀,怎么回事

麻烦再仔细看一下,帖子里写的timer6的时钟是84MHz,和你示波器测处理的结果是一样的。
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-12
在线时间
17 小时
发表于 2016-7-28 22:10:55 | 显示全部楼层
特朗姆斯 发表于 2016-7-25 09:25
麻烦再仔细看一下,帖子里写的timer6的时钟是84MHz,和你示波器测处理的结果是一样的。

从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。


分频为1,就应该为42Mhz,呀,结果为84Mhz。你好好看一下,帮忙解答一下,谢谢了
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-7-28 23:09:29 | 显示全部楼层
feng_dou 发表于 2016-7-28 22:10
从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~T ...

1.png

TIM6挂载在APB1上,
APB1是由SYSCLK分频来的,4分频,为42MHz

所以TIM6时钟为42*2=84MHz
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-7-12
在线时间
17 小时
发表于 2016-7-29 08:50:41 | 显示全部楼层
xkwy 发表于 2016-7-28 23:09
TIM6挂载在APB1上,
APB1是由SYSCLK分频来的,4分频,为42MHz

懂了,你说的分频是系统初始化SystemInit函数里初始化APB1,APB2的时候分频,我理解为根据TIM_TimeBaseStructure.TIM_Prescaler = 0;  对定时器时钟 TIMxCLK 的预分频值,来判断要不要X2,谢谢了
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2015-2-7
在线时间
59 小时
发表于 2016-9-3 20:40:12 | 显示全部楼层
好贴 ,收着以防备用!
回复 支持 反对

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-4-6 16:21:45 | 显示全部楼层

难道我的datasheet是假的?
没有找到这么详细的,
clock tree 没有写这么具体啊?
回复 支持 反对

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
 楼主| 发表于 2017-4-7 09:47:08 | 显示全部楼层
无帝老三 发表于 2017-4-6 16:21
难道我的datasheet是假的?
没有找到这么详细的,
clock tree 没有写这么具体啊?

在第17页,你搜STM32F40x block diagram
回复 支持 反对

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-4-7 13:34:29 | 显示全部楼层
特朗姆斯 发表于 2017-4-7 09:47
在第17页,你搜STM32F40x block diagram

找到了,谢谢
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2018-5-24
在线时间
7 小时
发表于 2017-4-8 22:57:47 | 显示全部楼层
最近用STM32F407+RA8875做项目,过来学习学习
回复 支持 反对

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-4
在线时间
15 小时
发表于 2017-5-9 16:24:57 | 显示全部楼层
feng_dou 发表于 2016-7-29 08:50
懂了,你说的分频是系统初始化SystemInit函数里初始化APB1,APB2的时候分频,我理解为根据TIM_TimeBaseSt ...

你好,我现在的问题是time1分频系数为2,按理说定时器1的时钟频率为168M,但是我在想不是2分频么,所以定时器1的时钟频率为84M,请帮我指正一下
回复 支持 反对

使用道具 举报

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
金钱
391
注册时间
2014-8-25
在线时间
157 小时
发表于 2017-6-12 09:39:30 | 显示全部楼层
谢谢楼主,回个贴标记一下
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-6-11
在线时间
9 小时
发表于 2017-6-12 15:06:49 | 显示全部楼层
谢谢楼主,回个贴标记一下
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2017-2-27
在线时间
7 小时
发表于 2017-6-12 16:00:51 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-9-21
在线时间
6 小时
发表于 2020-1-3 16:54:28 | 显示全部楼层
原子哥的开发指南里只有TIM3的例子,其它的定时器就要大家举一反三,自己思考研究了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-1-4
在线时间
1 小时
发表于 2020-1-4 16:33:51 | 显示全部楼层
啥意思啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 11:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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