stm32f1时钟分析

发布者:独享留白1028最新更新时间:2016-10-18 来源: eefocus关键字:stm32f1  时钟分析 手机看文章 扫描二维码
随时随地手机看文章
一、前言

1、本文主要讨论系统时钟以至外设时钟之间的源流关系。介绍stm32的片上时钟系统,描述系统时钟初始化函数SystemInit()对时钟的控制(从HSE到SYSCLK,第二节)与配置(SYSCLK到外设,第三节)。

2、103与107所用时钟系统略有不同,但系统时钟(SYSCLK)都是72MHz。

3、f107应当使用25MHz晶振。若采用8MHz的晶振,搭配3.0.0版固件库,则将f107当做f103使用,不能驱动通信线产品所有功能(以太网)。

4、以太网的时钟可以参考f107数据手册,附录A2.

5、RTC时钟源来自32.768kHZ晶振。

二、系统时钟SYSCLK

本节关注SYSCLK的来源。

f107与f103时钟系统略有不同,以下讨论除非特别说明,全都针对f107,采用25MHz晶振,时钟树见附录。

1、系统时钟:SYSCLK

系统复位后,HSI振荡器被选为系统时钟(8MHz),通过软件(SystemInit()函数)将系统时钟源切换到PLLCLK。

PLLCLK的来源是外部晶振HSE,由HSE信号经过5分频、8倍频、5分频得到8MHz的PLL时钟源,将其9倍频得到72MHzPLLCLK。(若在f107上采用8MHz晶振,则将HSE信号9倍频得到PLLCLK(72MHz),即系统时钟)

2、SystemInit()函数对时钟的控制(时钟控制寄存器CR,时钟配置寄存器2CFGR2)

此函数在3.0.0与3.1.2版本固件库中是不同的。相较于f103,f107在硬件上多了两个锁相环和一个CFGR2寄存器,并且定义了CR寄存器的26~29位。3.0.0版本固件库升级为3.1.2版本,正是为了配合这种变化,并实现新增的功能。

调用3.0.0库中的SystemInit()函数,结果如下:

寄存器

CR

0101 0083

CFGR

001D 0402

CFGR2

函数未涉及此寄存器

CIR

0000 0000

 

对此不作过多讨论,这样的方式会使以太网无法使用。

调用3.1.2库中的SystemInit()函数,结果如下:

寄存器

CR

0501 0083

CFGR

001D 0402

CFGR2

0001 0644

CIR

009F 0000

前三个寄存器配置了系统时钟,CIR是对中断的设置。这样,系统时钟的来源如下图。蓝色为复位后的时钟系统,红色为软件设置的时钟。

3.1.0版本的固件库中,SystemInit()函数有bug,会在下文提到。

三、总线时钟与外设时钟。

本节关注从SYSCLK生发出的时钟(PCLK等)。

1、特性与相互关系

由系统时钟分频得AHB时钟(也称为HCLK),AHB时钟供给内核的有三路:HCLK、FCLK、系统定时器(可能需要分频,视芯片型号而定)。

①两个高速外设总线的最高时钟不同,但都来自于HCLK。

②定时器有硬件设置的分频器,所以CK_INT(internal clock,或称作TIMxCLK)并不一定等于相应总线的频率,其规则为:如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。 

③ADC时钟ADCCLK有最大限制,对于103和107,最大为14MHz。所谓最快AD时间为1M分之一秒的说法是这么来的:

TCONV = 采样时间+ 12.5个周期

采样时间设为最短的1.5个周期,这样TCONV就是14个ADCCLK周期,当ADCCLK取最大的14MHz时,TCONV的时间就是1M分之一秒。

④有个有趣的现象:系统时钟配置成72MHz时,无法实现最快ADC。这是因为由于ADCCLK的上限限制,要对PCLK2进行分频,而72M无法分频为14M,最大可用只能为12M,这样自然不能实现最快ADC。

2、SystemInit()对RCC的配置(时钟配置寄存器CFGR)

AHBCLK=HCLK=SYSCLK=72MHz

PCLK1=HCLK/2=36MHz,  

PCLK2=HCLK=72MHz

TIMx(所有定时器)=PCLK1*2=PCLK2=72MHz

ADCCLK=36MHz

以上就是正常情况下SystemInit()的配置。所谓“正常”,是针对3.1.0版本固件库的bug来说的。此固件库的SetSysClockTo72函数(在system_stm32f10x.c文件中,被SystemInit调用),在配置通信线产品的PREDIV1时(或称为prediv1factor),错将5分频配置成3分频,导致芯片的系统时钟超频运行在120MHz。3.1.2版本外设固件库修正了这个bug。出错代码如下图:

 另外,在调用SystemInit()函数以后,ADCCLK是超频的(PCLK2/2, 36M),无法有保障地使用,需要调用RCC_ADCCLKConfig(RCC_PCLK2_Div6)将其配置成12MHz。这种麻烦特性到3.5.0版本固件库仍然存在,不知是什么意图。

附录:f107时钟树,或见参考手册7.2,图11


关键字:stm32f1  时钟分析 引用地址:stm32f1时钟分析

上一篇:STM在RAM运行的设置
下一篇:stm32关闭中断

推荐阅读最新更新时间:2024-03-16 15:15

