野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11008|回复: 4

[记录]关于stm32时钟

[复制链接]
发表于 2016-8-11 09:09:20 | 显示全部楼层 |阅读模式
经常配置定时器的时候会碰到以下类似的代码:



  1.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /

  2.   /* Time Base configuration */
  3.   TIM_TimeBaseStructure.TIM_Prescaler = 7199;   

  4.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  5.   TIM_TimeBaseStructure.TIM_Period = 9999;//

  6.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  7.   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  8.   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //

复制代码


像 TIM_TimeBaseStructure.TIM_Prescaler = 7199;  普遍的解释就是时钟频率 = 72/(时钟分频+1)


这个72MHz的由来,通过查手册的时钟树图可知当系统时钟 为72MHz时APB1由于频率上限为36MHz,因此必须2分频往上走了,
也就是 满足 if (APB1 prescaler) = 1  x1
                                               else   x2  
中的倍频条件了,因此定时器的的时钟频率最大值也就为72MHz


对此我产生的疑惑就是 APB1的prescaler 与TIM的prescaler 两个我有点不好理解, TIM的减了个 1 ,那么APB1 为什么不减1呢?
我理解起来有点不怎么通畅
希望有同学能给我解释下,谢谢!


stm功能图时钟树图.jpg
回复

使用道具 举报

发表于 2016-8-11 09:50:26 | 显示全部楼层
1、APB1 为什么不减1,这个是官方的规定,官方是不减1就不减1

2、TIM的为什么也不用减1,而是要在分频因子的基础上加1,比如你要进行1000分频,可以写999,具体为什么要加1,这个是TIM定时器分频因子的规定,在寄存器手册部分有描述
回复 支持 反对

使用道具 举报

发表于 2016-8-11 09:51:30 | 显示全部楼层
这些全部都在手册里面有说
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 10:05:13 | 显示全部楼层
fire 发表于 2016-8-11 09:50
1、APB1 为什么不减1,这个是官方的规定,官方是不减1就不减1

2、TIM的为什么也不用减1,而是要在分频因 ...

谢谢火哥提点
回复 支持 反对

使用道具 举报

发表于 2016-8-11 12:40:22 | 显示全部楼层
有很多东西在手册都有讲的,要养成看手册的习惯
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 07:33 , Processed in 0.031998 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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