STM32F103系列增强型微控制器

——时钟控制(RCC)

三种不同的时钟源可用作系统时钟(SYSCLOCK):

HIS振荡器时钟(由芯片内部RC振荡器提供)

HSE振荡器时钟(由芯片外部晶体振荡器提供)

PLL时钟(通过倍频HIS或HSE振荡器倍频得到)

另外还有两个时钟源:

LSI内部40kHz低速RC振荡器时钟,用于驱动独立看门狗或选择驱动RTC

LSE外部32.768kHz低速外部输入时钟,用于驱动RTC

时钟模块框图如下:

图1 时钟树框图

1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。

2.用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。SDIO接口的时钟频率固定为HCLK/2。

3. RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟由高速APB2时钟经2、4、6或8分频后获得。 定时器时钟频率分配由硬件按以下2种情况自动设置:

a. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。

b. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

4. FCLK是Cortex??-M3的自由运行时钟。详情见ARM的Cortex??-M3技术参考手册。

关于HSE、HIS、PLL、LSE、LSI时钟特性及校准直接参考STM32相关Datasheet。

系统时钟配置过程:

配置过程主要对RCC_CR、RCC_CFGR、RCC_CIR这三个寄存器,进行读写访问,配置系统时钟完成后进行对要使用的相应外设时钟进行使能和配置,不用的外设建议关闭相应的外设时钟(降低功耗)。

比较经典的系统时钟选择配置为:使用外部8MHz的HSE时钟源作为PLL时钟输入,PLL再进行9倍频得到72MHZ的时钟作为系统时钟输出,具体实现过程如下:

1、置RCC_CR的HSION[0]位,启动HIS时钟。

2、清RCC_CFGR的MCO[26:24],ADCPRE[15:14],PPRE2[13:11],PPRE1[10:8],HPRE[7:4],SWS[3:2],SW[1:0]位,选择默认的HIS时钟且设置相应的时钟不分频。

3、清RCC_CR的PLLON[24],CSSON[19],HSEON[16]位,关闭PLL和HSE时钟,且关闭时钟检测。

4、清RCC_CR的HSEBYP[18]位,说明HSE时钟为外部的陶瓷晶体振荡器,并非旁路模式。

5、清RCC_CFGR的USBPRE[22],PLLMUL[21:18],PLLXTPRE[17],PLLSRC[16]位,使HSE不分频作为PLL的时钟输入,PLL的1.5倍频作为USB的时钟。

6、清RCC_CIR所有位,关闭全部的时钟中断。

7、置RCC_CR的HSEON[16]位,开启HSE振荡器。

8、检测RCC_CR的HSERDY[17]位来检测HSE振荡器是否准备就绪,若该位为1则接着往下配置,否则一直等待检测直到该位被硬件置1或等待检测时间结束。

9、清RCC_CFGR的HPRE[7:4]位,设置AHB预分频值使SYSCLCK不分频。

10、清RCC_CFGR的HPRE2[13:11]位,设置APB2时钟(PCLK2)不分频。

11、置RCC_CFGR的HPRE1[10:8]位为110,设置APB1时钟(PCLK1)二分频。

12、置RCC_CFGR的PLLMUL[21:18]位为0111,设置PLL9倍频输出,得到SYSCLK为72MHz。

13、置RCC_CR的PLLON[24]位,使能PLL时钟。

14、检测RCC_CR的PLLRDY[25]位,若为1表示PLL时钟锁定成功,为0表示锁定未完成,继续检测等待直到该位被硬件置1.

15、置RCC_CFGR的SW[]1:0]位为10,选择PLL输出作为系统时钟。

16、检测RCC_CFGR的SWS[3:2]位,若为10表示PLL作为系统时钟使用成功,否则一直等待直到该位为10,。

17、至此系统时钟配置全部完成。

总结系统时钟配置大体过程:

1、上电初始,开启HSI振荡器,关闭PLL及HSE,清RCC_CR及RCC_CFGR形影位为缺省值

2、开启HSE振荡器,等待HSE振荡器启动并进入稳定。

3、选择HSE作为PLL时钟输入,配置好各个预分频器相应的预分频系数。

4、启动PLL时钟,等待PLL时钟准备就绪。5、选择PLL时钟输出作为系统时钟输入。

6、等待PLL时钟成功作为系统时钟输入。

7、配置完成。

