STM32F4xx时钟理解

理解STM32的时钟是我们应用定时器等等的基础,根据最近的工作总结一下:

下面是STM32的时钟树:

1.首先注意的的是图中画绿色圈圈的两个,HSE和HSI分别表示外部时钟和内部时钟,其中HSE 是是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,HSE 也可以直接做为系统时钟或者 PLL 输入(从红圈4处可以看出),频率范围为 4MHz~26MHz。STM32默认为25Mhz,像原子的板子就是8Mhz的,所以移植时一定要格外注意。

2.注意红圈2代表的部分,这里是主锁相环倍频输出,用于产生系统需要的高速时钟信号,如图绿色箭头所示(STM32还有一个副锁相环,如红圈3)

主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之后的时候还需要经过一个分频系数为 P(第一个输出 PLLP)或者 Q(第二个输出 PLLQ)的分频器分频之后,最后才生成最终的主 PLL 时钟。例如我们的外部晶振选择
8MHz。同时我们设置相应的分频器 M=8,倍频器倍频系数 N=336,分频器分频系数 P=2,那么主 PLL 生成的第一个输出高速时钟 PLLP 为:PLL=8MHz * N/ (M*P)=8MHz* 336 /(8*2) = 168MHz(来源:正点原子)

3.区分APB1和APB2

如红圈8表示的位置,STM32F4 很多外设的时钟来源,即两个总线桥: APB1 和 APB2,其中 APB1是低速总线(最高 42Mhz),APB2
是高速总线(最高 84Mhz)。另外定时器部分,如果所在总线( APB1/APB2)的分频系数为 1,那么就不倍频,如果不为 1(比如 2/4/8/16),那么就会 2 倍频( Fabpx*2)后,作为定时器时钟输入。

简单点说,举个APB1的例子,系统时钟是168Mhz,APB1分频系数为4(system_stm32f4xx.c配置),则APB1速度为42Mhz,但是挂靠在在该总线上的定时器,由于分频系数4而不是1,因此定时器输入频率为42Mhz
x 2 =84 Mhz

这里这个人讲的挺好的http://www.cnblogs.com/zyqgold/archive/2013/05/31/tim.html,但是定时器频率算错了,具体看评论,有人给他改过来了。

这篇文章也很好;http://blog.sina.com.cn/s/blog_7142d7da01014zwz.html

时间: 2024-10-26 21:42:34

STM32F4xx时钟理解的相关文章

pygame 快速入门

pygame 快速入门 目标 项目准备 使用 pygame 创建图形窗口 理解 图像 并实现图像绘制 理解 游戏循环 和 游戏时钟 理解 精灵 和 精灵组 项目准备 新建 飞机大战 项目 新建一个 hm_01_pygame入门.py 导入 游戏素材图片 游戏的第一印象 把一些 静止的图像 绘制到 游戏窗口 中 根据 用户的交互 或其他情况,移动 这些图像,产生动画效果 根据 图像之间 是否发生重叠,判断 敌机是否被摧毁 等其他情况 01. 使用 pygame 创建图形窗口 小节目标 游戏的初始化

PyGame快速入门

pygame 快速入门 目标 项目准备 使用 pygame 创建图形窗口 理解 图像 并实现图像绘制 理解 游戏循环 和 游戏时钟 理解 精灵 和 精灵组 项目准备 新建 飞机大战 项目 新建一个 hm_01_pygame入门.py 导入 游戏素材图片 游戏的第一印象 把一些 静止的图像 绘制到 游戏窗口 中 根据 用户的交互 或其他情况,移动 这些图像,产生动画效果 根据 图像之间 是否发生重叠,判断 敌机是否被摧毁 等其他情况 01. 使用 pygame 创建图形窗口 小节目标 游戏的初始化

汇编实现时钟设置代码理解

