当前位置: 首页 > news >正文

STM32第九节(中级篇):RCC(第一节)——时钟树讲解

目录

前言

STM32第九节(中级篇):RCC——时钟树讲解

时钟树主系统时钟讲解

HSE时钟

HSI时钟

锁相环时钟

系统时钟

SW位控制

HCLK时钟

PCLKI时钟

PCLK2时钟

RTC时钟

MCO时钟输出

6.2.7时钟安全系统(CSS)

小结


前言

        从本章开始,我们就已经开始了中级篇的学习。在这一阶段,我们主要学习时钟RCC,中断定时器,串口通信,DMA,读写EEPROM,读写串行Flash以及FatFs的知识点,整体难度又上升了一部分。所以之前的代码功底,C语言编写能力以及单片机的使用至关重要。如果想学习的同学们可以观看我之前写的初级篇的内容。

        创作不易,点个三连支持一下吧!

STM32第九节(中级篇):RCC——时钟树讲解

        本节课我们讲RCC——复位和时钟控制。复位部分比较简单,我们本节课主要讲时钟部分。如下图就是时钟树的原理图。在讲完课程之后,我们要自己写一个系统使用的配置函数并实现超频工作。官方F103系列的时钟为72M,我们可以配置为128M,为极限频率。

时钟树主系统时钟讲解

HSE时钟

        该时钟为外部的高速时钟,如图所示,他靠的是OSC_IN以及OSC_OUT进行输入以及输出,来源呢是无源晶振(4~16M)我们通常使用8M。关于控制是RCC_CR时钟控制寄存器的位16:HSEON控制。我们可以看到,在下图中有两个起振电容,大小为20PF。与之相匹配的还有HSI在内部做时钟,两者的区别为HSE精度比较高,而LSE受温度影响,会有偏差。

HSI时钟

        高速的内部时钟,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。而控制它的是RCC_CR 时钟控制寄存器的位0:HSION控制。这里要注意一下,HSE时钟的8M在经过倍频9倍后配置为72M,而如果启动了HSI时钟,则一直为8M,无法正常完成工作。

锁相环时钟

        来源 : (HSI/2、HSE)经过倍频所得。

        控制:CFGR:PLLXTPRE、PLLMUL口注意:PLL时钟源头使用HIS/2的时候,PLLMUL最大只能是16,这个时候PLLCLK最大只能是64M,小于ST官方推荐的最大时钟72M。

        我们观察发现,在HSE时钟进去之后,会有一个二分频和一个不分频的线路,与这根不分频线路相接的就是锁相环时钟源PLLSRC,除了这跟线路,还有一根就是HSI的二分频线路,8M被分频为4M接入PLLSRC。相对应的寄存器为RCC_CFGR寄存器的第十七位PLLXTPRE。

        PLLXTPRE: HSE分频器作为PLL输入(HSE divider for PLL entry)由软件置'1'或清”0'来分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。0:HSE不分频,1:HSE 2分频。

        PLLSRC: PLL输入时钟源(PLLentryclock source)由软件置"1'或清'0'来选择PLL输入时钟源,只能在关闭PLL时才能写入此位。0:HSI振荡器时钟经2分频后作为PLL输入时钟,1:HSE时钟作为PLL输入时钟。

系统时钟

        我们可以看到,对于系统时钟来说,有三种方式可以配置系统时钟输入:HSI和HSE直接输入以及PLLCLK锁相环时钟配置,一般就是用锁相环时钟配置时钟为72M.,他就由SW位来控制。

    

SW位控制

        SW[1:0]:系统时钟切换(System clock switch)由软件置'1'或清’0'来选择系统时钟源。在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择HSI作为系统时钟(如果时钟安全系统已经启动)。

        00:HSI作为系统时钟:

        01:HSE作为系统时钟:

        10:PLL输出作为系统时钟;

        11:不可用。

        而相应的寄存器位SWS位也会配置为1:

        我们一般把SW配置为10,PLL输出。然后我们读取SWS位是否为10,来判断我们是否时钟切换完毕。

HCLK时钟

        HCLK:AHB高速总线时钟,速度最高为72M。为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)。

        来源:系统时钟分频得到,一般设置HCLK=SYSCLK=72M。

        控制:CFGR:HPRE。