STM32F103单片机系统时钟部分归纳相关推荐

  1. STM32F103之系统时钟初始化及延迟函数

    本篇博文最后修改时间:2019年09月18日 15:16. 一.简介 本文以STM32F103编程为例,介绍STM32F103系统时钟初始化及延迟函数编写 二.实验平台 电脑平台:Windows7 6 ...

  2. STM32配置单片机系统时钟(转)

    具体步骤如下: 第一步,全局搜索HSE_VALUE #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscill ...

  3. stm32f103最小系统的组成及各部分功能

    今天来跟大家普及一下stm32f103单片机的最小系统组成和各部分功能. 一.什么叫最小系统 最小系统就像我们人,我们活着每天都要吃饭,喝水. 饭和水就是我们的"燃料",离开它们我 ...

  4. 歪解单片机的时钟系统--关于内外时钟切换及时钟超频测试

    群友问过这种问题,外部接8M晶振和16M晶振有啥区别?        以我微薄的经验来看,这两个在用的时候差别不大,如果使用ST的固件库(以STM32F103为例),使用8M的晶振会更方便,不用改任何 ...

  5. 关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

    绪论 本文主要讲解单片机的时钟系统的相关知识,并进行超频测试,同时介绍如何在STM32F0单片机上进行内外时钟的切换,在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法. 一.杂谈 问题来源于 ...

  6. STM32F103单片机使用内部RC振荡器做时钟源

    平时在做项目的时候都用的是外部晶振做为时钟源,想试试用内部RC振荡器做为时钟源,在网上搜了一下如何设置内部时钟,发现资料比较少的.决定将设置内部RC振荡器做为时钟源的方法记录下来. 用的单片机是STM ...

  7. 基于51单片机的时钟系统

     这一次带来的项目是课程设计级别的基于51单片机的时钟系统,本次的项目共有两种,一种是基础功能时钟,上电后自动从00-00-00开始计时,另一种加上了调时功能,上电后自动从00-00-00开始,当需要 ...

  8. 计算机时钟的工作原理,单片机的周期与系统时钟的工作原理

    我们先来理解几个比较重要的概念:时间周期.指令周期.机器周期,以及系统时钟的工作原理. 时钟周期: 时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ= ...

  9. STM32F103学习之系统时钟配置

    STM32F103学习之系统时钟配置 文章目录 一.根据时钟源配置系统时钟(SYSCLK) 二.系统时钟配置步骤 1.代码 一.根据时钟源配置系统时钟(SYSCLK) 1.开发板选择的8M的外部高速时 ...

最新文章

  1. ffmpeg.exe dos下怎么用 放在哪里
  2. P1420 最长连号(python3实现)
  3. 关于ArcGIS Rest API
  4. 7-13 镖局运镖 (10 分)
  5. 安装jdk和oracle要注意的知识点
  6. 一个没有经验的前端工程师,写CSS的时候有什么常见通病?
  7. table-layout:fixed; 表格比例固定
  8. Python正态性检验
  9. tp6 gatewayWorker
  10. factorytalk找不到OPC服务器,simatic net 做远程opc服务器问题
  11. ConcurrentModificationException
  12. 华域php公司,华域智能DNS系统
  13. 电脑鼠标在右键时一直转圈不显示解决措施
  14. 华中科技大学--数据结构课程设计 ---红楼梦人物关系分析
  15. 修改lib库对应的dll名称
  16. Java WEB开发须知知识点---概况篇
  17. MD5工具类(含16位、32位、加盐、无盐、大小写)
  18. 系统动力学模型matlab仿真,MATLAB/Simulink动力学系统建模与仿真(带目录)_IT教程网...
  19. ios 热更新jsPatch
  20. mysql查询进阶——员工表与部门表连接查询

热门文章

  1. Java 并发编程73道面试题及答案 ——面试看这篇就够了!
  2. 【阿里云 Linux 服务器】mysql 遇到以下问题Expression #1 of SELECT list is not in GROUP BY clause and contains nonag
  3. 软件测试-PR录制脚本程序的时候出现license invalid,error code=0的错误
  4. matlab bs2rv.m,Matlab智能算法之遗传算法(一)
  5. js 浅拷贝直接赋值_js 深拷贝 vs 浅拷贝
  6. 数据库分片教程mysql_简述MySQL分片中快速数据迁移
  7. 【案例】弱电机房用电负荷计算意义及计算方法
  8. ubuntu 打开ssh登陆_Ubuntu 开启远程登录 SSH 的安装和配置
  9. abstractset java_AbstractSet源码分析-java8
  10. CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等