STM32F0系列寄存器操作02:RCC时钟配置

本文介绍了STM32F0系列的RCC时钟配置,包括时钟树详解、原子例程的RCC初始化步骤以及在F0系列上的移植实践。详细阐述了时钟源选择、倍频分频设置,以及寄存器复位、使能等操作。
摘要由CSDN通过智能技术生成

上一篇已经完成了一个空工程的建立,那程序要能跑起来,下面的第一步肯定就是:时钟配置。

先大概说一下我的攻克RCC的步骤:

1)看懂F0系列的时钟数(我真实用的芯片是STM32F072RBT6);

2)详细分解原子例程中的RCC初始化操作;

3)模拟原子的RCC初始化步骤实现在F0系列上的RCC寄存器操作移植(是的,我觉得我目前做到的就是一个类似移植;

开始吧!

首先来说一下RCC的配置流程:

1、时钟初始化,即将时钟的寄存器采用默认值。

2、开始外部时钟且外部时钟起震准备就绪。

3、设置PLLXTPRE(只能在关闭PLL时才能写入此位),可选择分频不分频。

4、设置进入PLL的源时钟(只能在关闭PLL时才能写入此位)。因为采用外部时钟所以只有一种设置。

5、设置PLL倍频系数PLLMUL(只有在PLL关闭的情况下才可被写入)。

6、开启PLL,且准备就绪。

7、设置SW,选择时钟源为系统时钟。

8、判断是否是预选的时钟为系统时钟。
 

目录

1. 时钟树详解:

1)首先就是时钟输入源

2)时钟倍频及分频:

2. 原子例程中的RCC初始化操作

第一步:复位向量表

第二步:配置CR和CFGR

3. F0系列下RCC时钟配置移植

第一步,复位向量表

1)复位APB1RSTR和APB2RSTR(由于这两个寄存器和F103的完全一样,可以直接照搬即可),其实就是寄存器清零操作。

2)使能闪存和SRAM(这里的目的应该是为了程序能正常运行吧,我是这么理解的)

3)复位APB1ENR和APB2ENR

3)使能HSION的情况下,去清空寄存器(备注:这时其实很多位还是不一定清空的,因为有些为必须在一些条件下才能写)

4)第二步清CFGR的其他位

5)关于最后的向量表偏移说明

第二步 配置时钟

1)设置外部晶振(HSE)作为时钟源

2)等待外部时钟就绪

3)写入PLLMUL作为倍频数(因为前面的复位已经让其他的倍频和分频复位成默认的1倍,因此只需要再写要倍多少倍就可以实现最终的频率配置)

4)打开PLL、等待PLL锁定(这里都是操作相应的寄存器位既可)

5)设置PLL作为系统时钟并等待系统时钟设置成功标志


 

1. 时钟树详解:

我按我自己的理解讲吧,很多特别细节的地方肯定没有说明白,但是应该足够应用了吧(至少我是这么理解的);

1)首先就是时钟输入源

有两个选项:图中的IN1-----外部晶振,一般选8M晶振;

                      图中的IN2------内部8M的RC振荡时钟;

      一般来说,会选择外部的晶振作为时钟源(比RC振荡时钟的精度肯定是要高很多的)。

 

2)时钟倍频及分频:

输入时钟经过多次倍频和分频后得到各外设时钟的时钟源;

具体流程大家看图就好,这里我说几个跟时钟配置比较相关的点就可以了。

图中几个重要的倍频和分频系数都是在RCC的寄存器中需要进行配置的,如PLLMUL、AHB预分频器、APB预分频器、PLLNODIV等。

一般比较简单的设置流程就是这样的:

选择外部时钟源作为PLL的输入时钟,然后PLLMUL倍频系数选择*6,即可把PLLCLK倍频到48M(F0系列最高时钟48M,这里就以设置48M为例),后续其他的分频和倍频系数都选择默认的1既可以;

这样最后就可以得到主频48M,外设的频率也都是48M的工作时钟;

个人觉得,这是最简单的配置模式,当然,如果对时钟有比较高的要求,可以再细研究吧!

2. 原子例程中的RCC初始化操作

下面是原子例程里的时钟初始化函数,大概说一下我的理解:

第一步:复位向量表

这里的工作主要是把RCC_CFGR寄存器清0,因为CFGR寄存器有几个位是需要再某些条件下才能进行写操作,所以就有了先写CR寄存器把条件满足,再给相应位清零;

第二步:配置CR和CFGR

是的,最主要的就是这两个寄存器。

原理就是我前面说的,先选择时钟源为外部晶振时钟源,然后把PLLMUL(CFGR寄存器的某几位)设置成相应的值即可。

整个逻辑还是比较简单的,下面我在F0下移植一遍应该就更清楚了。

3. F0系列下RCC时钟配置移植

第一步,复位向量表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值