PCLKI时钟

        PCLK1:APB1低速总线时钟,最高为36M。为APB1总线的外设提供时钟。2倍频之后则为APB1总线的定时器2-7提供时钟,最大为72M。

        来源:HCLK分频得到,一般配置PCLK1=HCLK/2=36M

        控制:RCC CFGR 时钟配置寄存器的PPRE1位

PCLK2时钟

        PCLK2:APB2高速总线时钟,最高为72M。为APB1总线的外设提供时钟。为APB1总线的定时器1和8提供时钟,最大为72M。

        来源:HCLK分频得到、一般配置PCLK1=HCLK=72M

        控制 : RCC CFGR 时钟配置寄存器的PPRE2位

        当APB2配置为72M的时候,通过ADC预分频器最大为14MHz,而在不超频的前提下,最大放大倍数为4倍。

RTC时钟

        RTC时钟:为芯片内部的RTC外设提供时钟口来源:HSE RTC(HSE分频得到)、LSE(外部32.768KHZ的晶体提供)、LSI(32KHZ)

        控制:RCC备份域控制寄存器RCC BDCR:RTCSEL位控制

        独立看门狗时钟:IWDGCLK,由LSI提供

        除了HSE提供的128分之一,还有LSE时钟提供的32.768KHz,还有一个40KHzz的LSI HIC。我们可以发现,在LSE时钟中,有两个接口,分别为OSC32_IN以及OSC32_OUT,如图所示:

MCO时钟输出

        MCO微控制器时钟输出引脚,由PA8复用所得。

        来源:PLLCLK/2,HSE、HSI、SYSCLK

        控制:CRGR以及MCO

6.2.7时钟安全系统(CSS)

        时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。

        如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到CortexTm-M3的NM|中断(不可屏蔽中断)。一旦CSS被激活,并目HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC CIR)里的CSSC位来清除CSS中断。

        如果HSE振荡器被直接或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。

小结

        本节课我们讲述了功能框图,下节课我们讲这个系统使用配置代码部分。

相关文章:

  • Tomcat的部署及调优,jvm调优
  • Java8 新特性
  • Java-并发编程--ThreadLocal、InheritableThreadLocal
  • 《LeetCode热题100》笔记题解思路技巧优化_Part_3
  • QT 状态机的使用
  • RocketMQ架构详解
  • 17个工作必备的Python自动化代码分享(上篇)
  • 泽众云真机-机型支持ADB调试功能即将上线
  • 进程学习--02
  • 有来团队后台项目-解析7
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇
  • Postman请求API接口测试步骤和说明
  • C#使用SharpZipLib对文件进行压缩和解压
  • 【Linux】基础 IO(文件描述符)-- 详解
  • 爬蟲IP代理詳細指南
  • [PHP内核探索]PHP中的哈希表
  • 【译】JS基础算法脚本:字符串结尾
  • 《剑指offer》分解让复杂问题更简单
  • 03Go 类型总结
  • CAP理论的例子讲解
  • echarts的各种常用效果展示
  • github指令
  • react 代码优化(一) ——事件处理
  • underscore源码剖析之整体架构
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 官方解决所有 npm 全局安装权限问题
  • 回流、重绘及其优化
  • 利用jquery编写加法运算验证码
  • 深度学习中的信息论知识详解
  • 什么软件可以剪辑音乐?
  • 使用docker-compose进行多节点部署
  • 微信小程序:实现悬浮返回和分享按钮
  • 一道闭包题引发的思考
  • 中文输入法与React文本输入框的问题与解决方案
  • scrapy中间件源码分析及常用中间件大全
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (9)目标检测_SSD的原理
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (NSDate) 时间 (time )比较
  • (二十三)Flask之高频面试点
  • (二十四)Flask之flask-session组件
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)elasticsearch 源码之启动流程分析
  • (十五)使用Nexus创建Maven私服
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (小白学Java)Java简介和基本配置
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .apk文件,IIS不支持下载解决
  • .a文件和.so文件
  • .gitattributes 文件
  • .htaccess配置重写url引擎
  • .net core 6 集成和使用 mongodb
  • .NET Core引入性能分析引导优化