stm32f1时钟分析

stm32f1时钟分析

 

STM32片上时钟分析

一、前言

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是对中断的设置。这样,系统时钟的来源如下图。蓝色为复位后的时钟系统,红色为软件设置的时钟。

stm32f1时钟分析

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。出错代码如下图:

stm32f1时钟分析

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

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

stm32f1时钟分析

转载于:https://www.cnblogs.com/lxjsailor/archive/2012/07/06/2793486.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110371.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云麦体脂秤怎么拆开(云麦好轻体脂秤如何校准)

    如果是一个真正的体脂秤就好了:华为智能体脂秤2019-06-2617:12:0034点赞11收藏25评论家里十几块钱的体重秤电池没电了,电池仓用螺丝刀也搞不开,不得已买个新的吧。这两年体脂秤吹的火,就也来尝尝鲜。平时在健身房经常使用Inbody的体质测试仪器(一种高级体脂秤),所以看到体脂秤广告里说的人体生物电啊,测体脂啊,多项直标啊什么的,还是挺期待。毕竟健身房的体测仪需要密码才能用,如果…

    2022年4月15日
    163
  • linux怎样重启命令,Linux重启命令介绍

    linux怎样重启命令,Linux重启命令介绍下面介绍在Linux操作系统中重启和关闭相关的命令:shutdown、reboot、init、halt、poweroff、systemctl,你可以根据需要来选择适合的Linux命令关闭或重新启动系统。其中shutdown、halt、poweroff、reboot命令是用来停机、重启或切断电源,systemctl命令管理systemd,是Linux系统和服务器的管理程序。使用…

    2022年10月17日
    4
  • Origin2017、Origin2018详细安装教程

    Origin2017、Origin2018详细安装教程1.Origin2017安装1.1安装步骤:解压安装包,打开“Origin2017”目录,双击“setup.exe”开始安装安装步骤1,点击【下一步】安装步骤2,点击【是】,允许用户协议安装步骤3,选择【安装产品(需要序列号)】,点击【下一步】安装步骤4,输入任意用户名,公司名称,安装序列号为【DF2W8-9089-7991320】,然后点击【下一步】安装步骤5,根据系统自动匹配,64位系统默认选择【64位Origin】,32位系统无此项,点击【下一步】安装步骤6,默认装在

    2022年4月28日
    97
  • linux安装yarn

    linux安装yarn这里介绍使用yum的方式:先要安装node.js,用node-v可以查看是否安装了node。1、添加yarn仓库wgethttps://dl.yarnpkg.com/rpm/yarn.repo-O/etc/yum.repos.d/yarn.repo2、安装yarnyum-yinstallyarn安装完成后,yarn-v可以查看版本。…

    2022年5月9日
    38
  • idea导入maven项目右侧没有maven_maven多模块和单模块的

    idea导入maven项目右侧没有maven_maven多模块和单模块的今天重装了idea,发现右边的maven,数据库模块不见了,在网上找了一些方法(如:https://blog.csdn.net/zhouyingge1104/article/details/50068919),也没解决,最后自己瞎捣鼓出来了,记录下。1.maven模块不见了,如图:2,找到右下角这个图标,如图:3,鼠标右击,出现很多菜单模块,如图:4.点击Mavenp…

    2022年10月3日
    5
  • LCA详解_lca软件

    LCA详解_lca软件LCA问题(leastCommentAncestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u,v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找到一个节点,同时是u和v的祖先,并且深度尽可能的大(尽可能远离树根).LCA问题的解法有很多,有一般解法,基于tarjan的解法,跳表解法以及RMQ和LCA互相转化的解法。下面我们依次

    2025年8月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号