下面的笔记是我在看<朱老师物联网大讲堂>(www.zhulaoshi.org)之后所做的笔记,只是大概根据自己看了视频与朱老师上课做的笔记而有的理解记录下来. 写了 有代码的,要把代码给理解完整. 朱老师的随堂程序是:clock.s // 时钟控制器基地址 #define ELFIN_CLOCK_POWER_BASE0xE0100000 // 时钟相关的寄存器相对时钟控制器基地址的偏移值 #define APLL_LOCK_OFFSET0x00 #define MPLL_LOCK_OFFSET

angularjs随笔01 数据双向绑定理解 自定义过滤器 时钟更新列子

1.   数据的双向绑定可以简单的理解为,无论在文本框中输入什么,都会在数据模型中显示出来输入的内容, 双向绑定的模型和数据是进行动态绑定的,实时检查进行修改. <input type="text" ng-model="name"> {{name}} 在上述代码中,通过angular.js将数据模型对象($scope)的name属性与文本模型绑定在一起,然后就实现了在输入框输入什么都会 在文本模型中显示对应的内容,实时更新. 控制器controller,

轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)

Hey,guys! 让我们一起用HTML5实现一下简易时钟吧! 接触canvas时, 我突然有一种非常熟悉的感觉------canvas的部分的功能其实和Photoshop中的 钢笔工具 是一样的.所以,如果你对 PS里的 钢笔工具 运用自如的话,恭喜你,canvas你将很快上手~~ 说下对HTML5中canvas的理解,canvas翻译成中文就是画布,顾名思义,canvas当然是用来作画的啦~~ 作画嘛,其实现的思想 与 photoshop 基本上是一样的~~,只不过photoshop可以用可

【JAVA语言程序设计基础篇】--图形-- 三种时钟--增强对类的理解和应用

1.显示任意时间时钟 2.设置三个可见性属性 分别表示时针,分针,秒针的可见性 3.一个精细的时钟 主类:StillClock @SuppressWarnings("serial") class DetailedClock extends JPanel { private int hour; private int minute; private int second; protected int xCenter, yCenter; protected int clockRadius;

深入理解BOM系列第三篇——定时器应用(时钟、倒计时、秒表和闹钟)

× 目录 [1]时钟 [2]倒计时 [3]秒表[4]闹钟 前面的话 本文属于定时器的应用部分,分别用于实现与时间相关的四个应用,包括时钟.倒计时.秒表和闹钟.与时间相关需要用到时间和日期对象Date,详细情况移步至此 时钟 最简单的时钟制作办法是通过正则表达式的exec()方法,将时间对象的字符串中的时间部分截取出来,使用定时器刷新即可 <div id="myDiv"></div> <script> myDiv.innerHTML = /\d\d:\

STM32F4xx那点事(二)——系统时钟的配置

每次接触一款新的单片机,我都会很好奇该单片机的系统时钟是多少MHz,怎样才能达到Datasheet中描述的最大系统时钟,该单片机的外设的时钟会是多少MHz呢?如果要使用延时,我怎么编写程序才能实现精准的延时呢?我认为这些问题是我开始接触新单片机之前需要了解的. 对于每款ARM Cortex-M系列单片机而言,厂商为了更好的推广自己的单片机,同时方便设计人员使用,降低产品开发周期,都会将该单片机的外设相关寄存器以及外设的相关函数都实现并打包,放在官方网站上免费供大家使用.STM32F405RG的标

理解Java对象的交互:时钟显示程序

实现: 结构: 对象:时钟  - 对象:小时                 - 对象:分钟 小时和分钟具有相同属性(值,上限),可以用一个类Display来定义这两个对象: 但是两者之间又具有联系(当分钟达到上限时,小时要加1),这时用另外一个类Clock来对它们进行管理: 首先用Clock类来定义一个clock的对象,用它来管理两个Display类型的对象,也即是clock的成员变量(min,hour),来管理它们之间的关系,再做显示: 总结:一个对象里面有两个对象. package clo