stm32f4 - 时钟分析配置
时钟分类 stm32f4的时钟有很多分支,主要分为主系统的时钟和一些外设时钟,主系统的时钟又通过AHB分频,分出了HCLK到AHB总线内核的时钟,cortex系统定时器时钟,FLCK自由运行时钟。PHY以太网和USB和看门狗RTC时钟不使用主系统的时钟,都是独立的使用一个内部或外部时钟源。 主要时钟源 stm32f4有一个内部16M高速时钟HSI和内部32K低速时钟LSI,系统时钟源可以选用外部的高速时钟源也可以使用内部的高速时钟HSI,当外部高速时钟不可用时,内部高速时钟会默认设置为系统时钟保证系统的运行。内部低速时钟用来当做看门狗和RTC时钟的主时钟源。stm32f4还有两个时钟输出引脚,这两个引脚通过芯片内部的时钟输出到其他
[单片机]
stm32f4 - <font color='red'>时钟</font>树<font color='red'>分析</font>配置
MSP430时钟定性分析
1.时钟参数 1.1 宏定义时钟注释 //宏定义外接时钟,设置时钟很重要 #define EXTAL_IN_XT1_HZ ( 32768) #define EXTAL_IN_XT2_HZ (4000000) //宏定义内部REFO,VLO时钟频率 #define VLOCLK_FREQUENCY ( 10000) #define REFOCLK_FREQUENCY ( 32768) 1.2 时钟来源 switch(clk) { case CLOCK_XT1 :g_sClock.CLK.nHZ = EXTAL_IN_XT1_HZ;break; case CLOCK_VLO :g_sClock.CLK.nHZ =
[单片机]
MSP430<font color='red'>时钟</font>定性<font color='red'>分析</font>
高速互联链路中参考时钟的抖动分析与测量
高速互联链路介绍 任何一个通信链路都包含三个部分:发送器(TX)、媒质(信道)、接收器(RX)。对于高速的串行互联链路也包含这三个部分,如下图1所示为一个典型的高速互联链路的结构图。其中发送器包括了:并行转换串行、编码(比如8b10b编码)、发送信号优化(如预加重)、发送驱动等功能。接收器包括了:时钟恢复、数据恢复、接收信号优化(如均衡)、串行转化并行、解码等功能。传输通道则由印刷电路板的走线、过孔、连接器、插卡的金手指、电缆、光纤等组成。 从整个链路的组成来看,发送器参考时钟的抖动在串并转换时就引入到整个链路中,影响着TX端发送出的数据的抖动,而接收器要从这些数据中恢复出时钟来进行后续的处理。可以看出发送器参考时钟的性能对整个
[测试测量]
高速互联链路中参考<font color='red'>时钟</font>的抖动<font color='red'>分析</font>与测量
MSP430时钟定性分析
1.时钟参数 1.1 宏定义时钟注释 //宏定义外接时钟,设置时钟很重要 #define EXTAL_IN_XT1_HZ ( 32768) #define EXTAL_IN_XT2_HZ (4000000) //宏定义内部REFO,VLO时钟频率 #define VLOCLK_FREQUENCY ( 10000) #define REFOCLK_FREQUENCY ( 32768) 1.2 时钟来源 switch(clk) { case CLOCK_XT1 :g_sClock.CLK.nHZ = EXTAL_IN_XT1_HZ;break; case CLOCK_VLO :g_sClock.CLK.nHZ =
[单片机]
MSP430<font color='red'>时钟</font>定性<font color='red'>分析</font>
【ARM裸板】S3C2440 时钟设置与分析
由时钟树分析,时钟源通过选择器接入给MPLL(Main PLL)与UPLL(USB PLL) 经过MPLL得到FCLK提供给CPU FCLK分别通过HDIVN与PDIVN分频得到HCLK与PCLK HCLK接入给AHB总线,再给各种高速设备(Nand Flash、内存控制器、中断控制器…) PCLK接入给APB总线,再给各种低速设别(I2C、PWM、GPIO、UART…) 1.时钟源最大值 2.时钟源 2.1 两种时钟源 1.晶振 2.外部引脚时钟输入 2.2 选择时钟源 通过改变OM 引脚来选择时钟源 JZ2440 OM 接入GND,则主时钟源与USB时钟源都选择外部晶振 3.上电时钟分析 复位等待,
[单片机]
【ARM裸板】S3C2440 <font color='red'>时钟</font>设置与<font color='red'>分析</font>
stm32f1按键检测使用外部中断以及定时器延时方式去抖
本来一个按键检测是很简单的功能,在大学的时候做的51单片机矩阵键盘更要复杂,但是如果要在操作系统中使用按键并且很好的去除抖动,不影响整个rtos系统的运行,保证中断不会长时间占用CPU,达到快进快出的目的。就需要另外启动一个定时器来完成计时功能(比如去抖20ms)后,产生定时器中断后再次检测按键电平。 一般51或stm32按键检测流程: #define key1 GPIOC_11 void delay(uint32_t n ) { while(n--); } void key_detected() { if (key1 == 0) { delay(20); if (ke1 == 0)
[单片机]
Stm32时钟分析
该分析材料大部分来自opendev论坛,我所做的只不过是加上一些自己的分析和整理,由于个人能力有限,纰漏之处在所难免,欢迎指正。 Stm32时钟结构图如下,( http://www.openedv.com/posts/list/302.htm ) 对上图的分析如下: 重要的时钟: PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚; 1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号 精度高来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟 3、LSE:低
[单片机]
Stm32<font color='red'>时钟</font><font color='red'>分析</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved