zoukankan      html  css  js  c++  java
  • STM32 RCC时钟 初学笔记

    目录:

    1. 系统时钟的时钟源

    2. HSE时钟

    3. HSI时钟

    4. 锁相环时钟PLLCLK

    5. 配置系统时钟流程(重要!)

    6. SystemInit固件库函数

    • 系统时钟的时钟源

     系统时钟来源可以是HSI内部晶振(上)、HSE外部晶振(下)、(中间)PLL锁相环时钟(由(HSI/2或HSE)经过倍频所得)。

     控制选择系统时钟源:RCC_CFGR寄存器的位1:0 SW:系统时钟切换 

    • HSE时钟

    HSE:High Speed-External Clock signal,即高速的外部时钟。
    来源:无源晶振(4-16M),通常使用8M,硬件电路如下

     控制:RCC_CR时钟控制寄存器的位16:HSEON控制

     因为是无源晶振,要接电容接地,启动需要一定时间,RCC_CR的位17用来读取外部晶振就绪标志

     

     

    • HSI时钟

    HSI:Low Speed Internal Clock signal,高速的内部时钟。(相比于HSE,HSE更精确)
    来源:芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。
    控制:RCC-CR时钟控制寄存器的位0:HSION控制

    • 锁相环时钟PLLCLK

    来源:(HSI/2、HSE)经过倍频所得。一般常用HSE的8M*PLL9倍频=72M。
    控制:CFGR:PLLXTPRE,PLLMUL

     

     

    注意:PLL时钟源头使用HSI/2的时候,PLLMUL最大只能是16,这个时候PLLCLK最大只能是64M,小于ST官方推荐的最大时钟72M

     

    • HCLK时钟

    配置好系统时钟后,AHB下有很多总线,APB1、APB2下挂着很多外设。

     

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

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

    控制:CFGR:HPRE

    • 配置系统时钟流程(重要!)

    1. 选择HSE的8M,PLL选择为9倍频后,8*9为72M。
    2. 选择系统时钟源为PLL锁相环时钟。
    3. 选择AHB高速总线时钟(HCLK)为1分频,即为72M。
    4. 因为APB1最大为36M,设置APB1时钟为2分频,即为36M。
    5. 设置APB2时钟为1分频,即为72M。

    补充:CSS时钟安全系统:

    时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被 使能,并在HSE时钟关闭后关闭。 如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和 TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到 Cortex™-M3的NMI中断(不可屏蔽中断)。

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

    • SystemInit固件库函数

    系统在复位程序时调用SystemInit固件库函数配置系统时钟为72MHz。

    会调用SetSysClockTo72(void)函数,粗线条地配置好各总线的时钟:

    1、使能HSE,配置RCC_CR寄存器的位16 HSEON:外部高速时钟使能(0:HSE振荡器关闭; 1:HSE振荡器开启。)

    2、等待HSE就绪,读取RCC_CR寄存器的位17 HSERDY:外部高速时钟就绪标志(0:外部3-25MHz时钟没有就绪; 1:外部3-25MHz时钟就绪。)

    3、HSE启动成功后,做对应处理。

    配置RCC_CFGR的位4:13,设置AHB时钟不分频、APB1时钟2分频(100)、APB2时钟不分频(000)

    配置RCC_CFGR的位16:21,设置PLL输入时钟源为HSE、PLL9倍频。

     

     

     

    4、PLL、AHB、APB1、APB2分频或倍频配置好后,使能锁相环时钟PLL,配置PCC_CR寄存器位24 PLLON:PLL使能 (0:PLL关闭; 1:PLL使能。)

     

    5、使能PLL以后,选择PLL为系统时钟,配置RCC_CFGR寄存器位1:0 SW:系统时钟切换(00:HSI作为系统时钟; 01:HSE作为系统时钟; 10:PLL输出作为系统时钟; 11:不可用。)

     

  • 相关阅读:
    慎用const_cast
    python中string的操作函数
    C++ Const总结
    python dict sorted 排序
    "没有找到MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序...
    提高你开发效率的十五个 Visual Studio 使用技巧
    一些 python 插件 编译安装的注意事项
    html 制作表格 合并 样式
    将一个表的数据更新到另一个表中
    屏蔽web页面的右键,但不屏蔽输入框中的右键
  • 原文地址:https://www.cnblogs.com/XIEjm/p/13266765.html
Copyright © 2011-2022 走看看